Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Работа со структурой файла DBF




Методы

Метод Описание
Открыть(<ИмяФайла>) Открыть текстовый файл с указанным именем.
КоличествоСтрок() Возвращает число строк в тексте.
ПолучитьСтроку(<НомерСтроки>) Возвращает строку текста с заданным номером.
ДобавитьСтроку(<Строка>) Добавить строку в конец текста.
УдалитьСтроку(<НомерСтроки>) Удалить строку с указанным номером.
ВставитьСтроку(<НомСтроки>,<Строка>) Вставить строку с указанным номером.
ЗаменитьСтроку(<НомерСтроки>,<Строка>) Заменить строку с указанным номером.
Шаблон(<Флаг>) Включить/Отключить режим добавления строк по шаблону. Шаблон означает, что в квадратных скобках указаны имена переменных или выражения на встроенном языке. При формировании такой строки 1С вычислит все выражения в квадратных скобках и подставит их в строку. Пример, "Сотрудник с табельным номером [Сотрудник.Код] обработан." При формировании такой строки в режиме шаблона результирующая строка будет иметь вид: "Сотрудник с табельным номером 123 обработан."
ФиксШаблон(<Флаг>) В отличие от метода Шаблон, ограниченные квадратными скобками поля замещаются значениями выражений с сохранением своей длины в символах, то есть обрезаются, если поле короче результата вычисления выражения и дополняются пробелами если длиннее. Если результат числовой, то в границах поля строка прижимается к правой границе.
Показать(<Заголовок>,<ИмяФайла>) Открыть окно редактирования текста.
ТолькоПросмотр(<Режим>) Разрешить / запретить возможность редактирования текста в окне просмотра. Вызывается до метода Показать.
Очистить() Очищает содержимое текстового документа. Его использование позволяет заново заполнить содержимое текстового документа.
КодоваяСтраница(<Режим>) Установить режим кодировки текста. 0 - windows-кодировка, 1 - DOS-кодировка. Возвращает текущее числовое значение режима кодировки (на момент до исполнения метода).
Записать(<ИмяФайл>) Записать текст в файл с указанным именем.

 

Пример

ТекстДок = СоздатьОбъект("Текст");
ТекстДок.Открыть("catalog.txt");
ТекстДок.ЗаменитьСтроку(52, "Установка оборудования......" + Стоимость);
ТекстДок.ВставитьСтроку(53, "Замена оборудования... ");
ТекстДок.УдалитьСтроку(10);
ТекстДок.ДобавитьСтроку("Конец файла");

ТекстДок2 = СоздатьОбъект("Текст");
ТекстДок2.Шаблон(1);

Для н = 1 По ТекстДок.КоличествоСтрок(1) Цикл
..........стр = ТекстДок.ПолучитьСтроку(н);
..........стр2 = "[н]" + стр;
.........ТекстДок2.ДобавитьСтроку(стр2);
КонецЦикла;

ТекстДок2.Записать("catalog2.txt");
ТекстДок2.ТолькоПросмотр(1);
ТекстДок2.Показать();


DBF-файлы

Чтение файла DBFЗапись в файл DBFРабота со структурой файла DBF Работа с удаленными записями Работа с индексами  

 

Чтение файла DBF

В данном случае, мне кажется, что проще написать программу и прокомментировать ее, чем делать что-то еще. Вы уже такие продвинутые, раз добрались до этой главы! Я горжусь вами!

Файл = создатьОбъект(" XBASE "); //создаем ссылку на файл DBF
Файл. ОткрытьФайл ("catalog.dbf"); //открываем файл на диске
Файл.КодоваяСтраница(1); //задаем кодировку: 0 - windows, 1 - DOS

Если Файл. Открыта ()=0 Тогда //проверяем, удалось ли открыть файл
........Сообщить("Не удалось открыть файл!");
КонецЕсли;

Файл. Первая (); //позиционируемся на первой записи
Пока Файл. ВКонце ()=0 Цикл //пока не дошли до конца, крутим цикл
.......НомерЗаписи = Файл. НомерЗаписи (); //получаем номер текущей записи
.......НазвТовара = Файл. NAME; //получаем значение поля
.......Цена = Файл. ПолучитьЗначениеПоля ("PRICE"); //так тоже можно, но чуть медленнее
.......Файл. Следующая (); //переходим на следующую запись
КонецЦикла;

Файл. Последняя (); //позиционируемся на первой записи
Пока Файл. ВНачале ()=0 Цикл //пока не дошли до начала, крутим цикл
.......НазвТовара = Файл.NAME;
.......Цена = Файл.PRICE;
.......Файл. Предыдущая (); //переходим на предыдущую запись
КонецЦикла;

Для н = 1 По Файл. КоличествоЗаписей () Цикл //здесь все понятно, по-моему
......Файл. Перейти (н); //позиционируемся на определенной записи
.......НазвТовара = Файл.NAME;
.......Цена = Файл.PRICE;
КонецЦикла;

Файл. ЗакрытьФайл (); //не забывайте пожалуйста

Запись в файл DBF

Файл = создатьОбъект(" XBASE "); //создаем ссылку на файл DBF

//определяем структуру файла
//Синтаксис: ДобавитьПоле(<Название>,<Тип>,<Длина>,<Точность>)

Файл. ДобавитьПоле ("NAME","S",50,0);
Файл. ДобавитьПоле ("PRICE","N",10,2);

Файл. СоздатьФайл ("catalog.dbf"); //создаем файл физически

