2010-07-29 2 views
0

У меня есть CSV в этом формате нижеRegEx - Файл Java Split Command Синтаксический Csv

11000,Christopher,Nolan,MR.,Inception,25993,France,"Lefoullon,Paris",920,Director,*461-7755,33-461-7755,12175,"O'Horner, James",12300,"Glebova, Nathalie",,[email protected],Capital,NEW 

Regarding Java Split Command Parsing Csv File

В этой связи @Mark Байерс и @R. Bemrose предложил String[] tokens = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)", -1); Но если вы внимательно заметили в приведенном выше CSV, вы обнаружите, что имя с "O'Horner, James" вызывает проблемы и бросает ошибку ORA-0917: missing comma. Есть ли способ избежать этого, или reg-ex должен быть исправлен?

Любопытное спутать: -o

ответ

2

Предостережение: все из перечисленного досужие домыслы и догадки, как вы не предоставили какой-либо код для проверки, и мой Палантир в мастерской для профилактического обслуживания.

Поезд мысли: У вас нет проблемы с более ранним "Lefoullon,Paris", но возникает проблема с "O'Horner, James" ... это говорит о том, что апостроф, вероятно, является (невинной) причиной проблемы.

Гипотеза: поле успешно извлекается из CSV как O'Horner, James ... обратите внимание, что апостроф НЕ является особенным для CSV (и не встречается в этом великолепном [см. Примечание] регулярное выражение).

Однако апостроф имеет большое значение для SQL; апострофы цитируют строковые литералы в SQL, а апострофы в данных должны быть удвоены.

Как это: INSERT INTO ..... VALUES(...,'O''Horner, James', ...);

Если вы используете подстановку параметров в интерфейсе SQL (как должно быть), преобразование полех данных в действительные константы SQL будет сделан для вас. В противном случае

  • написать код, чтобы исправить каждое поле строки (заменить каждое вхождение ' по '' затем обернуть результат в ' спереди и сзади)

  • Google («SQL инъекции»), читать, каяться, и переписать код с помощью подстановки параметров


Примечание: "великолепный", как в «C'est Magnifique, Маис се n'est па la guerre ". Используйте синтаксический анализатор CSV для здравого смысла.

+0

Amazing !!!! Спасибо, Джон – Sandeep

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