Как сделать csv-файл согласно RFC4180

29.02.16

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

На днях потребовалось выгрузить данные из таблицы значений в CSV-файл. Спросил у гугла готовый код и... поставил его в тупик. Тогда отправился в закрома и нарыл универсальную процедуру на Delphi, которую когда-то (много-много лет тому назад) написал. Перевел ее на 1С-овременный язык. И вот что получилось...

Увы! Статья не может состоять только из кода. После некоторых раздумий я решился осквернить этот скрижаль мысли в рамках RFC4180, квинтэссенцию материализации файла с разделителями на накопителях и прочее и прочее своим косноязычным описанием сего таинства.
Пролью свет и приоткрою глаза начинающего программиста Архипа на это чудо. Итак, слушай, о достопочтенный начинающий программист Архип.

... 
имяФайлаCSV = КаталогВременныхФайлов()+"anycsvfile.txt"; 
Кодировка = КодировкаТекста.ANSI; разделитель = ","; 
текст = СоздатьДанныеCSV(ТаблицаЗначенийПолученнаяИзЗапроса, разделитель); 
ЗаписатьCSV(текст, имяФайлаCSV, Кодировка); 
... 

Прежде всего должен ты получить таблицу значений. Самый простой способ - написать запрос и выгрузить результат в упомянутую мной сущность бытия данных. Затем надо определиться с именем файла. После этого дозволь обратить твой взор, о начинающий программист Архип, на функцию СоздатьДанныеCSV(таблицаЗначений, разделитель = ",", выводитьЗаголовок = ЛОЖЬ). В эту функцию передается та самая таблица значений, полученная из запроса. А кроме нее разделитель полей. А потом принять ответственное решение на заполнение первой строки названиями колонок этой самой, выше упомянутой таблицы значений (см. функцию СоздатьЗаголовкиCSV).

А дальше таблица значений будет читаться построчно, и каждая строка ее будет превращаться в сроковое значение в соответствии с заклинанием манускрипта СоздатьСтрокуCSV(запись,разделитель).

// Создаем строку загоовков для CSV-файла
Функция СоздатьЗаголовкиCSV(таблицаЗначений, разделитель)
	
    колонкиТЗ = ТаблицаЗначений.колонки;
	
    Для каждого колонка Из колонкиТЗ Цикл
		
		Если СтрДлина(стрКолонки)>0 Тогда
			стрКолонки = стрКолонки + разделитель;
		КонецЕсли;	
		
		стрКолонки = стрКолонки + колонка.Имя;
		
	КонецЦикла; 
	
    Возврат стрКолонки;
	
КонецФункции

