2011年11月29日火曜日

RubyでExcelに出力する

●Ubuntu上でRubyプログラムでExcelファイルを書き出す(出力)することができるだろうと思って調べました。以下のサイトを参考にさせて頂きました。あらかじめ、「gem install spreadsheet」を行なっておき、rubyプログラムの中で、require します。

http://www.dreamedge.net/archives/97



●逆にExcelファイルから読み出す方法については、以下のサイトを参考にさせて頂きました。プログラムの先頭部分で require 'rubygems'   および require 'spreadsheet' を記述します。

http://doruby.kbmj.com/yuki-Ruby/20091216/Ruby_Excel_



●またExcelファイルから読み出すためにparseexcelを使用する方法について以下のサイトに書いてあります。予め「gem install parseexcel」を行なっておき、rubyプログラムの中で、requireするようです。

http://d.hatena.ne.jp/u-ichi/20080605/1212639221
http://www.weheartcode.com/2007/10/05/reading-an-excel-file-with-ruby/


以下は上記のサイトに書いてあったサンプルを少し修正したものです。引数で指定したExcelファイルについて、内容を画面に出力します。
-----------------------------------------------------------

require 'rubygems'
require 'parseexcel'

workbook = Spreadsheet::ParseExcel.parse(ARGV[0])
worksheet = workbook.worksheet(0)

  j=0
worksheet.each { |row|
  i=0
  if row != nil
  row.each { |cell|
    if cell != nil
      contents = cell.to_s('utf-8')
      puts "Row: #{j} Cell: #{i}> #{contents}"
    end
    i = i+1

  }
  end
  j = j+1
}
------------------------------------------------------


PHPでExcel形式で出力するには

Ubuntu上でPHPを使ってExcelファイルを作成できるプログラムはないかと思って調べました。以下のサイトによればPHPExcelを使用するとExcel2007の形式でファイル出力できます。プログラムの中でPHPExcel が存在するパスを指定してincludeする必要があります。

http://news.mynavi.jp/articles/2009/03/06/phpexcel/index.html


なお、PHPExcelを導入するには、以下のサイトを参照しました。(PHPExcelの現時点のバージョンは1.7.6) ダウンロードしたZipファイルに含まれるフォルダを任意の場所に配置するという方法とpearコマンドを使用する方法があるようですが、私は、pearコマンドを使用しました。pearコマンドを実行したあと調べてみると /usr/share/php/PHPExcel/ というフォルダに PHPExcel.php というファイルができていたので、そのフォルダパスをプログラムのソースの中に指定しました。 

http://phpexcel.codeplex.com/

実際に、Ubuntu上で、Excel2007形式のファイルを出力して、Ubuntu上のOpenOffice(LibreOffice) と、Windows上のExcel2007で、それぞれ開いて中身を見られることを確認しました。OpenOffice(LibreOffice) と、Windows上のExcel2007では、若干、表示の書式が異なっていました。(一部のセルの文字がOpenOffice(LibreOffice)では文字が右寄せなのに、Windows上のExcel2007ではセルの中央に書かれていました。)


既存のExcel ファイルをテンプレートとして、修正をかけて別名保存することもできます。Excel2007形式の場合、テンプレートを、OpenOfficeで作成してしまうと失敗します。(テンプレートはExcelで作成する必要があります。)
なお、テンプレートのセルに式が定義してあった場合には、修正して別名保存すると、式がなくなってしまいただの数値に変化してしまう場合があります。



2011年11月28日月曜日

Ubuntu の人気が落ちてる?

以下のサイトによれば、Ubuntuのシェアが落ちて、代わりにLinuxMintが伸びてきているらしい。

http://news.mynavi.jp/news/2011/11/25/047/index.html

http://news.mynavi.jp/news/2011/11/24/006/index.html

あーあ Ubuntuにようやく慣れてきたかなと思ったところだったのに。それにしてもMintって聞いたことなかった。 

しかし調べてみると、LinuxMint はUbuntuをベースに作成されているとのこと。見た目が違うだけで中身はUbuntuと同じようだ。たとえ LinuxMintが主流になったとしても、Ubuntuで経験したことはどうやら無駄にはならないようだ。よかった。よかった。(^^)

2011年11月27日日曜日

Perl で Excelファイルに書き込みをするには

