Ruby и запись в CSV -как избежать пустой строки в конце?

Я создаю файл CSV из Ruby, и система, которая получает данные, не может принять пустая строка внизу.

Однако, после того, как я добавил все свои строки (, которые заканчиваются на CRLF ), последняя строка все еще содержит CFLF, поэтому принимающая система считает, что это пустая строка lasy.

Я решил эту проблему, выполнив этот (хакерский )код для открытия и обрезания файла:

  size = File.size(filename)
  File.truncate(filename, size-3)

Я упустил какую-то функцию в ruby ​​CSV, чтобы не добавлять CRLF, если это последняя строка?

Мой код для записи CSV::

  csv = CSV.open(filename, "w", {:row_sep => "\r\n"})
 .. code to create an array of cols..
  csv << cols

Я попытался преобразовать его, чтобы использовать строку, а не файл. Но у меня не получилось это сделать. Я продолжал получать сообщение об ошибке, используя оператор <<.

ОБНОВЛЕНИЕ :Оказывается, я задал не тот вопрос...

Прошло некоторое время, но я, наконец, понял, что происходит. Хост-система, которую я загружал, тоже может обрабатывать новую строку в конце файла -, это было из-за того, что Ruby CSV вставлял неправильные символы новой строки :\r\r\n вместо \r\n! Он делает это, если я пишу в виде текстового файла. Если я пишу как двоичный файл, проблема решена.

Если кто-то еще увидит ту же проблему, это был мой Ruby:

csv = CSV.open(filename, "w", {:row_sep => "\r\n"}) # actually writes \r\r\n 

Двоичный режим исправляет:

csv = CSV.open(filename, "wb", {:row_sep => "\r\n"}) # correctly writes \r\n
5
задан peterept 24 June 2012 в 13:13
поделиться