Feの日記

Jazz,Fusionを中心に音楽とプログラミングを中心にTech系の話をします。

Rubyで文字列処理

今までテキストファイルの処理はPerlでやっていたのですが、今後を見据えちょっとRubyを触ってみることにしました。

ちなみにPerlもたいしてできるわけではありません。

参考サイト

harry-the-cat.doorblog.jp

qiita.com

やりたいこと

  • テキストファイルの読み込み
  • 1行飛ばしでの読み込み
  • 半角スペースでの文字列の分割
  • 必要な部分のみを取り出して新たなテキストファイルへ書き込み

ファイルの読み込み

RubyにはどうやらFileクラスというのがあってそれを使うと便利らしい。

#text.txtを読み込んでfileとして格納
File.open('text.txt') do |file|
  #fileを標準出力として出力
  puts file
end

今回は全行を1度に読み込むより1行毎に読み込んで使用したいのでforeachメソッドを使用します。

#text.txtを1行ごとに読み込んでそれぞれをlineとして格納
File.foreach('text.txt') do |line|
  #lineを標準出力として出力
  puts line
end

1行飛ばしでの読み込み

私が今回扱いたかったファイルは2行が一つのデータ構造となっており必要なのは1行目の方のデータのみでしたのでそちらのデータのみを取り出して2行目は捨てる必要がありました。そしてデータ構造の頭には>がついていましたのでRuby側で行頭に>があれば処理を行い、なかったら何もしないという処理を行いたいと思います。

こういう時にはsliceメソッドを使用するのがよいみたいだ。

ref.xaio.jp

#text.txtを1行ごとに読み込んでそれぞれをlineとして格納
File.foreach('text.txt') do |line|
  #lineの行頭が>だったらlineを標準出力
  if line.slice(0) == '>' then
    puts line
  end
end

半角スペースでの分割

Perlでもおなじみのsplitメソッドですね。 Rubyでは引数を設定しないと自動で半角スペースでの分割になるみたいです。(Perlではどうだったか忘れた) ref.xaio.jp

#text.txtを1行ごとに読み込んでそれぞれをlineとして格納
File.foreach('text.txt') do |line|
  #lineの行頭が>だったらlineを標準出力
  if line.slice(0) == '>' then
    #半角スペースで分割した文字列をそれぞれ配列として格納
    array = line.split
    #文字列の1つめを標準出力
    puts array[0]
  end
end

新たなファイルへ出力

ここでもFileクラスを利用して書き込むのが良いみたいですが、いちいちアクセスしていては面倒なのでsplitして必要な部分を切り出したらそれを一つの文字列としてまとめる作業を行っておきます。

#text.txtを1行ごとに読み込んでそれぞれをlineとして格納
File.foreach('text.txt') do |line|
  #lineの行頭が>だったらlineを標準出力
  if line.slice(0) == '>' then
    #半角スペースで分割した文字列をそれぞれ配列として格納
    array = line.split
    #必要な部分を切り出してoutputに代入
    output << array[0] << ' ' << array[1] << "\n"
  end
end
File.open('output.txt','w') do |out|
  out.puts output
end

やりました。

最後に

とりあえずこんな感じで書いてみましたが割と間違っているし、もっと効率よくかける部分がたくさんある気がしますのでプロい方は教えていただけると私が喜びます。