СпрТовары.ВыбратьЭлементы();
Пока СпрТовары.ПолучитьЭлемент()=1 Цикл
.......Файл. Добавить ();
.......Файл.NAME = СпрТовары.Наименование;
.......Файл.УстановитьЗначениеПоля("PRICE",СпрТовары.Цена) //так тоже можно;
.......Файл. Записать ();
КонецЦикла;

Файл. ЗакрытьФайл (); //не забывайте пожалуйста

Работа со структурой файла DBF

Например, создадим файл, идентичный по структуре исходному.
//При этом применяется метод ОписаниеПоля, который возвращает характеристики поля с указанным номером
//синтаксис: ОписаниеПоля(<НомерПоля>,<НазваниеПоля>,<Тип>,<Длина>,<Точность>)

Файл1 = СоздатьОбъект("XBASE");
Файл2 = СоздатьОбъект("XBASE");

Файл1 = ОткрытьФайл("file1.dbf");

Для н = 1 По Файл1.КоличествоПолей() Цикл
........НазвПоля = "";
........Тип = "";
........Длина = 0;
........Точность = 0;
........Файл1. ОписаниеПоля (н,назвПоля,Тип,Длина,Точность);
........Файл2.ДобавитьПоле(назвПоля,Тип,Длина,Точность);
КонецЦикла;

Для работы с файлом DBF неизвестной структуры часто применяются следующие методы:
ПолучитьЗначениеПоля (<ИмяПоля>);
УстановитьЗначениеПоля (<ИмяПоля>,<значение>);

Работа с удаленными записями
Файлы DBF устроены таким образом, что удаление записи не приводит к физическому удалению записи из файла. Запись просто помечается на удаление и пропускается при переборе. Таким образом размер файла остается прежним. Чтобы физически удалить все помеченные на удаление записи нужно применить метод Сжать. Средства встроенного языка позволяют работать с такими записями, перебирать их и даже отменять пометку на удаление.

Файл. ПоказыватьУдаленные (1);
Файл.Первая();
Пока Файл.ВКонце()=0 Цикл
......Если Файл. ЗаписьУдалена ()=1 Тогда
............Файл.Восстановить();
......КонецЕсли;
......Файл.Следующая();
КонецЦикла;

Файл.Первая();
Пока Файл.ВКонце()=0 Цикл
......Если Файл.PRICE < 1000 Тогда
............Файл. Удалить ();
......КонецЕсли;
......Файл.Следующая();
КонецЦикла;

Файл. Сжать (); //удалить записи физически

Можно удалить все записи в файле одним движением. При этом они физически удаляются и не могут быть восстановлены.
Файл. ОчиститьВсе ();

Стоит еще отметить про метод Очистить (), что он очищает все поля текущей записи. Атрибуты, соответствующие полям типа "строковый" приобретают значение «пустая строка», числовой — 0, логический — 0, дата — «пустая дата».

Работа с индексами

Для организации упорядочивания содержимого файла БД и поиска в ней по значению одного или нескольких полей применяется механизм индексов. Его применение можно сравнить с сортировкой картотеки по определенному признаку (совокупности признаков). Однако, в отличие от картотеки, файл БД может иметь сразу несколько индексов, и, соответственно, являться упорядоченным одновременно по нескольким признакам. Индексы хранятся в индексном файле. Индексный файл может содержать информацию более чем об одном индексе. Рекомендуется для одного файла DBF иметь один индексный файл, в котором хранятся все индексы для этого файла.

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

Основное правило: индекс нужен, чтобы быстро искать нужную запись.

DBF-ФАЙЛ Индекс по фамилии
Физ. номер записи Фамилия
  Иванов
  Абдулов
  Барабанов
  Мирнов
  Раскольников
  Комаров
Фамилия Физ. номер записи
Абдулов  
Барабанов  
Иванов  
Мирнов  
Комаров  
Раскольников  

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

После создания структуры базы данных можно добавить индексы следующим образом:
//Синтаксис: ДобавитьИндекс(<Название>, <Выражение>, <Уникальность>, <Убывание>, <Фильтр>)

Файл = СоздатьОбъект("XBase");
Файл.ДобавитьПоле("NAME", 1, 19, 3);
Файл.ДобавитьПоле("PRICE", 2, 25, 0);
Файл. ДобавитьИндекс ("IDXCODE", "CODE", 1, 0, "");
Файл. ДобавитьИндекс ("IDXNAME", "NAME", 0, 0, "");
Файл. ДобавитьИндекс ("IDXNAMECODE", "NAME+CODE", 0, 0, "");
Файл.СоздатьФайл("mydb.dbf", "mydb.cdx");

//1-й вариант
Файл. ТекущийИндекс ("IDXNAME");
Файл. Найти ("Иванов",0); //передается значение и режим поиска

//2-й вариант
Файл.ТекущийИндекс("IDXNAMECODE");
Файл. Ключ. NAME = "Иванов";
Файл. Ключ. CODE = 123;
Файл. НайтиПоКлючу (0);

//после сбоя рекомендуется заново переформировать все индексы
Файл. Переиндексировать ();

В 1С существует специальный язык для задания выражений и фильтра индекса. Подробнее о нем, смотрите в документации на встроенный язык.


Файловая система

Для работы с файлами и каталогами в 1С:Предприятие используется специальный объект "ФС" (файловая система). Средства языка 1С имеют возможности поиска, копирования, переименования, удаления и совершения других операций с файлами и каталогами.





Поделиться с друзьями:


Дата добавления: 2015-11-23; Мы поможем в написании ваших работ!; просмотров: 767 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Так просто быть добрым - нужно только представить себя на месте другого человека прежде, чем начать его судить. © Марлен Дитрих
==> читать все изречения...

2443 - | 2199 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.