|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
Народ! Помогите решить проблемку. Есть .csv файл с разделителем полей ; и признаком окончания строки \n. казалось бы все просто, но символьные значения в этом файле взяты в кавычки, да еще в таких символьных полях в середине может присутствовать ;. К примеру, тело файла: --------------------------------- 1;2;3;"a";;3;"a+s; lp";1 7;5;2;"и";;7;"ееее; 1";1 --------------------------------- Есть какие-то идеи как пропарсить файл чтобы ; в символьном поле не воспринималась как разделитель? в BULK Insert не нашел подходящей опции( ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2012, 01:38 |
|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
как вариант, создать файл форматирования в котором для символьных значений сделать филдтерминатор ";"" ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2012, 08:17 |
|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
Slevin_PM, Попробуйте SSIS пакет использовать, там во Flat file connection manager есть опция Text qualifier. Мне в свое время помогло. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2012, 12:02 |
|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
Slevin_PM...в BULK Insert не нашел подходящей опции( Я тоже :). Была у меня весьма похожая задача, решил ее как советует HandKot. В Вашем примере, 1;2;3;"a";;3;"a+s; lp";1 - создать файл форматирования, разделитель между 1 и 2, 2 и 3 полем указать ;, между 3 и 4-тым ;", между 4 и 5-тым ";, дальше - ;, снова;", снова "; И будет Вам счастье :). IMHO, проще, чем заводиться с SSIS. Хотя, если потом запускать это в джобе, возможны ньюансы. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2012, 12:55 |
|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
ShlippenbaranusSlevin_PM...в BULK Insert не нашел подходящей опции( Я тоже :). Была у меня весьма похожая задача, решил ее как советует HandKot. В Вашем примере, 1;2;3;"a";;3;"a+s; lp";1 - создать файл форматирования, разделитель между 1 и 2, 2 и 3 полем указать ;, между 3 и 4-тым ;", между 4 и 5-тым ";, дальше - ;, снова;", снова "; И будет Вам счастье :). IMHO, проще, чем заводиться с SSIS. Хотя, если потом запускать это в джобе, возможны ньюансы. Спасибо, вроде получилось! Завтра проверю на реальных данных. Как раз над этим и парюсь чтобы избавиться от SSIS. А какие нюансы могут возникнуть с джобом(я и планирую его использовать)? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2012, 22:47 |
|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
авторА какие нюансы могут возникнуть с джобом нюансы связанные не с джобом, а с методом реализации т.е если в Ваших реальных данных в символьном поле не будет кавычек (к прмеру в поле значение NULL ), то, скорее всего, будет ошибка ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2012, 08:28 |
|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
Блин, с txt файлом все ок. А вот в реале данные хранятся в .csv Unicode. И данный файл форматирования уже не подходит. Пытаюсь создать другие файлы форматирования, но никак не подберу нужные параметры. Может кто-то подскажет как правильно сздать такой файл для .csv в Unicode? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2012, 13:59 |
|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
HandKotSlevin_PMА какие нюансы могут возникнуть с джобом нюансы связанные не с джобом, а с методом реализации т.е если в Ваших реальных данных в символьном поле не будет кавычек (к прмеру в поле значение NULL ), то, скорее всего, будет ошибка Это да, но данная трудность обходится. Куда большими кажутся именно трудности с джобом - в том случае если файл, который планируется периодически парсить, лежит не на локальной машине. Поскольку SQL Server Agent обычно запускается из-под специальной учетной записи (Local System или Network Service), у которой наверняка не будет прав на доступ к файлу на удаленном компьютере. Для того, чтобы обойти проблему с правами, мне, в свое время, приходилось-таки создавать SSIS пакет, выполняющий мой sql, создавать credentials и proxy, и запускать из джоба именно пакет, проставляя в run as нужный proxy. Так что выигрыш по сравнению с тем, чтобы сразу использовать SSIS пакет был довольно сомнительным. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2012, 16:01 |
|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
Slevin_PM Может кто-то подскажет как правильно сздать такой файл для .csv в Unicode? попробуйте использовать утилиту BCP , она и файл формата создасти данные для проверки в таблицу запихнет ЗЫЖ я в своё время так и делал ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2012, 16:08 |
|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
Slevin_PMБлин, с txt файлом все ок. А вот в реале данные хранятся в .csv Unicode. И данный файл форматирования уже не подходит. Пытаюсь создать другие файлы форматирования, но никак не подберу нужные параметры. Может кто-то подскажет как правильно сздать такой файл для .csv в Unicode? Ага, вы еще учтите, что bulk insert не умеет толком обрабатывать ошибки, и если, скажем, в одной строке нарушен формат - нет достаточного кол-ва полей и т.п., - то из результатов выпадают сразу две строки: ошибочная и следующая за ней правильная. Как спасаться - ну, скажем, читать всю строку, как одно большое поле, и парсить ее средствами T-sql. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2012, 16:15 |
|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
Спасибо всем, проблему решил.) Просто для кодировки UNICODE утилита bcp создает своеобразный разделитель. В конце каждого символа пришлось ставить "\0". В исходном файле было единственно проблемное поле для которого пришлось делать правильный разделитель. Остальное решил обработать уже в sql. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2012, 23:12 |
|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
Добрый день. Возникла схожая проблема. Есть csv-файл, в котором разделитель ';'. Если разделитель встречается в поле, то значение обрамляется двойными кавычками Т.е. , надо пропарсить такие данные: a ;b ;c d ;"e;f" ;g Так как в одном столбце как могут быть кавыки, так и нет, то файл форматирования не подходит. Есть какой-нибудь способ это дело обойти? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2014, 12:17 |
|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
JOPuKЕсть какой-нибудь способ это дело обойти? Написать свой парсер ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2014, 12:19 |
|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
Glory, Жаль, надеялся обойтись стандартными средствами... Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2014, 12:22 |
|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
JOPuKЖаль, надеялся обойтись стандартными средствами... Стандартные средства парсинга файла, в котором формат каждой следующей строки может отличаться от предыдущей ? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2014, 12:24 |
|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
Glory, Ну, мы перекладываем базу с оракула на мелкомягкий. а в оракле при парсинге есть так называемый символ обрамления, позволяющий читать значения от символа до символа. Надеялся,что и у нас такое есть ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2014, 12:29 |
|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
Ну а как интерпретировать тогда кавычки, как часть строки? Или все должно быть с кавычках или ничего. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2014, 12:30 |
|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
JOPuKа в оракле при парсинге Парсинг в оракл - это команда PL/SQL такая то ли ? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2014, 12:32 |
|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
Владислав Колосов, Я тоже так думал. Оказывается, оракл выпендривается, и проверяют возможность наличия этих символов обрамления. То есть, если они есть, то от символа до символа, иначе от терминатора до терминатора. По-крайней мере, так это работает на начальной базе, я оракл до этого не тыкал, слабо его представляю ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2014, 12:38 |
|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
Попробуйте мастер импорта, вроде бы всё ОК. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2014, 13:09 |
|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
Доброго вечера, коллеги. Возникла схожая проблема. Есть универсальный перекладчик, который в автоматическом режиме закидывает содержимое файла из какой-нибудь директории в таблицу бд TblName с полем FileText varchar(max). В моем случае требуется обработка загруженного подобным образом файла .csv с 90 полями, которые разделены разделителем в виде точки с запятой и обрамлены одинарной кавычкой с обеих сторон. В конце каждой строки указан символ перехода на новую строку. В первой строке указываются названия полей. Из этих 90 полей нужны всего лишь 20. Требуется с помощью sql-скрипта распарсить поле таблицы TblName.FileText, в котором хранится все содержимое файла и вставить нужные данные в отдельную таблицу, наименования нужных 20ти полей известны, но в самом файле они расположены хаотично, не друг за другом. Чувствую, придется измудряться. Главное, чтобы парсинг работал быстро. Может кто сталкивался с чем-то подобным и есть наброски проверенного временем кода? На худой конец буду рад идеям, как проще и эффективнее организовать парсинг. Варианты загрузки через BCP отпадают, т.к. требуется вклиниваться в текущий универсальный функционал по импорту файлов в бд, сам тому не рад. Заранее благодарю за ответы Версия sql 2008, но т.к скоро переход на 2016 версию рассмотрю варианты и под него ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2021, 18:19 |
|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
court, огромное спасибо, долго искал поиском по сайту, а слона то не заметил ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2021, 18:47 |
|
парсинг .csv файла.
|
|||
---|---|---|---|
#18+
шК0ДЕР, если нужно действительно быстро, то это CLR. SQL с курсором, XML и динамикой не может быть быстрым по определению (но может при этом укладываться в требования) . ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2021, 21:24 |
|
|
start [/forum/topic.php?fid=46&fpage=32&tid=1684998]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 314ms |
total: | 450ms |
0 / 0 |