Linux の環境で、Perl でExcelファイルに書き込みができるだろうかということを調べてみました。

●以下のサイトには、Excelファイルを新規に作成して書き込みを行うための情報が記載されています。
Spreadsheet::WriteExcel を使用します。(なお、予め、cpanでSpreadsheet::WriteExcel を取り込んでおきます。)

http://homepage3.nifty.com/hippo2000/perltips/Spreadsheet/WriteExcel.htm

ただし、Excelファイルを新規に作成するのではなくて、既存のExcelファイルに書き込みをするにはどうすればよいかというと、次のサイトに書いてある情報が参考になります。 Spreadsheet::ParseExcel::SaveParser を使用します。(なお、予め、cpanでSpreadsheet::ParseExcel::SaveParser を取り込んでおきます。)

http://search.cpan.org/~kwitknr/Spreadsheet-ParseExcel-0.2603/ParseExcel/SaveParser.pm

やってみると、確かに既存のExcelファイルに追加で書き込みできることがわかりました。ただし、元のExcelファイルで、式が定義されていたセルが書き込み後には 0などの数値に変化していました。


●Excel2007形式で、ファイルを作成するにはExcel::Writer::XLSXを使用することで対応できます。


use Excel::Writer::XLSX;                                   # Step 0
   my $workbook = Excel::Writer::XLSX->new( 'perl.xlsx' );    # Step 1
    $worksheet = $workbook->add_worksheet();                   # Step 2
    $worksheet->write( "A1", 'Hi Excel!' );                    # Step 3
   





2011年11月26日土曜日

PHP で株価を取り込む

PHP で株価を取り込む

以下のサイトを参考にさせていただきました。

http://d.hatena.ne.jp/iww/20101107


なお、simple_html_dom.php というファイルをインクルードする必要がありますが、以下のサイトからダウンロードできます。 

http://sourceforge.net/projects/simplehtmldom/files/simplehtmldom/

Ruby で株価を取り込む(nokogiriのインストール)

Ruby製nokogiriで株価を切り刻もうというタイトルのサイトがあったので以下にメモしておきます。
http://d.hatena.ne.jp/keyesberry/20100302/p1

さて、上記を使用するには Ruby製nokogiri というのを入れてやる必要があります。そのための手順は以下のとおりです。(環境はUbuntu11.10)


sudo apt-get install libxslt1-dev libxml2-dev
sudo apt-get install rubygems
gem install nokogiri
以上のやり方で、nokogiri をインストールすることはできたのですが、インストールの前後でrubyのバージョンが、1.9.2から、1.8.7に変わってしまいました。


尚、以下のサイトでも、Rubyで株価を取り込む方法が記述されているようです。(まだ試していません。)


http://d.hatena.ne.jp/unageanu/20071102/1194009222

OpenOffice Base に ODBC経由でPHPから接続できるか?

OpenOffice Base に ODBC経由でPHPから接続できるか?以下のサイトを読むと「できない」と書いてある。
http://user.services.openoffice.org/en/forum/viewtopic.php?f=40&t=5925
http://user.services.openoffice.org/en/forum/viewtopic.php?f=40&t=29298

2011年11月25日金曜日

OpenOffice Base へODBC経由で接続はできるのか?

MySql への ODBC接続はできることがわかった(OpenOffice BaseからODBC経由でMySqlに接続することはできた。)のですが、今度は、じゃあOpenOfice Base に対して、ODBC接続などができるのだろうかという疑問がわいてきました。インターネットで探しているのですが、見つからないのでおそらく、少なくとも今の時点ではできないのだろうと推測しています。

2011年11月23日水曜日

MySQL への ODBC 経由での接続

Windows でMySQL への ODBC 経由での接続をするために、まずは、mysql-connector-odbc-5.1.9-win32.msi を以下のサイトからダウンロードしました。

http://dev.mysql.com/downloads/mirror.php?id=404193#mirrors

