powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / парсинг .csv файла.
25 сообщений из 25, страница 1 из 1
парсинг .csv файла.
    #37641102
Slevin_PM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ! Помогите решить проблемку.
Есть .csv файл с разделителем полей ; и признаком окончания строки \n.
казалось бы все просто, но символьные значения в этом файле взяты в кавычки, да еще в таких символьных полях в середине может присутствовать ;.
К примеру, тело файла:
---------------------------------
1;2;3;"a";;3;"a+s; lp";1
7;5;2;"и";;7;"ееее; 1";1
---------------------------------
Есть какие-то идеи как пропарсить файл чтобы ; в символьном поле не воспринималась как разделитель?
в BULK Insert не нашел подходящей опции(
...
Рейтинг: 0 / 0
парсинг .csv файла.
    #37641203
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как вариант, создать файл форматирования
в котором для символьных значений сделать филдтерминатор ";""
...
Рейтинг: 0 / 0
парсинг .csv файла.
    #37641545
SergePnb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slevin_PM,

Попробуйте SSIS пакет использовать, там во Flat file connection manager есть опция Text qualifier. Мне в свое время помогло.
...
Рейтинг: 0 / 0
парсинг .csv файла.
    #37641673
Shlippenbaranus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slevin_PM...в BULK Insert не нашел подходящей опции(

Я тоже :). Была у меня весьма похожая задача, решил ее как советует HandKot.

В Вашем примере, 1;2;3;"a";;3;"a+s; lp";1 - создать файл форматирования, разделитель между 1 и 2, 2 и 3 полем указать ;, между 3 и 4-тым ;", между 4 и 5-тым ";, дальше - ;, снова;", снова ";
И будет Вам счастье :). IMHO, проще, чем заводиться с SSIS. Хотя, если потом запускать это в джобе, возможны ньюансы.
...
Рейтинг: 0 / 0
парсинг .csv файла.
    #37642931
Slevin_PM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
А какие нюансы могут возникнуть с джобом(я и планирую его использовать)?
...
Рейтинг: 0 / 0
парсинг .csv файла.
    #37643218
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА какие нюансы могут возникнуть с джобом
нюансы связанные не с джобом, а с методом реализации
т.е если в Ваших реальных данных в символьном поле не будет кавычек (к прмеру в поле значение NULL ), то, скорее всего, будет ошибка
...
Рейтинг: 0 / 0
парсинг .csv файла.
    #37643843
Slevin_PM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, с txt файлом все ок.
А вот в реале данные хранятся в .csv Unicode.
И данный файл форматирования уже не подходит.
Пытаюсь создать другие файлы форматирования, но никак не подберу нужные параметры.
Может кто-то подскажет как правильно сздать такой файл для .csv в Unicode?
...
Рейтинг: 0 / 0
парсинг .csv файла.
    #37644188
Shlippenbaranus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKotSlevin_PMА какие нюансы могут возникнуть с джобом
нюансы связанные не с джобом, а с методом реализации
т.е если в Ваших реальных данных в символьном поле не будет кавычек (к прмеру в поле значение NULL ), то, скорее всего, будет ошибка
Это да, но данная трудность обходится. Куда большими кажутся именно трудности с джобом - в том случае если файл, который планируется периодически парсить, лежит не на локальной машине. Поскольку SQL Server Agent обычно запускается из-под специальной учетной записи (Local System или Network Service), у которой наверняка не будет прав на доступ к файлу на удаленном компьютере.

Для того, чтобы обойти проблему с правами, мне, в свое время, приходилось-таки создавать SSIS пакет, выполняющий мой sql, создавать credentials и proxy, и запускать из джоба именно пакет, проставляя в run as нужный proxy. Так что выигрыш по сравнению с тем, чтобы сразу использовать SSIS пакет был довольно сомнительным.
...
Рейтинг: 0 / 0
парсинг .csv файла.
    #37644210
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slevin_PM Может кто-то подскажет как правильно сздать такой файл для .csv в Unicode?
попробуйте использовать утилиту BCP , она и файл формата создасти данные для проверки в таблицу запихнет


ЗЫЖ я в своё время так и делал
...
Рейтинг: 0 / 0
парсинг .csv файла.
    #37644229
Shlippenbaranus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slevin_PMБлин, с txt файлом все ок.
А вот в реале данные хранятся в .csv Unicode.
И данный файл форматирования уже не подходит.
Пытаюсь создать другие файлы форматирования, но никак не подберу нужные параметры.
Может кто-то подскажет как правильно сздать такой файл для .csv в Unicode?

Ага, вы еще учтите, что bulk insert не умеет толком обрабатывать ошибки, и если, скажем, в одной строке нарушен формат - нет достаточного кол-ва полей и т.п., - то из результатов выпадают сразу две строки: ошибочная и следующая за ней правильная.

Как спасаться - ну, скажем, читать всю строку, как одно большое поле, и парсить ее средствами T-sql.
...
Рейтинг: 0 / 0
парсинг .csv файла.
    #37644917
