0

2つのファイルを使用せずに、ファイルの各行を編集する方法はありますか?たとえば、元のファイルには、

test01
test02
test03

次のように編集したい

test01,a
test02,a
test03,a

コードブロックに表示されているように何かを試しましたが、一部の文字が置き換えられています。

一時ファイルに書き込んでから元のファイルを置き換えることはできますが、ファイルを頻繁に編集する必要があるため、ファイル自体の中で編集することをお勧めします。

ありがとうございました!

File.open('mytest.csv', 'r+') do |file|
  file.each_line do |line|        
      file.seek(-line.length, IO::SEEK_CUR)
      file.puts 'a'        
  end
end
4

2 に答える 2

1
f = open 'mytest.csv', 'r+'
r = f.readlines.map { |e| e.strip << ',a' }
f.rewind
f.puts r
f.close # you can leave out this line if it's the last one that runs

これはワンライナーのバリエーションです。この場合、プログラムが終了するまで 2 つの記述子が開いたままになることに注意してください。

open(F='mytest.csv','r+').puts open(F,'r').readlines.map{|e|e.strip<<',a'}
于 2012-10-02T04:42:23.247 に答える
0

ファイルへの書き込みは挿入されません。常に上書きされます。これは、何か新しいものを追加するたびにファイルの残りの内容全体を書き直さなければならないため、テキストをその場で変更するのが面倒です。

ファイルがメモリに収まるほど小さい場合は、ファイルを読み込んで変更し、書き戻すことができます。それ以外の場合は、一時ファイルを使用したほうがよいでしょう。

于 2012-10-02T04:45:00.243 に答える