ファイルの読み書き
はじめに
CGIを作るときにファイルを読み書きについてです。
一行の内容はタブ区切りの値になっていると仮定します。
読み込む
ファイルを読み込み、一行ずつ処理するのは以下のようになります。
File.open( "ファイル名", "r" ) do |file|
file.each do |line|
a,b,c = line.chomp.split( /\t/ )
(処理)
end
end
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
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.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.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
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/