Slevin_PM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем, проблему решил.)
Просто для кодировки UNICODE утилита bcp создает своеобразный разделитель.
В конце каждого символа пришлось ставить "\0".
В исходном файле было единственно проблемное поле для которого пришлось делать правильный разделитель. Остальное решил обработать уже в sql.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
парсинг .csv файла.
    #38776053
JOPuK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Возникла схожая проблема.
Есть csv-файл, в котором разделитель ';'. Если разделитель встречается в поле, то значение обрамляется двойными кавычками
Т.е. , надо пропарсить такие данные:

a ;b ;c
d ;"e;f" ;g

Так как в одном столбце как могут быть кавыки, так и нет, то файл форматирования не подходит.
Есть какой-нибудь способ это дело обойти?
...
Рейтинг: 0 / 0
парсинг .csv файла.
    #38776060
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JOPuKЕсть какой-нибудь способ это дело обойти?
Написать свой парсер
...
Рейтинг: 0 / 0
парсинг .csv файла.
    #38776066
JOPuK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory,
Жаль, надеялся обойтись стандартными средствами...
Спасибо!
...
Рейтинг: 0 / 0
парсинг .csv файла.
    #38776072
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JOPuKЖаль, надеялся обойтись стандартными средствами...
Стандартные средства парсинга файла, в котором формат каждой следующей строки может отличаться от предыдущей ?
...
Рейтинг: 0 / 0
парсинг .csv файла.
    #38776080
JOPuK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Glory,
Ну, мы перекладываем базу с оракула на мелкомягкий. а в оракле при парсинге есть так называемый символ обрамления, позволяющий читать значения от символа до символа. Надеялся,что и у нас такое есть
...
Рейтинг: 0 / 0
парсинг .csv файла.
    #38776084
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а как интерпретировать тогда кавычки, как часть строки? Или все должно быть с кавычках или ничего.
...
Рейтинг: 0 / 0
парсинг .csv файла.
    #38776088
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JOPuKа в оракле при парсинге
Парсинг в оракл - это команда PL/SQL такая то ли ?
...
Рейтинг: 0 / 0
парсинг .csv файла.
    #38776099
JOPuK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,
Я тоже так думал. Оказывается, оракл выпендривается, и проверяют возможность наличия этих символов обрамления. То есть, если они есть, то от символа до символа, иначе от терминатора до терминатора. По-крайней мере, так это работает на начальной базе, я оракл до этого не тыкал, слабо его представляю
...
Рейтинг: 0 / 0
парсинг .csv файла.
    #38776158
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте мастер импорта, вроде бы всё ОК.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
парсинг .csv файла.
    #40051153
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго вечера, коллеги. Возникла схожая проблема.
Есть универсальный перекладчик, который в автоматическом режиме закидывает содержимое файла из какой-нибудь директории в таблицу бд TblName с полем FileText varchar(max).
В моем случае требуется обработка загруженного подобным образом файла .csv с 90 полями, которые разделены разделителем в виде точки с запятой и обрамлены одинарной кавычкой с обеих сторон. В конце каждой строки указан символ перехода на новую строку. В первой строке указываются названия полей.
Из этих 90 полей нужны всего лишь 20.
Требуется с помощью sql-скрипта распарсить поле таблицы TblName.FileText, в котором хранится все содержимое файла и вставить нужные данные в отдельную таблицу, наименования нужных 20ти полей известны, но в самом файле они расположены хаотично, не друг за другом.
Чувствую, придется измудряться.
Главное, чтобы парсинг работал быстро. Может кто сталкивался с чем-то подобным и есть наброски проверенного временем кода? На худой конец буду рад идеям, как проще и эффективнее организовать парсинг.
Варианты загрузки через BCP отпадают, т.к. требуется вклиниваться в текущий универсальный функционал по импорту файлов в бд, сам тому не рад.
Заранее благодарю за ответы
Версия sql 2008, но т.к скоро переход на 2016 версию рассмотрю варианты и под него
...
Рейтинг: 0 / 0
парсинг .csv файла.
    #40051158
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
шК0ДЕР,

посмотри эту тему Парсинг csv в T-SQL.
в частности - 21749669
...
Рейтинг: 0 / 0
парсинг .csv файла.
    #40051161
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court,

огромное спасибо, долго искал поиском по сайту, а слона то не заметил
...
Рейтинг: 0 / 0
парсинг .csv файла.
    #40051214
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
шК0ДЕР,

если нужно действительно быстро, то это CLR. SQL с курсором, XML и динамикой не может быть быстрым по определению (но может при этом укладываться в требования) .
...
Рейтинг: 0 / 0
парсинг .csv файла.
    #40051225
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
шК0ДЕР,

"Требуется с помощью sql-скрипта распарсить " - это ради спортивных приключений? Давно уже придумали средства Intergation services для задач загрузки.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / парсинг .csv файла.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]