2010-06-14 4 views
2

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

У меня есть 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 полей. Для ясности я ввел новую строку здесь. Но весь текст выше в одной строке.

Любые идеи о том, как их решить?

Спасибо.

+0

Сколько полей в общей сложности - гарантировано ли это 26? – Amarghosh

+0

Нет, это не поможет в notepad ++, поскольку такие кванторы, как '*', '+', '{24}', похоже, там не работают. – Amarghosh

+0

Да 26 fileds будет там – JPro

ответ

2

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

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

0

Я не уверен, правильно ли я вас понимаю. Вы хотите удалить поле № 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); печать «\ п»}»your_file

Как Dave M mentioned вы можете получить инструменты, такие как вырезать (и AWK) для ОС Windows от here (именно этот пакет содержит поглазеть, который должен работать, а с той же командой)

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

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

сократить: http://gnuwin32.sourceforge.net/packages/coreutils.htm

+0

Это прерывается, когда в любом из полей есть запятые (например, поле 24 содержит запятые). –

+0

Ну, насколько я понимаю вопрос, запятые АКТИВНО ИСПОЛЬЗУЮТСЯ для разделения полей, только поле № 24 имеет их в своем содержании, что является сущностью проблемы. – zifot

+0

это моя главная проблема. – JPro

0

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

Смежные вопросы