Re: Forms 4.5 FindFile or Directory function

From: Henk Rook <enctdep_at_ibm.net>
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

Original text of this message