0

多くの PGN チェス ファイルを含むディレクトリがあり、そこから移動時間を削除したいと考えていました (次のように記述されてい[%emt {a_number}]ます。このスクリプトを書きました:

regex = /\[.emt[^\]]+\]/
directory = "path/to/files"
extension = ".pgn"

Dir.chdir(directory)
Dir.foreach(directory) do |file_name|
    file_object = File.open(file_name, "r+")
    contents = file_object.read
    new_contents = contents.gsub(regex, "")
    File.truncate(directory + "/" + file_name, 0)
    file_object.puts(new_contents)
    file_object.close
end

これによりすべての移動時間が削除されましたが、不思議なことに、ファイルの先頭に多数のヌル文字が追加されました (この数はファイル内のバイト数に等しいと思われます)。そのため、行new_contents = contents.gsub(regex, "")をに置き換えましたcontents.delete("\0")が、ファイルの先頭にさらにヌル文字が追加され、さらに悪化しました。どうすれば削除できますか?

4

2 に答える 2

1

次のように置き換えれば、問題なく動作するはずです。

File.truncate(directory + "/" + file_name, 0)

と:

file_object.rewind

また

file_object.seek(0)

File.truncate(ここのように) 開いているファイルに適用してはfile_object.truncateならず、file_object.close.

削除したいnullを含むファイルがすでにある場合は、ファイルを文字列に読み取り、ファイルをstr閉じて、実行します

str.delete!("\000")

そして、strファイルに書き戻します。

于 2014-08-01T06:44:09.580 に答える