yucken の業務上電脳 Tips 日記、なのだよ。-弐式-

いまさら電脳 Tips といふものを、書いてみむとして、するなり.元々は広い意味での電脳(コンピュータ)の Tips を書いていたのですが,いつのまにか,解析ツールの「電脳 ruby」と IDL の Tips がメインに (・)>

ruby で書式が決まっているテキストファイルを読む

「パターンマッチング」を使う方法。以下のサイトを参照:

Dennou-Ruby Tutorial
の「テキストデータを読んで図を描く」のところ

逆引きRuby - ファイルアクセス
(「1 行ずつ読み込みを行う」の所のアンカーに飛びます)

逆引きRuby - 正規表現(パターンマッチ)

要するに、

line = file.gets

という感じでファイルを一行読んで

line =~ /^(\d{3}) (\d{3})$/

とパターンマッチングさせると、$1, $2 変数に, 正規表現(/ と / の間) に該当する部分の文字が読まれる、という感じ。ちょっとやってみないと難しいのですが…。

たとえば irb でやってみるとこんな感じ (ファイルを読むとか関係なしに):

irb(main):004:0> string = "543392"
=> "543392"
irb(main):007:0> string =~ /^(\d{3})(\d{3})$/
=> 0
irb(main):008:0> $1
=> "543"
irb(main):009:0> $2
=> "392"
irb(main):010:0> string = "375 564"
=> "375 564"
irb(main):011:0> string =~ /^(\d{3}) (\d{3})$/
=> 0
irb(main):013:0> [$1, $2]
=> ["375", "564"]

ただ、大抵の場合はスペース区切りもしくはカンマ区切りの素直なテキストデータで、

arr = line.split( " " )

的なことをすれば済むんですけどね。古い地球科学分野のデータとかはこういう訳にはいかない。昔は余計なスペースやカンマがもったいなかったんですよね。データ容量的に