2013-03-18 1 views
0

Мне нужно прочитать в текстовом файле с 19000 элементами, переупорядочить их, а затем вернуть обратно в файл csv. Проблема в том, что некоторые из записей содержат запятую, и когда я возвращаюсь обратно в csv, он разбивается на запятую. Есть ли способ избежать запятой при выходе?Escaping запятые в файле csv Perl

+0

Как он может разбиться на запятую при выводе, если вы уже прочитали его из файла csv? Он должен был сломаться при чтении уже ... Во всяком случае, см. Ниже. – simbabque

+0

Также ... что вы подразумеваете под «перерывами в запятой»? CSV - это просто текст. Это действительно не сломается. Например, если вы откроете его в Excel позже, он может выглядеть сломанным. Может быть, CSV (с запятой как разделитель) - это не тот формат, который вам нужен? – simbabque

+0

Я не читал из файла csv, который я читал из текстового файла, и что я имею в виду, что он разбивает ячейку на 2 ячейки из-за запятой в тексте – shinjuo

ответ

10

Использование Text::CSV. Это будет иметь дело с побегом для вас. Он также будет читать данные, если это применимо. Лучший способ, по моему мнению, не в том, чтобы избежать ваших запятых, а использовать полевые приложения. Они выглядят так:

row 1,some data,"some long text, with a comma"\n 
row 2,some more data,"lots of ,,,,,"\n 

Вы, конечно, можете просто использовать что-то еще в качестве разделителя. A ; используется Европейским не-английским Excel, то есть в Германии.

Как другие разделители, так и полевые вложения обычно понимаются большинством других программ, включая Excel и Open Office Calc. Но вы должны, конечно же, проверить свой приемник, прежде чем изменять что-либо в своем выходе.