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][SORTORDER ]
[FILENAME ] [SELECT] [ SIZE] [DATE ] [ TIME]
[FILENAME ] [SELECT] [ SIZE] [DATE ] [ TIME]
[FILENAME ] [SELECT] [ SIZE] [DATE ] [ TIME] Sort order :
[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