3

いくつかの数値を含むテキスト ファイルがあり、特定の数値を検索してその行を削除したいと考えています。これがファイルの内容です

    83087
    308877
    214965
    262896
    527530

したがって、262896 を削除する場合は、ファイルを開き、文字列を検索してその行を削除します。

4

1 に答える 1

5

保持したい行を書き込むには、一時ファイルを開く必要があります。このような行に沿った何かがそれを行う必要があります:

require 'fileutils'
require 'tempfile'

# Open temporary file
tmp = Tempfile.new("extract")

# Write good lines to temporary file
open('sourcefile.txt', 'r').each { |l| tmp << l unless l.chomp == '262896' }

# Close tmp, or troubles ahead
tmp.close

# Move temp file to origin
FileUtils.mv(tmp.path, 'sourcefile.txt')

これは次のように実行されます。

$ cat sourcefile.txt
83087
308877
214965
262896
527530
$ ruby ./extract.rb 
$ cat sourcefile.txt
83087
308877
214965
527530
$

一時ファイルなしで、メモリ内のみで実行することもできます。ただし、ファイル サイズによっては、メモリ フットプリントが非常に大きくなる場合があります。上記のソリューションは、一度に 1 行ずつメモリにロードするだけなので、大きなファイルでも問題なく動作するはずです。

- それが役に立てば幸い -

于 2012-06-04T10:10:56.530 に答える