Опубликован: 25.09.2009 | Уровень: специалист | Доступ: свободно
Лекция 14:

Файловый ввод/вывод в Oracle Forms

Аннотация: В этой лекции речь пойдет о пакете TEXT_IO, предназначенном для работы с файлами операционной системы. В лекции будут рассмотрены примеры чтения файла и запись в файл.

Файловый ввод/вывод в Oracle Forms

TEXT_IO - это пакет, который содержит набор процедур и функций для работы с файлами операционной системы. Нет смысла рассказывать о необходимости и полезности этого инструмента, поскольку потребность работать с файлами операционной системы была и будет всегда. Следует заметить, что TEXT_IO в отличие от пакетов VBX, OLE2, DDE поддерживается в последних версиях Forms, тогда как все вышеперечисленные закончили свое существование в Forms 6i. В этой главе мы рассмотрим различные примеры, которые продемонстрируют нам возможности записи и чтения данных.

Спецификация пакета

Пакет TEXT_IO включает в себя все необходимые методы (табл. 14.1) для работы с файлами операционной системы. Для обращения к процедурам или функциям этого пакета вы должны использовать слово " TEXT_IO ".

Процедура FOpen может открывать файл в трех режимах:

  • R - открывает файл только для чтения;
  • W - открывает файл для чтения и записи, удаляя при этом существующие строки;
  • A - открывает файл для чтения и вставки данных, но при этом существующие данные не удаляются, то есть, по сути, происходит операция вставки.
Таблица 14.1. Методы пакета TEXT_IO
Метод Синтаксис Назначение
TEXT IO.Fclose Fclose (file file_type); Закрывает файл
TEXTIO.FileType TYPE Text_IO.File_Type; Тип данных для объявления переменной управления файлом ( FILE_TYPE )
TEXT IO.FOpen Fopen (spec VARCHAR2, filemode VARCHAR2) RETURN Text_IO.File_Type Открывает файл
TEXT IO.Is Open Is_Open (file file_type) RETURN BOOLEAN; Проверяет, открыт ли текущий файл
TEXT IO.Get Line Get_Line (file file_type, item OUT VARCHAR2); Чтение данных из файла. Возвращает следующую строку открытого файла
TEXTIO.NewLine New_Line (file file_type, n PLS_INTEGER := 1); Создает новую строку
TEXT IO.Put Put (file file_type, item VARCHAR2); Записывает строку в файл
TEXT IO.PutF Putf (arg VARCHAR2); (file file_type, arg VARCHAR2); (file file_type, format VARCHAR2, [arg1 [,..., arg5] VARCHA R 2]); (format VARCHAR2, [arg1 [,..., arg5] VARCH AR2]); Записывает строку в файл каждый раз начиная с новой строки
TEXT IO.Put Line Put_Line (file file_type, item VARCHAR2); Записывает строку в файл

Запись данных в файл

Для записи данных в файл необходимо придерживаться такой последовательности:

  1. Создать ссылку на файл, которая в дальнейшем будет указателем на файл при обращении к нему в других методах.
  2. Открыть файл для замены или для добавления текста.
  3. Записать данные в файл.
  4. Закрыть файл, вызвав Fclose.

Для того чтобы убедиться в вышесказанном, выполним пример, который покажет, как записать в Excel данные из формы:

WHEN_BUTTON_PRESSED
declare
out_file Text_IO.File_Type; flnm varchar2(200);
begin
flnm := GET_FILE_NAME('H:\', 'file_name.xls', 'XLS Files
(*.xls)|*.xls|', NULL, SAVE_FILE, TRUE);
out_file:=Text_IO.Fopen(flnm, 'w');
LOOP
Text_IO.New_Line(out_file);
Text_IO.Put(out_file, :ITEM1);
Text_IO.Put(out_file, CHR(9));
Text_IO.Put(out_file, :ITEM);
IF :system.last_record = 'TRUE' THEN
EXIT;
ELSE
next_record;
END IF;
Text_IO.Fclose (out_file);
end;

Чтение данных из файла

Для чтения данных из файла придерживайтесь такой последовательности:

  1. Создать ссылку на файл, которая в дальнейшем будет указателем на файл при обращении к нему в других методах.
  2. Создать буфер для хранения строки данных из файла.
  3. Открыть файл в режиме чтения.
  4. Прочесть данные из буфера ( Get_Line ).
  5. Закрыть файл.

Выполните небольшой пример, который наглядно продемонстрирует вам вышесказанное.

  1. Создайте файл os_file.txt.
  2. Создайте кнопку и определите для нее триггер WHEN-BUTTON-PRESSED. В теле триггера напишите следующий код:
    WHEN_BUTTON_PRESSED
    Declare
    file1 Text_io.file_type; z varchar2(2000); 
    Begin
    file1 := text_io.fopen('c:\r.txt','r'); 
    text_io.get_line(file1,z); message(z); 
    text_io.fclose(file1); 
    exception
     when no_data_found then text_io.fclose(file1); 
    end;

Если вы хотите прочесть все данные, находящиеся в файле, то выполните команду Get_Line цикле.

Константин Лукин
Константин Лукин

ошибка: FRM47337  Tree node label can not be null

при выполнении скрипта

DECLARE
 Itree ITEM;
 top_node Ftree.Node;
 new_node Ftree.Node;
 i_value VARCHAR2(30);
BEGIN
 Itree := Find_Item('tree_block.tree_item ');
 new_node := Ftree.Add_Tree_Node(Itree, Ftree.ROOT_NODE,
   Ftree.PARENT_OFFSET, Ftree.LAST_CHILD,
   Ftree.EXPANDED_NODE, i_value, NULL, i_value);
END;

Юлия Малыгина
Юлия Малыгина
приведена функция скрытия URL отчета и ее применение, но применения так и нет
Жанбек Сарсенов
Жанбек Сарсенов
Россия, Москва, Московский Государственный Университет имени Ломоносова М.В., 2002