ファイルの読み書き

はじめに

CGIを作るときにファイルを読み書きについてです。
一行の内容はタブ区切りの値になっていると仮定します。

読み込む

ファイルを読み込み、一行ずつ処理するのは以下のようになります。

File.open( "ファイル名", "r" ) do |file|
file.each do |line|
a,b,c = line.chomp.split( /\t/ )
(処理)
end
end

書き込む

ハッシュの配列を書き込むのは以下のようにします。

File.open( "ファイル名", "w" ) do |file|
arr.each do |item|
file.puts( [ item['a'], item['b'], item['c'] ].join( "\t" ) )
end
end

追加で書き込むときはオープンのモードが"a"になります。

読み書き

File.open( "ファイル名", "r+" ) do |file|
file.each do |line|
a,b,c = line.chomp.split( /\t/ )
(処理)
end
file.rewind
file.truncate( 0 )
arr.each do |item|
file.puts( [ item['a'], item['b'], item['c'] ].join( "\t" ) )
end
end

ファイルロック

File#flockを参考に以下のようにします。

File.open( "ファイル名", "r" ) do |file|
file.flock( File::LOCK_SH ) #共有ロック
file.each do |line|
a,b,c = line.chomp.split( /\t/ )
(処理)
end
end
File.open( "ファイル名", "w" ) do |file|
file.flock( File::LOCK_EX ) #排他ロック
arr.each do |item|
file.puts( [ item['a'], item['b'], item['c'] ].join( "\t" ) )
end
end

スポンサード リンク

トラックバック

トラックバックURL
https://linux-life.net/tb/program/ruby/cgidoc/file/
Linux Life 〜 No linux, No life 〜
プログラミング > Ruby > CGI入門 > ファイルの読み書き

AltStyle によって変換されたページ (->オリジナル) /