// Создаем строку записи ТаблицыЗначений для CSV-файла
Функция СоздатьСтрокуCSV(записьТаблицаЗначений, разделитель)    
	
	стрЗапись = "";    
	
	Для каждого поле Из записьТаблицаЗначений Цикл
		
		Если СтрДлина(стрЗапись)>0 Тогда
			стрЗапись = стрЗапись + разделитель;
		КонецЕсли;	
		
		Если ТипЗнч(поле) = Тип("Число") Тогда
			стрПоле = ?(ЗначениеЗаполнено(поле),Формат(поле,"ЧРД=."),"0");
		
		ИначеЕсли ТипЗнч(поле) = Тип("Дата") Тогда 
			стрПоле = Формат(поле,"ДФ=dd.MM.yyyy");
			
		Иначе //Если ТипЗнч(поле) = Тип("Строка") Тогда
			
			стрПоле = СтрЗаменить(Строка(поле),"""","""""");
			
			Если 
				( СтрНайти(стрПоле," ")>0  ) ИЛИ
          		( СтрНайти(стрПоле,"""")>0 ) ИЛИ
          		( СтрНайти(стрПоле,",")>0  ) ИЛИ
          		( СтрНайти(стрПоле,";")>0  ) ИЛИ
          		( СтрНайти(стрПоле,Символы.Таб)>0 )  ИЛИ
          		( СтрНайти(стрПоле,Символы.ВК)>0 )   ИЛИ
          		( СтрНайти(стрПоле,Символы.ПФ)>0 )   ИЛИ
          		( СтрНайти(стрПоле,Символы.ВТаб)>0 ) ИЛИ
          		( СтрНайти(стрПоле,Символы.НПП)>0 )  ИЛИ
          		( СтрНайти(стрПоле,Символы.ПС)>0 ) 
			Тогда 
				стрПоле = """"+стрПоле+"""";
			КонецЕсли;	
			
		КонецЕсли; 	
		
        стрЗапись = стрЗапись + Строка(стрПоле);
		
	КонецЦикла; 
	
    Возврат стрЗапись;
	
КонецФункции

// 
Функция СоздатьДанныеCSV(таблицаЗначений, разделитель = ",", выводитьЗаголовок = ЛОЖЬ)
	
	текстЗапись="";
	
	Если выводитьЗаголовок Тогда
	    текстЗапись=СоздатьЗаголовкиCSV(ТаблицаЗначений, разделитель);    
	КонецЕсли;
	
	Для Каждого запись Из таблицаЗначений Цикл
		
        стрЗапись = СоздатьСтрокуCSV(запись,разделитель);            
		Если СтрДлина(стрЗапись)>0 Тогда
			текстЗапись = текстЗапись +	Символы.ПС;
		КонецЕсли;	
        текстЗапись = текстЗапись + стрЗапись;
		
    КонецЦикла;        

    Возврат текстЗапись;

КонецФункции // СоздатьДанныеCSV()

// Запишем данные в файл
Процедура ЗаписатьCSV(текст, имяФайла, кодировка)              

    ТекстовыйФайлЗапись = Новый ЗаписьТекста(имяФайла, кодировка);            
    ТекстовыйФайлЗапись.Записать(Текст); 
    ТекстовыйФайлЗапись.Закрыть();    
	
КонецПроцедуры // ЗаписатьCSV()

См. также

SALE! 15%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 22572 руб.

12.06.2017    134933    722    291    

388

SALE! 20%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

34650 27720 руб.

15.04.2019    68417    178    138    

111

SALE! 20%

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Воспользовались более 79 предприятий! | Предлагаем приобрести готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | В продаже с 2020г. | Оперативно обновляем правила до актуальных релизов 1С | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

43450 34760 руб.

03.12.2020    34168    80    58    

78

SALE! 10%

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.87.x) и УТ 11.5 (11.5.16.x).

28000 25200 руб.

23.07.2020    46289    196    64    

158

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9207    9    8    

10

SALE! 10%

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.223.x) и БП 3.0 (3.0.149.x). Правила подходят для версии ПРОФ и КОРП.

28000 25200 руб.

15.12.2021    20247    132    38    

90

SALE! 10%

Перенос данных из БП 3.0 в УНФ 3.0 / УНФ 1.6. Переносятся остатки, документы и справочная информация

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

В продаже с 2018г. | Воспользовались более 41 предприятия! | Правила конвертации (КД 2) для переноса данных из БП 3 в УНФ | Переносятся все виды документов, начальные остатки и вся возможная справочная информация | Есть фильтр по организациям | Оперативно обновляем на новые релизы | Оказываем техподдержку | В комплект файлов входит инструкция, авторская версия обработки "Универсальный обмен...", актуальные правила переноса данных и архив старых версий переноса | Учет в БП 3 должен быть корректным, некорректные данные не переносятся | Можно бесплатно проверить на вашем сервере до покупки!

50722 45650 руб.

10.07.2018    67444    41    122    

46

Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 11.12.2023, версия 9.5 - 9.9)

13200 руб.

20.11.2015    150714    367    375    

