ファイルの読み書き @ Ruby - Linux Life

はじめに

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.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

スポンサードリンク

Copyright © 2025 Linux-Life.net