исключая столбец в CSV-файле с регулярным выражением - PullRequest
2 голосов
/ 14 июня 2010

Есть ли способ исключить / удалить / заменить одно поле из CSV-файла с некоторым регулярным выражением в блокноте ++?

У меня есть CSV-файл с некоторыми данными, подобными этим:

'1','data1','data2','data3','data4','data5','data6','data7','data8','data9',
'data10','data11','data12','data13','data14','data15','data16','data17','data18',
'data19','data20','data21','data22','data23','\'data24 with some commas, 
here and there and some "double quotes", and fullstops.','data25','data26'

Единственная проблема, с которой я сталкиваюсь, это data24 ГДЕ я сталкиваюсь с \', а затем "" и некоторыми дикими символами, такими как , и .. Особенно это зафиксировано на 24 поле. Для ясности я ввел новую строку здесь. Но весь текст выше в одной строчке.

Есть идеи как решить?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 14 июня 2010

Ненадежно. Возможно, проще всего изменить файл с помощью некоторого инструмента, который знает, как обрабатывать CSV (OpenOffice).

Если вы все еще хотите использовать регулярное выражение, взгляните на отрицательный взгляд позади , чтобы соответствовать одной кавычке, только если ей не предшествует обратный слеш.

0 голосов
/ 14 июня 2010

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

0 голосов
/ 14 июня 2010

Я не уверен, правильно ли я вас понимаю. Вы хотите удалить поле № 24?

Получить только L полей слева и R полей справа (таким образом, исключить поля L + 1, ..., NF - R - 1, где NF - число полей) и не беспокоиться о странных символах в полях, находящихся между ними, вы можете использовать следующую команду awk:

awk 'BEGIN {FS = ","; L = 23; R = 2} {для (i = 1; i <= L + 1; i ++) printf ($ i); для (i = NF-R + 1; i <= NF; i ++) printf ($ i); напечатать '\ n'} 'your_file </p>

Как упоминал Дейв М , вы можете получить такие инструменты, как cut (и awk) для Windows, из здесь (этот конкретный пакет содержит gawk, который также должен работать с той же командой)

Редактировать: Да, ссылка для скачивания на sourceforge, похоже, не работает. Вы можете получить awk и вырезать отсюда:

awk : http://gnuwin32.sourceforge.net/packages/gawk.htm

вырезать : http://gnuwin32.sourceforge.net/packages/coreutils.htm

...