Garden Place TOP 技術ガーデン プログラマよ、Rubyで輝け! ファイルのテキストを変換する - 1

数あるプログラム言語の中で、今最も勢いのある言語の一つRuby。

別の言語のプログラマ、プログラムに興味はあるけどやったことない人。
みんなで一緒にRubyを学びましょう。

公開日:2008.02.27

ファイルのテキストを変換する - 1

この記事はRubyやirbなどの環境構築が終わっていることを前提としています。 まだ環境構築ができていない方は以下の記事を参照して構築してください。

Rubyのインストール

今までのおさらい

さて、今まではRubyの文法などのルールを多く書いてきました。 しかし、まだまだ紹介していない機能や決まりごとがたくさんありますので、興味を持った方はインターネット上にたくさん情報がありますし、そちらをご覧ください。。

ここは僕の興味の赴くままにサンプルプログラムを紹介することを目的に始めたコーナーですので、今後はより多くのサンプルを紹介しながらRubyについての理解を深めていければと思います。

サンプルプログラムの作成

では早速サンプルを紹介しましょう。 もし分からないところがあっても、分かるところだけ理解して、残りの部分は「そんなものか」と眺めていただければいいと思います。

テーマは文字列・ファイル操作です。 今後ここにプログラムを掲載するのには便宜上、行番号をつけます。 しかし、もちろん実際のプログラムファイルには行番号はいれません。 動作確認のために僕が作成するプログラムにも入っていません。 ここに掲載するときだけに追加しなくてはならないのです。

それを手作業で行うようなバカバカしいことをプログラマはしません。 そんな単調作業をコンピュータにさせるためにプログラムがあるのです。 というわけで指定したファイルに行番号を加えて別のファイルに書き出すサンプルプログラムを作りました。

以下のようにテキストファイルに入力して「AddLineNumber.rb」というファイル名で適当な場所に保存しましょう。Rubyのファイルは一般的にrbという拡張子を使用します。半角や全角の違いなどに気をつけましょう。

ファイル名:AddLineNumber.rb

# 読み込みファイルを開く
readFile = File.open(ARGV[0])

# 書き込みファイルを開く
writeFile = File.open(ARGV[1], "w")

# 読み込みファイルの中の文字列を全て取得
readString = readFile.read

# 文字列を一行ずつ繰り返して処理
readString.each_with_index{ |line, index|

    # 書き込みファイルに行番号を出力
    writeFile.printf("%02d : ", index + 1)

    # 書き込みファイルに本来の文字列を出力
    writeFile.print(line)
}

# ファイルを閉じる
readFile.close
writeFile.close

# 成功と表示
print "成功"

サンプルプログラムの実行

作成できたら、そのファイルを適当な場所においてみてください。そしてRubyコンソール(スタートメニュー > Ruby1.8 > ruby console)でそのフォルダに移動します。僕の場合は「C:\RubyTest」という場所に置きました。

そして以下のように作成したファイルをRubyで実行します。実行時にはさらに2つのパラメータを送り、一つ目は変換元になるファイル、二つ目は変換後に新しく作成するファイル名を指定します。今回は変換元としてこのサンプルプログラムのファイルそのものを、変換後のファイル名として後ろに_newという文字を付け足したものを指定しましょう。

C:¥RubyTest>ruby AddLineNumber.rb AddLineNumber.rb AddLineNumber_new.rb
成功
C:¥RubyTest>

うまくいったでしょうか。 ちゃんと動作すれば上のように成功と表示され、プログラムが終了します。何らかの原因でうまく動作しなければずらずらとエラーメッセージが表示されます。

成功した場合、変換後のAddLineNumber_new.rbは以下になります。

ファイル名:AddLineNumber_new.rb

01 : # 読み込みファイルを開く
02 : readFile = File.open(ARGV[0])
03 : 
04 : # 書き込みファイルを開く
05 : writeFile = File.open(ARGV[1], "w")
06 : 
07 : # 読み込みファイルの中の文字列を全て取得
08 : readString = readFile.read
09 : 
10 : # 文字列を一行ずつ繰り返して処理
11 : readString.each_with_index{ |line, index|
12 :    
13 :    # 書き込みファイルに行番号を出力
14 :    writeFile.printf("%02d : ", index + 1)
15 :    
16 :    # 書き込みファイルに本来の文字列を出力
17 :    writeFile.print(line)
18 : }
19 : 
20 : # ファイルを閉じる
21 : readFile.close
22 : writeFile.close
23 : 
24 : # 成功と表示
25 : print "成功"

これで行番号で説明できますので解説もしやすくなりました。では実際の解説は次回行います。