Целью данной статьи будет изучение алгоритмов работы с текстовыми файлами, файлами DBF и CSV. Очень часто приходится использовать данные форматы для обмена данными между несколькими базами, в том числе и отличными от 1С.
Чтение текстового файла
Открытие текстового файла для чтения описывается конструкцией:
Текст = Новый ЧтениеТекста; Текст.Открыть(ПолноеИмяФайла);
В данной конструкции создается неинициализированный объект ЧтениеТекста, а для инициализации используется метод Открыть(<Имя файла>)
Пример:
&НаКлиенте Процедура ПрочитатьФайл(Команда)
// Вставить содержимое обработчика. Перем Стр;
Стр = "";
//Открываем диалог выбора файла для чтения ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ВыборФайла.МножественныйВыбор = Ложь; ВыборФайла.Заголовок = НСтр("ru = 'Выбор файла'"); ВыборФайла.Фильтр = НСтр("ru = 'Все файлы (*.*)|*.*'");
Если ВыборФайла.Выбрать() Тогда
ПолноеИмяФайла = ВыборФайла.ПолноеИмяФайла;
КонецЕсли;
Текст = Новый ЧтениеТекста; Текст.Открыть(ПолноеИмяФайла);
Пока Стр <> Неопределено Цикл // строки читаются до символа перевода строки
Стр = Текст.ПрочитатьСтроку(); Сообщить(Стр);
КонецЦикла;
Текст.Закрыть();
КонецПроцедуры
Перебор строк в текстовом документе реализован при помощи функции ПрочитатьСтроку(). После чтения файла не забываем его закрыть функцией Закрыть().
Запись текстового файла
Запись в текстовый файл происходит приблизительно по тому же сценарию:
&НаКлиенте Процедура ЗаписатьФайл(Команда)
//Открываем диалог выбора файла для записи СохранениеФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); СохранениеФайла.Заголовок = НСтр("ru = 'Сохранить файл'"); СохранениеФайла.Фильтр = НСтр("ru = 'Все файлы (*.txt)|*.txt'");
Если СохранениеФайла.Выбрать() Тогда
Текст = Новый ЗаписьТекста; Текст.Открыть(СохранениеФайла.ПолноеИмяФайла,КодировкаТекста.ANSI); Текст.ЗаписатьСтроку("Программируем в 1С 8.2"); Текст.Закрыть();
КонецЕсли;
КонецПроцедуры
Записать текст в документ можно при помощи функции ЗаписатьСтроку() - в данном случае после записанной строки автоматически добавится разделитель строк и следующая запись начнется с новой строки. Если же необходимо добавить в строку дополнительно текст, то можно воспользоваться функцией без переноса строки - Записать().
Чтение файла CSV
CSV (от англ. Comma-Separated Values — значения, разделённые запятыми) — текстовый формат, предназначенный для представления табличных данных. Каждая строка файла — это одна строка таблицы. Значения отдельных колонок разделяются разделительным символом (delimiter) — запятая (,) или точка с запятой (;). (Википедия)
Такой формат часто используют для выгрузки данных из различных баз отличных от 1С. Ниже представлен алгоритм чтения данного формата на основе обычного чтения текстового файла с анализом строки и разбиением ее на поля.
Пример:
&НаКлиенте ПроцедураПрочитатьЦСВ(Команда)
// Вставить содержимое обработчика. ПеремСтр,Сч;
Стр = "";
//Открываем диалог выбора файла для чтения ВыборФайла= НовыйДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ВыборФайла.МножественныйВыбор = Ложь; ВыборФайла.Заголовок =НСтр("ru = 'Выбор файла'"); ВыборФайла.Фильтр=НСтр("ru = 'Все файлы (*.csv)|*.csv'");
ЕслиВыборФайла.Выбрать() Тогда ПолноеИмяФайла=ВыборФайла.ПолноеИмяФайла; КонецЕсли;
Текст =НовыйЧтениеТекста; Текст.Открыть(ПолноеИмяФайла);
Сч = 0;
ПокаСтр <> Неопределено Цикл
Стр =Текст.ПрочитатьСтроку();
//Создаем массив в который будем добавлять выбранные поля МассивПолей =НовыйМассив();
//Цикл разбивает строку на подстроки по разделителю ";" и заносит их в массив ПокаСтрДлина(Стр)> 0 Цикл
//Находим позицию первого вхождения символа ";" ПозицияРазделителя =Найти(Стр, ";");
//Считываем символы до первого найденного символа ";" МассивПолей.Добавить(Лев(Стр,ПозицияРазделителя - 1));
//Удаляем из строки найденную подстроку и повторяем цикл с оставшейся строкой Стр =Прав(Стр,СтрДлина(Стр) -ПозицияРазделителя);
КонецЦикла;
//Выводим на экран первое прочитанное поле Попытка Сообщить(МассивПолей[0]); Исключение КонецПопытки;
КонецЦикла;
Текст.Закрыть();
КонецПроцедуры
Источник: http://www.obrabotki.com/ |