501
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. kuzyara 1900 02.03.16 08:31 Сейчас в теме
Хоть бы RFC привели, интересно же
Evil Beaver; +1 Ответить
3. pit201201 84 02.03.16 11:05 Сейчас в теме
(1) kuzyara,
привел, RFC4180, гугл знает где взять и даже переводит сносно
2. Nati4ka 02.03.16 09:59 Сейчас в теме
И можно еще чуть модифицировать и получится универcальный код для создания .csv и .tsv =)
4. pit201201 84 02.03.16 11:07 Сейчас в теме
(2) Nati4ka,
вроде ничего не надо там модифицировать, только поменять на разделитель = Символ.Таб
5. it-on 02.03.16 11:14 Сейчас в теме
Боюсь ошибку выдаст программа сия, о достопочтенный учитель, в случае когда надо вывести заголовки.
В функции СоздатьЗаголовкиCSV нет начального описания переменной стрКолонки.
6. pit201201 84 02.03.16 11:19 Сейчас в теме
(5) it-on,
Ну зачем так сразу-то, на весь класс. Решил - поднял руку, получил пять.
7. it-on 02.03.16 11:30 Сейчас в теме
(6) Прости учитель. С первого класса у меня так - сначала скажу, потом подумаю, а часто и не подумаю - скажу. Из-за чего часто выгоняли в коридор...
8. speshuric 1326 03.03.16 13:06 Сейчас в теме
На длинных таблицах код будет быстро деградировать по производительности. И только эта деградация спасёт от переполнения памяти. Тут либо уж сразу в файл писать, либо использовать ЗаписьXML как StringBuilder.

Вот пример. Учтите только, что этому коду уже 6 лет.
Evil Beaver; pit201201; kuzyara; ildarovich; +4 Ответить
12. pit201201 84 04.03.16 13:38 Сейчас в теме
(8) speshuric,
Все так. Нужно будет выгрузить большие объемы - деградируем. Хотя csv и большие объемы - сомнительный союз.
13. speshuric 1326 04.03.16 14:03 Сейчас в теме
(12)
Не соглашусь. Именно CSV нереально рулит на больших объёмах. Какие другие варианты в родном 1С-коде? XML - это вообще нецензурно. DBF - ограничение в сколько-то гигов (то ли 2 то ли 4 то ли еще что-то подобное). JSON - слишком молодо и оверхэд всё равно заметный. Табличный документ (в MXL или XLSX) сдохнут в районе миллиона строк. Остаются только внешние источники данных (или сразу ADO), там можно по частям запихивать, но не все получатели могут через ODBC/ADO. Все остальные средства - неродные вроде бы. И вот - единственный финалист CSV - благо во всех языках, в том числе 1С, его прочитать можно последовательно. Но и CSV в памяти тогда весь держать не следует, конечно же.
pit201201; Evil Beaver; +2 Ответить
16. pit201201 84 04.03.16 18:52 Сейчас в теме
(13) speshuric,
Ok, прозвучало убедительно, после праздников выпущу в свет второй комплект процедур и функций для больших массивов.
14. starik-2005 3033 04.03.16 14:03 Сейчас в теме
(12) скажите это тем, кто выгружает файл о недействительных паспортах - там 1 гиг в CSV.
17. pit201201 84 04.03.16 19:10 Сейчас в теме
(14) starik-2005,
про паспорта мне комментировать сложно, не тот профиль. Но есть предположение что, что-то не то в регламенте обмена. У меня получается на 1 недействительный паспорт 4+6+6 символов, плюсом 3 запятых. Итого 20(21) символ на запись с учетом ПС. 1073741824 /21=51130563 паспортов. Каждый третий в стране поменял паспорт. Интересно за какой период эта выборка?
18. starik-2005 3033 04.03.16 21:53 Сейчас в теме
(17) за все периоды, как я понял. Это официальная открытая информация в целях соблюдения закона 115-ФЗ. Вот еще ссылка интересная. В 1 ГиБ данных 96 млн с лишним паспортов. На каждый паспорт 4+","+6+#13#10 = 13 символов. Откуда Вы насчитали три запятых - я ума не приложу.
19. pit201201 84 09.03.16 10:27 Сейчас в теме
(18) starik-2005,
добавил еще код подразделения, выдававшего паспорт, но видимо лишнее
9. Xershi 1474 03.03.16 22:12 Сейчас в теме
За сказку 5, а за повествование 2! Ну кто в такой манере статью пишет...
10. starik-2005 3033 03.03.16 22:30 Сейчас в теме
А так-то. батенька, зачем:
стрПоле = ?(ЗначениеЗаполнено(поле),Формат(поле,"ЧРД=."),"0");

