Ruby — добавление данных в новую строку без ввода пустой строки

#ruby

#рубиновый

Вопрос:

У меня уже есть одна строка, fd.txt и когда я вставляю три несколько строк, первая строка добавляется сразу после существующих данных. Вот один из примеров:

fd.txt

 This is past data.
 

Новые данные

 Line 1
Line 2
Line 3
 

Когда я запускаю следующий код:

 open('fd.txt', 'a ') { |file|
  file.puts "Line 1"
  file.puts "Line 2"
  file.puts "Line 3"
}
 

Я получаю следующий вывод:

 This is past data.Line 1
Line 2
Line 3
 

Но мне нужно Line 1 из второй строки. Поэтому я добавляю "n" , file.puts "nLine 1" но это добавляет дополнительную пустую строку прямо перед Line 1 этим . Какое обновление я должен внести в свой код, чтобы получить следующий результат:

 This is past data.
Line 1
Line 2
Line 3
 

Комментарии:

1. но это добавляет дополнительную пустую строку прямо перед строкой 1 — Нет, это не так. На мой взгляд, мое предположение о том, что здесь произошло, заключается в том, что вы повторно сохранили fd.txt , и ваш текстовый редактор настроен на добавление новой строки в конец файла, если таковой отсутствует. Это часто считается стандартной практикой.

Ответ №1:

Не очень элегантно, но вы могли бы проверить, является ли последний символ символом a n , и добавить его в противном случае: (я предполагаю, что вы не знаете, заканчивается ли файл новой строкой)

 open('fd.txt', 'a ') do |file|
  file.puts unless file.pread(1, file.size - 1) == "n"

  file.puts "Line 1"
  file.puts "Line 2"
  file.puts "Line 3"
end
 

Конечно, было бы лучше, чтобы в первую очередь не было пропущенной новой строки.

Комментарии:

1. Жаль IO#pread , что это не позволяет file.pread(1, -1) == "n" .

2. @CarySwoveland это было первое, что я попробовал!

Ответ №2:

Аналогично другому предложенному ответу, вы могли бы сделать:

 open('fd.txt', 'a ') do |file|
  file.seek(-1, IO::SEEK_END)
  file.puts unless file.read == "n"

  file.puts "Line 1"
  file.puts "Line 2"
  file.puts "Line 3"
end