RegEx - Java Split Команда Разбор CSV-файла - PullRequest
0 голосов
/ 29 июля 2010

У меня есть CSV в этом формате ниже

11000,Christopher,Nolan,MR.,Inception,25993,France,"Lefoullon,Paris",920,Director,*461-7755,33-461-7755,12175,"O'Horner, James",12300,"Glebova, Nathalie",,Christophe.Nolan@movies.com,Capital,NEW

Относительно анализа команды Java Split Csv-файла

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

Вроде растерялся: -o

1 Ответ

2 голосов
/ 29 июля 2010

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

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

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

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

Примерно так: INSERT INTO ..... VALUES(...,'O''Horner, James', ...);

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

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

  • google («SQL-инъекция»), прочитайте, покайтесь и переписайте свой код, используя подстановку параметров


Примечание: «великолепно», как в «C»Est Magnifique, Mais Ce N'est Pas La Guerre ".Ради здравомыслия используйте парсер CSV.

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