テキストファイルを開き、行がアルファベット以外の文字で始まる場合、または行自体が空白 (\n) でない限り、行末から \n を削除する非常に単純な ruby スクリプトを作成しようとしています。
以下のコードは、最後の \n 行を超えるすべてのコンテンツをスキップすることを除いて、正常に動作します。ファイルの最後に \n\n を追加すると、完全に機能します。例: このテキストを含むファイルはうまく機能し、すべてを 1 行にまとめます。
Hello
there my
friend how are you?
になるHello there my friend how are you?
しかし、次のようなテキスト:
Hello
there
my friend
how
are you today
Hello
と だけを返しThere
、最後の 3 行を完全にスキップします。最後に 2 つの空白行を追加すると、すべてが取得され、希望どおりに動作します。
なぜこれが起こるのか、誰かが私に説明できますか? 明らかに、最初にソース ファイルの末尾に追加することでこのインスタンスを修正できることはわかってい\n\n
ますが、期待どおりに動作しない理由を理解するのに役立ちません.gets
。
助けてくれてありがとう!
source_file_name = "somefile.txt"
destination_file_name = "some_other_file.txt"
source_file = File.new(source_file_name, "r")
para = []
x = ""
while (line = source_file.gets)
if line != "\n"
if line[0].match(/[A-z]/) #If the first character is a letter
x += line.chomp + " "
else
x += "\n" + line.chomp + " "
end
else
para[para.length] = x
x = ""
end
end
source_file.close
fixed_file = File.open(destination_file_name, "w")
para.each do |paragraph|
fixed_file << "#{paragraph}\n\n"
end
fixed_file.close