Преобразование csv в таблицу значений Ключевые слова: csv, преобразовать, открыть
На выходе - в Список - список колонок, Таблица - таблица с данными.
Функция СтрокаВСписок(Стр,Разделитель = ";")
Список = СоздатьОбъект("СписокЗначений");
Б = СтрДлина(Разделитель)-1;
Пока СтрДлина(Стр)>0 Цикл
А = Найти(Стр,Разделитель);
Если А>0 Тогда
ВрСтр = СокрЛП(Лев(Стр,А-1));
Стр = СокрЛП(Прав(Стр,СтрДлина(Стр)-А-Б));
Иначе
// последняя
ВрСтр = СокрЛП(Стр);
Стр = "";
КонецЕсли;
Если (Лев(ВрСтр,1) = """") И (Прав(ВрСтр,1) = """") Тогда
ВрСтр = Сред(ВрСтр,2,СтрДлина(ВрСтр)-2);
КонецЕсли;
Список.ДобавитьЗначение(ВрСтр);
КонецЦикла;
Возврат(Список)
КонецФункции
Процедура Парсер(ИмяФайла, Список, Таблица);
Текст = СоздатьОбъект("Текст");
Сообщить(ИмяФайла);
Текст.Открыть(ИмяФайла);
Если Текст.КоличествоСтрок()=0 Тогда
Возврат;
КонецЕсли;
Заголовки = СокрЛП(Текст.ПолучитьСтроку(1));
Список = СоздатьОбъект("СписокЗначений");
Список = СтрокаВСписок(Заголовки);
Таблица = СоздатьОбъект("ТаблицаЗначений");
Для Сч = 1 По Список.РазмерСписка() Цикл
Таблица.НоваяКолонка(Список.ПолучитьЗначение(Сч));
КонецЦикла;
Для Сч = 2 По Текст.КоличествоСтрок() Цикл
Список1 = СтрокаВСписок(Текст.ПолучитьСтроку(Сч));
Если СокрЛП(Текст.ПолучитьСтроку(Сч))="" Тогда
Продолжить;
КонецЕсли;
Таблица.НоваяСтрока();
Для Сч1 = 1 По Список1.РазмерСписка() Цикл
Таблица.УстановитьЗначение(Сч-1,Сч1,Список1.ПолучитьЗначение(Сч1));
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Заляпуха, конечно, но работает в простейших случаях
==========
Дополнение:
функция, которая правильно раскладывает строки типа вида:
20100912; 17.19;"Назначение платежа; которое не нужно делить на подстроки"
То есть на три подстроки а не четыре:
RegExp = Новый COMОбъект("VBScript.RegExp");
Результат = Новый Массив();
RegExp.IgnoreCase = Ложь; //Игнорировать регистр
RegExp.Global = Истина; //Поиск всех вхождений шаблона
RegExp.MultiLine = Ложь; //Многострочный режим
RegExp.Pattern = "(?:^|;)(\""(?:[^\""]+|\""\"")*\""|[^;]*)"; //вот наш супер шаблон
//RegExp.Pattern = ";|;|;|;|;;|;|;|;|;|;|;|;|;;|;|;"; //вот наш супер шаблон
Matches=RegExp.Execute(Стр);
ЧислоВхождений=Matches.Count();
//Сообщить(Стр,СтатусСообщения.Важное);
Если ЧислоВхождений>0 Тогда
Для к = 0 По ЧислоВхождений-1 Цикл
Match = Matches.Item(к);
SubMatches = Match.SubMatches;
ЧислоПодвыражений=SubMatches.Count();
Для н = 0 По ЧислоПодвыражений-1 Цикл
SubMatch=SubMatches.Item(н);
Если SubMatch="" Тогда
//Продолжить;
КонецЕсли;
Результат.Добавить(SubMatch);
//Сообщить("Подстрока: "+SubMatch);
КонецЦикла;
КонецЦикла;
Иначе
//Сообщить("Вхождений шаблона не найдено");
КонецЕсли;
Возврат Результат; |