Я создаю файл 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