ГлавнаяИнформацияРазработчикамОбработка csv-файла

Обработка csv-файла


Я приведу пример разбора csv-файла, где количество столбцов будет вычисляться программно и результат будет помещен в таблицу значений для дальнейшей работы.


Процедура КнопкаВыполнитьНажатие(Кнопка)

// Примерный формат строки файла: "значение1|значение2|значение3|значение4|значение5"

Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(Файл);

ТЗ = ПодготовитьТЗ(Текст);

// Обработка файла.
Для НомерСтроки = 1 По Текст.КоличествоСтрок() Цикл

Стр = Текст.ПолучитьСтроку(НомерСтроки);
// Нужна отдельная переменная, так как при обрезке строка обрезается непосредственно
// в файле и работать с файлом дальше уже нельзя.
СтрокаДляРаботы = Стр;
КонецСтроки = СтрДлина(Стр);

Разделитель = "|";
КоличествоСтолбцов = ПолучитьКоличествоСтолбцов(СтрокаДляРаботы, КонецСтроки, Разделитель);

НС = ТЗ.Добавить();

// Обработка текущей строки, перенос значений в ТЗ.
Для Н = 1 По КоличествоСтолбцов Цикл

ПозицияРазделителя = Найти(Стр, Разделитель);
Значение = Сред(Стр, 1, ПозицияРазделителя - 1);
Стр = Сред(Стр, ПозицияРазделителя + 1, КонецСтроки);

Выполнить("НС.Колонка" + Строка(Н) + " = Значение;");

КонецЦикла;

КонецЦикла;

// На этом этапе все значения csv-файла перенесены в ТЗ, работать с которой уже проще.

КонецПроцедуры
 
 
Функция ПолучитьКоличествоСтолбцов(Стр, КонецСтроки, Разделитель)

КоличествоСтолбцов = 0;

Для Н = 1 По КонецСтроки Цикл

ПозицияРазделителя = Найти(Стр, Разделитель);

Если ПозицияРазделителя <> 0 Тогда
КоличествоСтолбцов = КоличествоСтолбцов + 1;
КонецЕсли;

Стр = Сред(Стр, ПозицияРазделителя + 1, КонецСтроки);

КонецЦикла;

Возврат КоличествоСтолбцов + 1;

КонецФункции
 
 
Функция ПодготовитьТЗ(Текст)

// В результате в ТЗ будут созданы колонки "Колонка1", "Колонка2" ...

ТЗ = Новый ТаблицаЗначений;

// Подразумеваем, что во всех строках равное количество столбцов, поэтому разберем только первую строку
Стр = Текст.ПолучитьСтроку(1);
// Нужна отдельная переменная, так как при обрезке строка обрезается непосредственно
// в файле и работать с файлом дальше уже нельзя.
СтрокаДляРаботы = Стр;
КонецСтроки = СтрДлина(Стр);

Разделитель = "|";
КоличествоСтолбцов = ПолучитьКоличествоСтолбцов(СтрокаДляРаботы, КонецСтроки, Разделитель);

// Подготовка таблицы значений.
Для Н = 1 По КоличествоСтолбцов Цикл
ТЗ.Колонки.Добавить("Колонка" + Строка(Н));
КонецЦикла;

Возврат ТЗ;

КонецФункции
 
 
Процедура ФайлНачалоВыбора(Элемент, СтандартнаяОбработка)

ДиалогФыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогФыбораФайла.Фильтр = "Файлы csv (*.csv)|*.csv";
ДиалогФыбораФайла.Заголовок = "Выберите файл";
ДиалогФыбораФайла.ПредварительныйПросмотр = Ложь;
ДиалогФыбораФайла.Расширение = "csv";
ДиалогФыбораФайла.ИндексФильтра = 0;
ДиалогФыбораФайла.ПолноеИмяФайла = Элемент.Значение;

Если ДиалогФыбораФайла.Выбрать() Тогда
Элемент.Значение = ДиалогФыбораФайла.ПолноеИмяФайла;
КонецЕсли;

КонецПроцедуры

 

Скачать пример

Опубликовано 04.01.2014. Автор — Антон Колимбетов.