Имя: Пароль:
1C
 
Чтение файла CSV
0 Shalun
 
naïve
10.02.26
10:00
Парни, всем привет. Столкнулся с такой бедой:
Читаю файл CSV, с разделителем пробел, всего 4 колонки
ТД.ПолучитьСтроку(НомерСтроки)
Все строки читает нормально, но в некоторых строках значение 2й колонки берет в кавычки. Вроде проблема в файле, но никаких косяков не видно. Сохраняется в xls нормально и читается потом с него то же нормально. А вот с csv - беда какая то.
Может кто сталкивался с такой проблемой, подскажите что не так, где "копать" нужно?
1 Fedor-1971
 
10.02.26
10:04
(0) посмотри на проблемные строки через HEX редактор, может, в них есть непечатные символы
И, хорошо бы, показать кусок кода обработки строки
2 Shalun
 
naïve
10.02.26
10:16
(1) Спасибо! Да, HEX редактор показал кавычки, но почему их не видно в файле? Нечитаемые кавычки?:-)
И заметил такую вещь, что в кавычки он берет те строки (колонки), где имеется хоть одна кавычка. Это наверное уже вопрос к редактору а не 1с. но если подскажете как так получается - буду благодарен!
3 Fedor-1971
 
10.02.26
10:41
(2) Чисто предположение: последовательность 0A0D эквивалентна в винде Символы.ПС, а для линукс достаточно одного 0D.
Т.е. возможно, что файл подготовили в другой ОС или в другой кодовой системе, например, UTF-8 и кавычка экранируется предыдущим символом для просмотра, а при чтении 1С выкупила правильную кодировку и прочитала кавычку
4 Garykom
 
гуру
10.02.26
10:44
Так ты не через ёксель файлы то смотри а напрямую как текст
Для CSV по стандарту в кавычки берутся все строковые значения со служебными символами

И да правильная работа с CSV средствами 1С довольно сложна, когда файлы сложные

Тупо читать через разделитель низзя
В строковых значениях внутри могут быть как " " так и "," или ";" или даже """
5 arsik
 
гуру
10.02.26
10:51
Придумали бы уж какой ни будь стандартный символ - разделитель CSV :)
6 Garykom
 
гуру
10.02.26
10:58
(5) так его сразу придумали в стандарте wiki:TSV
:)
7 Garykom
 
гуру
10.02.26
10:58
Или wiki:DSV
8 Garykom
 
гуру
10.02.26
11:01
(5) Фишка в том что CSV придуман для передачи и в 7 битных кодировках
И в чисто текстовых, где банально нет "лишних" символов
Поэтому приходится использовать только существующие

Так то оно вполне логично, если есть служебные символы в строковом значении - экранируем их и берем все значение в кавычки
Для записи легко реализовать
А вот для чтения нужен конечный автомат, но реализация простая
9 Fish
 
гуру
10.02.26
11:13
(6) (7) Хм, получается, что если приходит CSV с разделителем ";", то это на самом деле не CSV, а DSV.
10 Irbis
 
10.02.26
11:28
А уж когда в csv многострочный текст прилетает, да ещё со спецсимволами типа ; и " внутри, приходится в разборах и такую ересь учитывать.
11 Fragster
 
гуру
10.02.26
15:21
можно подключить как внешний источник данных и читать запросом. ну или напрямую через оледб. и не будет там никаких таких проблем.