(このサイトでは、始めてダウンロードする際にはユーザ登録をするように求められるのですが、下の方に以下のようなリンクがあったのでクリックすると、ユーザ登録しなくてもダウンロードできるページに移動してくれました。

» No thanks, just take me to the downloads!



ダウンロードしたmsiファイルをダブルクリックしてインストールを行い、その後、OpenOfficeのBaseから、ODBC経由で MySQLへ接続して、テーブルの中身が見られることを確認しました。

---------------------------------------------------------------------------------------------------

尚、同じようなことを、Linux上(Ubuntu)でも行うには以下のサイトを参照させていただきました。

http://woa-win.ddo.jp/ubuntu/0103.php
http://sourceforge.jp/magazine/07/02/28/0121236
http://nstage.ddo.jp/pukiwiki/index.php?OpenOffice.org%2FBase%2FDB

sudo apt-get install か synaptic で unixODBC libmyodbc php5-odbc unixodbc-bin をインストールしたあとで sudo ODBCConfig を使って、ODBCのDSN登録をします。(なおUbuntu12.04になってから、’sudo ODBCConfig’は使用できなくなっており代わりに’sudo ODBCManageDataSourcesQ4を実行します。’) DSN登録をした結果は/etc/odbc.ini に書き込まれます。またドライバーの情報は/etc/odbcinst.ini に書き込まれます。





Ubuntu12.04になってから、mysqlのODBCドライバーの位置が/usr/lib/i386-linux-gnu/odbc/の配下に変わったようです。以下は、私のマシンの/etc/odbcinst.iniの中身です。ご参考まで。


[MySQL ODBC Driver]
Description             =
Driver          = /usr/lib/i386-linux-gnu/odbc/libmyodbc.so
Setup           = /usr/lib/i386-linux-gnu/odbc/libodbcmyS.so
UsageCount              = 1
CPTimeout               =
CPReuse         =








いったんODBCのDSN登録ができれば、あとはODBC経由で、PHPからアクセスできるようになります。以下は、AccessデータベースをODBC設定して、PHPからアクセスする方法ですが、参考になると思います。
http://www.tsware.jp/study/vol14/php_04.htm

また、いったんODBCのDSN登録ができれば、Ubuntu 上で、 isql コマンドを使って、ODBC登録されたデータベースにアクセスできるようになります。例えば、my.sql というファイルにSQLコマンドを記述しておき以下のようなコマンドで実行することができます。

isql ’DSN’ ’user’ ’pass’ -w < my.sql

2011年11月22日火曜日

WindowsXP で ruby をインストールする。

WindowsXP で ruby をインストールするには以下を参照しました。

http://www.ruby-lang.org/ja/downloads/


ActiveScriptRuby は以下のサイトからダウンロードできます。現時点の最新正式版は、バージョン1.9.3-p0 のようです。

http://www.artonx.org/data/asr/
ダウンロードしたRuby-1.9.3.msi を実行します。

    PHP で配列をソートするには

    PHP で配列をソートするには、例えば以下のようなサンプルのようにする。


    -----------------------------------------------------
    <?php
    function sortArr($arr){
        sort($arr,SORT_NUMERIC);
        for($i = 0; $i < count($arr);$i++)
            echo ($i+1).":".$arr[$i]."\n";
    }

    echo "項目を入力 (カンマで区切って記述):";
    $a = trim(fgets(STDIN));
    sortArr(explode(",",$a));
    ?>

    -----------------------------------------------------

    サンプルその2
    
    
    function sortArr($arr){
        asort($arr,SORT_STRING);
        foreach($arr as $key => $value)
            echo $key . ": " . $value . "\n";
    }
    
    echo "項目を入力(カンマで区切って記述):";
    $a = trim(fgets(STDIN));
    sortArr(explode(",",$a));
    

    explodeを使ったサンプル

    function explodeNow($str){
    
            $arr = explode(" ",$str);
            for($i = 0;$i < count($arr);$i++)
                 echo $i . ": " . $arr[$i] . "\n";
    
    }
    
    
    echo "テキストを入力:";
    $a = trim(fgets(STDIN));
    explodeNow($a);
    

    implodeを使ったサンプル

    
    function implodeNow($arr){
    
            $str = implode ("、",$arr);
            echo $str . "。";
    }
    
    
    $arr = array();
    while(true){
        echo "テキストを入力";
        $a = trim(fgets(STDIN));
        if ( $a == ""){break;}
        array_push($arr,$a);
    
    }
    implodeNow($arr);
    
    

    2011年11月21日月曜日

    WindowsXP で XAMPP をインストールする。

    WindowsXP で XAMPP をインストールするには

    以下のサイトからダウンロードできる。現在のバージョンは、XAMPP 1.7.7

    http://www.apachefriends.org/jp/xampp-windows.htm



    なお、以下のサイトからPHPエディタをダウンロードできる。現時点でのバージョンは、1.3.3
    http://phpspot.net/php/phpeditor.html

    Ubuntu11.10 で ruby を使う

    Ubuntu では ruby が使えるかなと思って rubyというコマンドを入力してみると以下のようなメッセージが表示されました。sudo apt-get install ruby1.9.1 を実行すれば使用できるようになるようです。(ただし、私は始めは1.9.1を使っていたのですが、Nokogiriをインストールした頃からバージョンが、1.8になってしまいました。)


    ---------------------------------------------------------------------------------

    $ ruby
    プログラム 'ruby' は以下のパッケージで見つかりました:
     * ruby1.8
     * ruby1.9.1
    次の操作を試してください: sudo apt-get install <選択したパッケージ>
    ---------------------------------------------------------------------------------

    2011年11月20日日曜日

    PHP を入手する(Windows版)

    PHP を入手するには、以下のサイトから
    http://jp.php.net/downloads.php/

    WindowsBinaries というところを選んで以下のサイトへ移動

    http://windows.php.net/download/


    VC9 x86 Non Thread Safe を選択する。(現時点の最新バージョンは、5.3.8)



    2011年11月19日土曜日

    Perl から MySQLを操作する

    以下のサイトを参考に

    http://www.7key.jp/software/mysql_perl2.html#a_02

    http://adgjm.net/saas/sample.htm

    PHP でXMLファイルを読み込む

    PHP では、XML ファイルを読み込むことができる。以下はそのサンプル


    <?php

    $root = simplexml_load_file('sample.xml');
    foreach($root->children() as $data)
        echo(mb_convert_encoding($data->name . "," . $data->mail . "," . $data->tel,'sjis','utf-8') . "\n");

    ?>

    使った、sample.xmlファイルは以下のとおり
    <?xml version="1.0" encoding="utf-8"?>
    <datas>
        <data>
             <name>yamada</name>
     <mail>yamada.taro@gmail.com</mail>
     <tel>090-1111-1111</tel>
        </data>
        <data>
             <name>tsuyano</name>
     <mail>tuyano@mac.com</mail>
     <tel>090-1111-1111</tel>
        </data>
        <data>
     <name>hanako</name>
     <mail>hanako@flower</mail>
     <tel>080-7777-7777</tel>
        </data>
    </datas>
    
    
    
    

    PHPでxmlファイルを編集する

    <?php
    function addToXMLData($root,$name,$mail,$tel){ $obj=$root->addChild('data'); $obj->addChild('name',mb_convert_encoding($name,'utf-8','sjis')); $obj->addChild('mail',mb_convert_encoding($mail,'utf-8','sjis')); $obj->addChild('tel',mb_convert_encoding($tel,'utf-8','sjis')); } function saveXMLData($name,$mail,$tel){ $root = simplexml_load_file('sample.xml'); addToXMLData($root,$name,$mail,$tel); $root->asXML('sample.xml'); } echo "input name:"; $name = trim(fgets(STDIN)); echo "input mail:"; $mail = trim(fgets(STDIN)); echo "input tel:"; $tel = trim(fgets(STDIN)); saveXMLData($name,$mail,$tel); ?>

    2011年11月17日木曜日

    OpenOffice のマクロをコマンドラインから実行するには

    例えばコマンドラインから以下のように入力するとOprnOfficeのマクロが実行される。

    soffice.exe macro:///Standard.Module1.Main


    以下のサイトなどを参考
    http://hermione.s41.xrea.com/pukiwiki/index.php?OOobbs2%2F4


    以下は、マクロのサンプル



    Sub Main

    msgbox "hello"

    Dim DatabaseContext As Object
    Dim DataSource As Object
    Dim Connection As Object
    Dim Statement As Object
    Dim ResultSet As Object

    DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
    DataSource = DatabaseContext.getByName("kigyou")
    Connection = DataSource.getConnection("", "")

    Statement = Connection.createStatement()
    ResultSet = Statement.executeQuery("select * from 連絡先")

    If IsNull(ResultSet) Then
      MsgBox "検索されたレコード件数が0件"
    Else
      While ResultSet.next
        sValue1 = ResultSet.getString(1)
     '  sValue2 = ResultSet.getLong(2)
       sValue2 = ResultSet.getString(2)


        msgbox sValue1
        msgbox sValue2
      Wend
    End If

    Statement.Close()
    Connection.Close()
    Connection.Dispose()

    msgbox "end"



    End Sub

    2011年11月16日水曜日

    Ubuntu11.10 で Apache と PHPを使えるようにする

    Ubuntu11.10 でApacheサーバをインストールするには

    次のサイトを参考にして
    http://dqn.sakusakutto.jp/2008/08/ubuntu-804apache2.html

    以下のように入力すればよい。
    sudo apt-get install apache2

    Webブラウザで、http://localhost/ を指定すると
    /var/www/index.html  の内容が表示される。


    なお、PHPが使用できるようにするためには以下のサイトを参考にすると
    http://builder.japan.zdnet.com/os-admin/20384129/

    以下のように入力すればよい。


    sudo apt-get install php5 libapache2-mod-php5


    なお、phpMyAdmin をダウンロードして、/var/www の配下に解凍することにより使用することができるようになった。

    (2014.3.11追記)
    phpmyadmin の設定方法については以下のページでも記述しています。

    http://chaos-fractal.blogspot.jp/2013/02/ubuntu-1210-mysql.html


    mysqlデータベースに接続するPHPのサンプルコードは以下のとおり

    --------------------------------------------

    <html>

    <?php
    $server    = '127.0.0.1';
    $username  = 'root';
    $password  = 'xxxx';

    $link = mysql_connect($server, $username, $password);
    if (!$link) {
        die('can not connect : ' . mysql_error());
    }
    echo 'successfully connected';

    $db_selected = mysql_select_db('user',$link);
    if (!$db_selected){
        die('fail to select database'.mysql_error());
    }

    $result = mysql_query('SELECT * FROM pass');
    if (!$result) {
        die('query fail'.mysql_error());
    }

        print("<br>");
    while ($row = mysql_fetch_assoc($result)) {
        print($row['id']);
        print("\n");
        print($row['pass']);
        print("<br>");
    }
    mysql_close($link);
    ?>

    </html>

    2011年11月14日月曜日

    PHPとUbuntuについて

    ●PHPについての本を図書館から借りてきました。
    以下のサイトからダウンロードしてWindows上でPHPを使い始める方法が書いてありました。

    http://jp.php.net/downloads.php



    ●一方、私の使用しているUbuntu11.10でコンソールから
    php と入力してみると以下のように表示されました。

    ----------------------------
    プログラム 'php' はまだインストールされていません。  次のように入力することでインストールできます:
    sudo apt-get install php5-cli
    ----------------------------

    言われるままに、コマンド入力するとPHPが使用できるようになったようです。


    ファイル名を指定して、そのファイル読み込み画面に表示させるサンプル

    <?php
    echo "input file name:";
    $a = trim(fgets(STDIN));
    readfile($a);
    ?>


    ●なお、pear と入力すると以下のように表示されました。(phpのpearというのは何でしょう?perlでいうところのcpanのようなものでしょうか?)

    -------------------------------------------

    プログラム 'pear' はまだインストールされていません。  次のように入力することでインストールできます:
    sudo apt-get install php-pear
    -------------------------------------------





    2011年11月9日水曜日

    OpenOffice Baseを使ってみた。

    Microsoft Accessの代わりになるかもしれないと思い、OpenOffice Baseを使ってみた。
    テーブルをふたつ用意して、リレーションを設定することによりクエリーを作成。
    その状態で、クエリーを実行できる。また、クエリーに対応したSQLを表示できる。
    SQLを変更すると、それに対応してクエリーのデザインも変更されることを確認。
    Accessほど使い勝手はよくないかもしれないが似たようなことができることを確認した。

    Windows版の場合にはAccessのmdbファイルに接続してテーブルの中身を見ることができた。(Linux版の場合にはできない)

    あとは、Acesss VBAのようなことができるかどうかである。
    つまりBasicでプログラミングがどの程度までできるかどうかが気にかかる。
    以下のサイトに情報が載っているようである。

    http://homepage1.nifty.com/tabotabo/ooo/ooolinks.htm
    http://itref.fc2web.com/openoffice/basic/index.html