Re: Forms 4.5 FindFile or Directory function
Date: 1997/04/16
Message-ID: <01bc4a5b$29820f00$ef432581_at_ibm.ibm.net>
I build a Form with Forms Designer 4.5.6.3.3. to select files from a
directory for certain processing.
The part of the screen what is interesting to you looks like this:
Directory: [DIRECTORY ] [READ_DIR ]
[SELECT_ALL]
[FILENAME ] [SELECT] [ SIZE] [DATE ] [ TIME]
[FILENAME ] [SELECT] [ SIZE] [DATE ] [ TIME]
[FILENAME ] [SELECT] [ SIZE] [DATE ] [ TIME] Sort order :
[SORTORDER ]
[FILENAME ] [SELECT] [ SIZE] [DATE ] [ TIME] Number selected:
[NUMBER_SEL]
[FILENAME ] [SELECT] [ SIZE] [DATE ] [ TIME]
[FILENAME ] [SELECT] [ SIZE] [DATE ] [ TIME]
[FILENAME ] [SELECT] [ SIZE] [DATE ] [ TIME]
[FILENAME ] [SELECT] [ SIZE] [DATE ] [ TIME]
[FILENAME ] [SELECT] [ SIZE] [DATE ] [ TIME]
[FILENAME ] [SELECT] [ SIZE] [DATE ] [ TIME]
[FILENAME ] [SELECT] [ SIZE] [DATE ] [ TIME]
[FILENAME ] [SELECT] [ SIZE] [DATE ] [ TIME]
[FILENAME ] [SELECT] [ SIZE] [DATE ] [ TIME]
[FILENAME ] [SELECT] [ SIZE] [DATE ] [ TIME]
The Form has two blocks:
- Block: DIRECTORY
Items:
- DIRECTORY, Item Type: Text Item, Char
- READ_DIR, Item Type: Button WHEN-BUUTON-PRESSED-trigger: pu$read_directory(:directory.directory, :directory.sortorder);
- SELECT_ALL, Item Type: Button WHEN-BUUTON-PRESSED-trigger: pu$select_all;
- SORTORDER, Item Type: List Item (Poplist) WHEN-LIST-CHANGED-trigger: pu$read_directory(:directory.directory, :directory.sortorder); List Elements: Name, Size, Extension, Date/Time
- NUMBER_SELECTED, Item Type: Text Item, Number
- DIR
Items:
- FILENAME, Item Type: Text Item, Char WHEN-MOUSE-DOUBLECLICK-trigger: DECLARE v_directory VARCHAR2(100); BEGIN IF RTRIM(:dir.size) = '<DIR>' THEN IF SUBSTR(:directory.directory,-1,1) = '\' THEN v_directory := :directory.directory||:dir.filename; ELSE v_directory := :directory.directory||'\'||:dir.filename; END IF; pu$lees_directory(v_directory); ELSE BELL; END IF; END;
- SELECT, Item Type: Check Box, Char (N, Y) WHEN-CHECKBOX-CHANGED-trigger: IF RTRIM(:dir.size) = '<DIR>' THEN BELL; :dir.selecteer := 'N'; ELSE IF :dir.selecteer = 'J' THEN :directory.number_selected := :directory.number_selected + 1; ELSE :directory.number_selected := :directory.number_selected - 1; END IF; END IF;
- SIZE, Item Type: Text Item, Char
- DATE, Item Type: Text Item, Char
- TIME, Item Type: Text Item, Char
WHEN-NEW-FORM-INSTANCE-trigger:
:directory.sortorder := 'N';
pu$lees_directory;
PROCEDURE pu$read_directory (p_directory IN VARCHAR2 := NULL
,p_sortorder IN VARCHAR2 := 'N')IS
v_dir_file VARCHAR2(12) := SUBSTR(user,1,8) || '.DIR';
v_command VARCHAR2(200);
v_file_in TEXT_IO.FILE_TYPE;
v_string VARCHAR2(100);
v_sortorder VARCHAR2(2);
BEGIN
IF p_sortorder IN ('S', 'D') THEN
v_sortorder := '-' || p_sortorder;
ELSE
v_sortorder := p_sortorder;
END IF;
v_command := 'DIR '||p_directory||' /OG' ||v_sortorder ||' >'
||v_dir_file;
- Clear the screen GO_BLOCK('DIR'); CLEAR_BLOCK; :directory.number_selected := 0;
- Get the directory HOST(v_command, NO_SCREEN);
v_file_in := TEXT_IO.FOPEN(v_dir_file, 'R');
TEXT_IO.GET_LINE(v_file_in, v_string);
TEXT_IO.GET_LINE(v_file_in, v_string);
TEXT_IO.GET_LINE(v_file_in, v_string);
IF SUBSTR(v_string, 2, 12) <> 'Directory of' THEN
TEXT_IO.GET_LINE(v_file_in, v_string);
END IF;
:directory.directory := SUBSTR(v_string, 15); TEXT_IO.GET_LINE(v_file_in, v_string);
LOOP
BEGIN
TEXT_IO.GET_LINE(v_file_in, v_string);
IF SUBSTR(v_string,1,1) = ' ' THEN
EXIT;
END IF;
IF SUBSTR(v_string, 10, 3) = ' ' THEN
:dir.filename := SUBSTR(v_string, 1, 8);
ELSE
:dir.filename := RTRIM(SUBSTR(v_string, 1,
8))||'.'||SUBSTR(v_string, 10, 3);
END IF;
-- Windows 3.11 uses the DOS version under which Windows 3.11 runs.
-- Windows 95 has its own DOS-version. The result of the DIR command
gives a
-- slightly diferent result under the diferent Windows versions.
-- I determine this diference by taking the 28th position on a line
in the dir file.
-- That position is empty under Windows 95 and under Windows 3.11
you'll find the
-- first digit off the date.
IF SUBSTR(v_string, 28, 1) = ' ' THEN
-- It's Windows 95
:dir.size := SUBSTR(v_string, 16, 11);
:dir.date := SUBSTR(v_string, 29, 9);
:dir.time := SUBSTR(v_string, 38, 6);
ELSE
-- It's Windows 3.11
:dir.size := SUBSTR(v_string, 14, 13);
:dir.date := SUBSTR(v_string, 28, 9);
:dir.time := SUBSTR(v_string, 38, 6);
END IF;
NEXT_RECORD;
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- End Of File
EXIT;
END;
END LOOP; TEXT_IO.FCLOSE(v_file_in);
GO_RECORD(1);
END;
PROCEDURE pu$select_all IS
BEGIN
GO_BLOCK('DIR');
GO_RECORD(1);
:directory.number_selected := 0;
WHILE :dir.filename IS NOT NULL LOOP
IF RTRIM(:dir.size) <> '<DIR>' THEN
:dir.selecteer := 'J';
:directory.number_selected := :directory.number_selected + 1;
END IF;
NEXT_RECORD;
END LOOP; GO_RECORD(1); END; We also have a Program Unit to determine if a certain file exists:
FUNCTION pu$search_file (p_file IN VARCHAR2) RETURN BOOLEAN IS
v_dir_file VARCHAR2(12) := SUBSTR(user,1,8) || '.DIR'; v_command VARCHAR2(200); v_file_in TEXT_IO.FILE_TYPE; v_string VARCHAR2(100); v_filename VARCHAR2(12);
BEGIN
v_command := 'DIR '||p_file ||' >' ||v_dir_file;
HOST(v_command, NO_SCREEN);
v_file_in := TEXT_IO.FOPEN(v_dir_file, 'R');
TEXT_IO.GET_LINE(v_file_in, v_string);
TEXT_IO.GET_LINE(v_file_in, v_string);
TEXT_IO.GET_LINE(v_file_in, v_string);
IF SUBSTR(v_string, 2, 12) <> 'Directory of' THEN
TEXT_IO.GET_LINE(v_file_in, v_string);
END IF;
:directory.directory := SUBSTR(v_string, 15); TEXT_IO.GET_LINE(v_file_in, v_string);
LOOP
BEGIN
TEXT_IO.GET_LINE(v_file_in, v_string);
IF SUBSTR(v_string,1,1) = ' ' THEN
EXIT;
END IF;
IF SUBSTR(v_string, 10, 3) = ' ' THEN
v_filename := SUBSTR(v_string, 1, 8);
ELSE
v_filename := RTRIM(SUBSTR(v_string, 1,
8))||'.'||SUBSTR(v_string, 10, 3);
END IF;
IF :directory.directory ||'\'||v_filename = p_file THEN
TEXT_IO.FCLOSE(v_file_in);
RETURN (TRUE);
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- End Of File
EXIT;
END;
END LOOP;
TEXT_IO.FCLOSE(v_file_in);
RETURN (FALSE);
END;
-- Henk Rook ENNIA Caribe NV, CuraƧao ENCTDEP_at_IBM.NET Greg Cobb <gpbcobb_at_btinternet.com> wrote in article <01bc4967$13eba240$d53d63c3_at_dns.btinternet.com>... > I am trying to import a set of files into a directory, using TextIO > package. However, there does not seem to be a method of importing a set of [Quoted] > files within a filesystem directory. I need to import all files in a > specified directory beginning with the letter "P". I would like to use a > function like FindFile("P*", DirectoryName) or a fuction which would give > me a list of files in a directory, so that I could scan through these and > import all files in a directory into an Oracle Table. I have already > looked at the supplied Oracle libraries, but cannot seem to find such a > utility. > > Can anyone help? > > gpbcobb_at_btinternet.com >Received on Wed Apr 16 1997 - 00:00:00 CEST
