Регулярное выражение, заменить "22,09" на "22.09" - PullRequest
1 голос
/ 28 ноября 2010

Я импортирую набор данных в формате CSV в базу данных.

Структура CSV-файлов выглядит следующим образом

Номер детали, описание, цена нетто, цена брутто, комментарий
11009, шарикоподшипник, «22,09», «38,05», «Обратите внимание, эта статья такая же, как koyo xxxxxx»

Поскольку я еще не знаком с регулярными выражениями, кто-нибудь может помочь?

Или, может быть, сценарий написания Perl для меня.

Спасибо

Ответы [ 4 ]

3 голосов
/ 28 ноября 2010

В этом нет необходимости;это можно сделать только в MySQL.

LOAD DATA INFILE 'data.csv'
INTO TABLE prices
FIELDS
  TERMINATED BY ','
  ENCLOSED BY '"'
(partno, desc, @net, @gross, comment)
SET
  net=REPLACE(@net, ',', '.'),
  gross=REPLACE(@gross, ',', '.'),
3 голосов
/ 28 ноября 2010

Если вы можете обрабатывать с помощью Vim ( вот краткий старт ) для редактирования ваших CSV-файлов, эта команда в Vim даст вам желаемое поведение, если предположить, что входные данные сформированы как таковые ("xx,yy" до "xx.yy"):

:%s/"\(\d\+\),\(\d\+\)"/"\1.\2"/g

Затем вы можете нажать :wq, чтобы сохранить файл и выйти из программы.Это регулярное выражение (/"(\d+),(\d+)"/) также должно служить отправной точкой в ​​других программах (или языках), которые принимают регулярные выражения.

0 голосов
/ 28 ноября 2010

Вот как вы это сделаете на языке программирования Ruby.Не уверен, поможет ли это:

row = 'abc, "22,09", t'
row.gsub(/([0-9]+),([0-9]+)/, '\1.\2')
puts row       # result is: abc, "22.09", t

При вызове gsub выполняется поиск любой серии цифр, за которой следует запятая, за которой следует любая последовательность цифр, и замена запятой на точку.

0 голосов
/ 28 ноября 2010

Итак, вы хотите заменить запятые только тогда, когда числа с плавающей запятой находятся в строке, разделенной двойными кавычками.Это регулярное выражение, которое вы хотите:

/(?<=")(\d+),(\d+)(?=")/

Который будет соответствовать только {22;09} и {38;05}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...