Опитвам се да напиша много прост ruby скрипт, който отваря текстов файл, премахва \n от края на редовете, ОСВЕН АКО редът не започва с неазбучен знак ИЛИ самият ред е празен (\n).
Кодът по-долу работи добре, с изключение на това, че пропуска цялото съдържание след последния \n ред. Когато добавя \n\n в края на файла, той работи перфектно. Примери: Файл с този текст в него работи чудесно и изтегля всичко на един ред:
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