Ну есть же в формате вариант для описания нулевого значения!

Дальше если в поле есть символ ( " ), то вы такое поле помещаете в кавычки:
стрПоле = """"+стрПоле+"""";


Если на входе будет такая строка, то что получится:
"Вася","Петя"","""Саша"""",""""Миша"""""


В итоге все преобразуется в строку:
""Вася","Петя"","""Саша"""",""""Миша""""""


Как это распарсится при чтении? Хреново. В действительности, надо все символы ( " ) заменить на символы ( "" ), т.е. так:
стрПоле = """"+СтрЗаменить(СтрПоле,"""","""""")+""""


Что, я один это увидел?
kostik_love; kuzyara; +2 1 Ответить
11. pit201201 84 04.03.16 13:25 Сейчас в теме
(10) starik-2005,
чуть выше проверки на кавычку в строке есть строка, предлагаемый Вами вариантом с заменой кавычки на пару кавычек
стрПоле = СтрЗаменить(Строка(поле),"""","""""");

так-что вроде все справедливо.

А насчет 0 у числового значения: у 1С трудно понять в числовом значении где 0, а где NULL.Поэтому и проверяю если тип = ЧИСЛО и пусто, то пусть будет 0, а не пустое значение. Хотя вопрос интересный. Или имелось ввиду
Формат(поле,"ЧРД=.; ЧН=0")
?
15. kuzyara 1900 04.03.16 17:36 Сейчас в теме
кг/ам, но все-таки взял на себя смелость перевести этот rfc4180:
Общий формат и MIME-тип для значений, разделенных запятыми (CSV файлов)


1. Введение
----------------------------

Формат CSV (от англ. Comma-Separated Values — значения, разделённые запятыми)
используется для обмена и конвертации данных между различными электронными
таблицами, и уже достаточно давно. Удивительно, но несмотря на большую
распространённость этого формата, он так и не был официально задокументирован.
Кроме того, в то время как список MIME-типов включает в себя тип
"text/tab-separated-values" никакой MIME-тип не был зарегистрирован для CSV.

В то же время, различные программы и операционные системы с низапямятных времен используют различные MIME-типы для этого формата. Этот RFC документ официально регистрирует "text/csv" MIME-тип для CSV в соответствии с RFC 2048 [1].


2. Описание CSV формата
----------------------------

В то время как существуют различные реализации и спецификации для CSV формата
(напр. [4], [5], [6] и [7]), не существует ни одной официальной спецификации
в настоящее время, что позволяет существовать множеству разнообразных
интерпретации CSV файлов. Этот раздел описывает формат, которому, похоже,
следуют большинство реализаций:

1. Записи расположены на отдельных строках, разделенных символом разрыва
строки (CRLF). Например:

ааа, bbb, ссс CRLF
zzz, ууу, ххх CRLF

2. Последняя запись в файле может иметь или не иметь перенос строки.
Например:

ааа, bbb, ссс CRLF
zzz, ууу, ххх

3. Опционально и совсем необязательно в первой строке файла может быть
расположен заголовокв том же формате, как и для обычных записей строк.
Этот заголовок будет являться именами соответствующих полей в файле и
должн содержать такое же количество полей, как записи в остальной части
файла (наличие или отсутствие строки заголовка должно быть указано с
помощью дополнительного параметра этого MIME-типа). Например:

field_name, field_name, field_name CRLF
ааа, bbb, ссс CRLF
zzz, ууу, ххх CRLF

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

ааа, bbb, ссс

5. Каждое поле может быть (а может и не быть) заключено в двойные
кавычки (однако некоторые программы, такие как Microsoft Excel, могут не
использовать двойные кавычки вообще). Поля, не заключеные в двойные
кавычки, не могут содержать двойные кавычки внутри полей. Например:

"ааа", "bbb", "ccc" CRLF
zzz, ууу, ххх

6. Поля, содержащие разрывы строки (CRLF), двойные кавычки, или запятые
должены быть заключены в двойные кавычки. Например:

"ааа", "b CRLF
bb ","ccc" CRLF
zzz, ууу, ххх

7. Если двойная кавычка используется внутри заключенного поля, то она
должна быть экранирована другой двойной кавычкой. Например:

"aaa","b""bb","ccc"

ABNF грамматика (англ. augmented Backus-Naur form — расширенная форма
Бэкуса — Наура) [2] выглядит следующим образом:

file = [header CRLF] record *(CRLF record) [CRLF]

header = name *(COMMA name)

record = field *(COMMA field)

name = field

field = (escaped / non-escaped)

escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE

non-escaped = *TEXTDATA

COMMA = %x2C

CR = %x0D ;как указано в разделе 6.1 RFC 2234 [2]

DQUOTE = %x22 ;как указано в разделе 6.1 of RFC 2234 [2]

LF = %x0A ;как указано в разделе 6.1 of RFC 2234 [2]

CRLF = CR LF ;как указано в разделе 6.1 of RFC 2234 [2]

TEXTDATA = %x20-21 / %x23-2B / %x2D-7E


3. MIME-тип text/csv
----------------------------

Этот раздел содержит media-type описание приложений (в соответствии
с RFC 2048 [1]).

Кому: ietf-types@iana.org
Тема: Описание MIME-типа text/csv
Имя MIME-типа: text
Имя MIME подтипа: CSV
Обязательные параметры: нет
Дополнительные параметры: charset, header

Повсеместно использование CSV в US-ASCII, но и другие кодировки могут
быть использованы в сочетании с параметром "Charset" .

Параметр "header" указывает на наличие или отсутствие строки заголовка.
Допустимые значения "present" или "absent". Разработчики могут не
использовать этот параметр должен самостоятельно принимать решение
относительно того, присутствует или отсутствует строка заголовка.

Декодирование записей:

Как указано в разделе 4.1.1 RFC 2046 [3], этот media-тип использует CRLF
для обозначения разрыва строки, однако, разработчики должны знать, что
некоторые реализации могут использовать другие значения.

Соображения безопасности:

CSV-файлы содержат пассивный текстовые данные которые не должны создавать
каких-либо рисков. Тем не менее, теоретически возможно, что злонамеренные
двоичные данные могут быть включены для того, чтобы использовать
потенциальное переполнение буфера в программе обработки CSV данных.
Кроме того, частные данные могут быть переданы через этот формат (что,
конечно, относится к любому текстовых данных).

Соображения совместимости:

Из-за отсутствия единой спецификации, существуют значительные
различия между реализациями. Разработчики, вы должны "быть
консервативными в том, что вы делаете, и быть либеральным в том,
что вы принимаете от других"(RFC 793 [8]), когда делаете обработку
файлов CSV. Попытка создать общее определение можно найти в разделе 2.

Разработчик, решенив не использовать параметр "header" должен принимать
самостоятельно решение относительно того, присутствует ли заголовок
или отсутствует.

Опубликованная спецификация:

В то время как множество собственных спецификации существуют для различных программ и систем, не существует ни одного «хозяина» спецификации для этого формата. Попытка общего определения можно найти в разделе 2.

Приложения, использующие этот media-тип:

Электронные таблицы и различные утилиты преобразования данных.

Дополнительная информация:

Магическое число: нет

Расширение файла: CSV

Macintosh тип файла: TEXT

Email для получения дополнительной информации:

Yakov Shafranovich <ietf@shaftek.org>

Назначение использования: ОБЩЕЕ

Автор / Контроллер: IESG

4. Соображения IANA

IANA зарегистрировал MIME-тип "text/csv" с помощью
приложения, предусмотреного в разделе 3 настоящего документа.

5. Вопросы безопасности

См обсуждение выше в разделе 3.

6. Выражаю признательностт

Автор хотел бы поблагодарить Dave Crocker, Martin Duerst, Joel M.
Halpern, Clyde Ingram, Graham Klyne, Bruce Lilly, Chris Lilley, и
членов IESG за их полезные предложения. Особое слово
благодарности Дэйву за помощь с грамматикой ABNF.

Автор хотел бы также поблагодарить Henrik Lefkowetz, Marshall Rose,
и сообщество xml.resource.org за предоставление многих инструментов
для приготовления RFC и интернет-проектов.

Особая благодарность L.T.S.

7. Ссылки

7.1. Нормативные ссылки

[1] Freed, Н., Кленсин, J., и J. Постел, "Интернет Многоцелевой
Mail Extensions (MIME) Часть четвертая: Процедуры регистрации ", BCP
13, RFC 2048, ноябрь 1996 года.

[2] Крокер, Д. и П. Overell, "Augmented BNF для синтаксиса
Технические характеристики: ABNF ", RFC 2234, ноябрь 1997 года.

[3] Freed, Н. и Н. Borenstein, "Многоцелевой Internet Mail
Расширения (MIME) Часть вторая: Типы носителей ", RFC 2046, ноябрь
1996.

7.2. Информативные ссылки

[4] Repici, J., "How-To: запятая Separated Value (CSV) файла
Формат ", 2004,
<Http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm>.

[5] Edoceo, Inc., "Формат CSV файла Стандартный", 2004,
<Http://www.edoceo.com/utilis/csv-file-format.php>.

[6] Rodger, Р. и О. Шанахай, "Документация для Ricebridge CSV
Менеджер ", февраль 2005 г.,
<Http://www.ricebridge.com/products/csvman/reference.htm>.

[7] Раймонд Е., "Искусство программирования Unix, Глава 5", сентябрь
2003,
<Http://www.catb.org/~esr/writings/taoup/html/ch05s02.html>.

[8] Постел, J., "Протокол управления передачей", STD 7, RFC 793,
Сентябрь 1981.

Адрес автора:

Yakov Shafranovich
SolidMatrix Technologies, Inc.

EMail: ietf@shaftek.org
URI: http://www.shaftek.org
Показать


Собственно самая интересная часть:
ABNF грамматика:

file = [header CRLF] record *(CRLF record) [CRLF]
header = name *(COMMA name)
record = field *(COMMA field)
name = field
field = (escaped / non-escaped)
escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE
non-escaped = *TEXTDATA
TEXTDATA = %x20-21 / %x23-2B / %x2D-7E
20. kuzyara 1900 22.08.16 15:34 Сейчас в теме
22. webester 26 12.09.21 15:43 Сейчас в теме
(20)
Смотри как надо
Сказал человек и привел пример неработающего кода. Красавчик )
21. ZLENKO 398 08.11.17 15:32 Сейчас в теме
Реализовано в версии 8.3.6.1977 функции: СтрРазделить(), СтрСоединить()
Читаем тут: https://infostart.ru/public/366865/
23. user974519 08.10.21 11:14 Сейчас в теме
извините стрКолонки ни где не указан в функции СоздатьЗоголовокCSV()

откуда оно ?
maxster545; +1 Ответить
Оставьте свое сообщение