rubyでAS/400接続
DBI(データベースインターフェース)とDBD(データベースドライバ)を利用してODBC接続する。
DBIとDBDについては以下参照。
http://www.jiubao.org/ruby-dbi/ruby-dbi.html
2. DBIとDBDのgemインストール
gem install dbi gem install dbd-odbc
3. 接続してみる
require 'odbc' require 'dbi' conn = DBI.connect('DBI:ODBC:ODBC接続名', 'AS400ユーザ名', 'AS400パスワード') stmt = conn.prepare('実行したいSQL') stmt.execute
ざっくりこんな感じ。詳細は冒頭のリンク参照。
rubyでPDF解析(テキスト抽出)
pdf-readerを使用。
https://github.com/yob/pdf-reader
gem install pdf-reader
以下のコードでPDF内のテキスト吐き出し。
require 'pdf/reader' reader = PDF::Reader.new "test.pdf" reader.pages.each do |page| puts page.text end
UbuntuServer12にnode.jsをインストール
UbuntuServer12をインストールしたての状態からnode.jsをインストールするメモ。
1.aptitudeインストール
sudo apt-get install aptitude
2.ビルドに必要なライブラリインストール
sudo aptitude install gcc sudo aptitude install g++ sudo aptitude install make
3.node.jsの取得
wget http://nodejs.org/dist/v0.10.22/node-v0.10.22.tar.gz
4.node.jsビルド/インストール
make
./configure make sudo make install
以下コマンドでインストールを確認。
node -v
5.npmをインストール
sudo curl -k https://npmjs.org/install.sh | sudo sh
以下コマンドでインストールを確認。
npm -v
ASPで「型が一致しません」
Dim amount amount = 0 '中略 xにはDBから取得した数値 add(x) Sub add(x) amount = amount + x End Sub
■原因
こんなようなことを仕様としたら「型が一致しません」というエラーがでた。
ASP(VBScript)ではadNumericの計算で上記のエラーが起こるらしい。
■対策
CInt()なりCDbl()なりで変換してから計算する。
Dim amount amount = 0 '中略 xにはDBから取得した数値 add(x) Sub add(x) amount = CInt(amount) + CInt(x) End Sub
参考: Microsoftサポート
http://support.microsoft.com/kb/195180/ja
正規表現 POSIX文字クラス
PHPで半角英数字とハイフン、アンダーバー等の半角記号をOKとする様なチェックを作った。
正規表現ちょー苦手なので、何処かからコピってきて
preg_match("/[a-zA-Z0-9!-/:-@\[-`{-~]+$/", $value);
とやってたんだけど、見辛いしあってるかどうかよく分かんない。
その後、Google先生の元で泳いでたらPOSIX文字クラスというものを発見。
POSIX(Portable Operating System Interface)は移植性を高めた共通API規格のことらしい。
上記の正規表現をPOSIX文字クラスで表すと、
preg_match("/^[[:alnum:][:punct:]]+$/", $value)
半角英数字の[a-zA-Z0-9]は[:alnum:]で表現、
半角記号は[:punct:]で表現される。
最初に書いた表現よりよっぽど見やすいし分かりやすい。
POSIX文字クラスには他にもいろいろあるみたい。
POSIX文字クラスについては以下のリンクを参考にさせていただきました。
http://www.y2sunlight.com/water/webman/php1/1J.3.html
RubyでExcel操作(spreadsheet)
Excelを読み取り内容をDBに格納するプログラムを書くのに
Javaのpoiで行こうかと思ったけれど、poiは数値フィールドをdoubleとして取得するため、
「23」という値が23.0となってしまう。
今回のデータでは「23.0」と「23」を明確に分けて取得する必要があるためpoiは却下。
Rubyのspreadsheetというgemを使ってみたらびっくりするぐらい簡単に取得できたのでメモ。
require 'rubygems' require 'spreadsheet' xls = Spreadsheet.open('excel.xls', 'rb') sheet = xls.worksheet(0) puts sheet[0, 0]
こんだけ。
まず、spreadsheetのgemをインストール
gem install 'spreadsheet'
Spreadsheet.openでエクセルを取得し、
xls.worksheet(0)で0番目のシートを取得。
sheet[0, 0]で0行0列を取得。
いとも簡単に「23」が取得できた。
で、OKかと思いきや今度はExcel内の関数評価に問題有り。
sheet[0, 0]でcellに関数が入っている場合はSpreadsheet:formulaが取得できるので、
formulaのメソッドvalueを叩けば良い。
sheet[0, 0].value
ただし、評価の仕方が問題で、cellに「=ROUNDUP(100/3, 3)」という関数が入っていた場合、
Excel上では「33.333」になるのに対して、spreadsheetで取得できた値は「33.333999999999996」。
コレでは使いものにならない....
次はPHPのPHPExcelを試そう。