-1
DEFINE VARIABLE cDir  AS CHARACTER NO-UNDO initial '/home/raj/'.

define temp-table tt-file
       field tfile as char format "x(22)".
define variable vfile as char format "x(22)" no-undo.

INPUT FROM OS-DIR (cDir) ECHO.

REPEAT:

    create tt-file.
    IMPORT tt-file.tfile.
        FILE-INFO:FILE-NAME = cDir + tt-file.tfile.
      if file-info:file-name begins cdir + "RATES"
         and string(month(file-info:file-mod-date)) = string(month(today)) THEN    
     DISPLAY tt-file.tfile FORMAT "X(22)" LABEL 'name of the file'
             FILE-INFO:FULL-PATHNAME FORMAT "X(21)" LABEL 'FULL-PATHNAME'
             FILE-INFO:PATHNAME FORMAT "X(30)" LABEL 'PATHNAME'
             FILE-INFO:FILE-TYPE FORMAT "X(5)" LABEL 'FILE-TYPE'
             file-info:file-mod-date.
end.

私が直面している問題は、今月のファイルが複数あるが、その月の最新のファイルを取得する必要があることです。

4

2 に答える 2

3

ファイル作成のために、日付と時刻の 2 つのフィールドを追加してみませんか? 次に、2 つの日付の間の最後のファイルを取得する単純な WHERE 句を簡単に作成できます。

DEFINE VARIABLE cDir  AS CHARACTER NO-UNDO INITIAL '/home/raj/'.

DEFINE TEMP-TABLE tt-file NO-UNDO
       FIELD tfile      AS CHARACTER FORMAT "x(22)"
       FIELD createDate AS DATE
       FIELD createTime AS INTEGER.

INPUT FROM OS-DIR (cDir).
REPEAT:
    CREATE tt-file.
    IMPORT tt-file.tfile.

    FILE-INFO:FILE-NAME = cDir + tt-file.tfile.

    ASSIGN 
        tt-file.createDate = FILE-INFO:FILE-CREATE-DATE
        tt-file.createtime = FILE-INFO:FILE-CREATE-TIME.
END.

/* Here you could add any logic to get your file */
FOR EACH tt-file NO-LOCK BY tt-file.createDate BY tt-file.createtime:
    DISP tt-file.
END.

/* Updated example for doing things only with .csv files */
FOR EACH tt-file NO-LOCK WHERE tt-file.tfile MATCHES "*csv" 
                            BY tt-file.createDate 
                            BY tt-file.createtime:
    DISP tt-file.
END.

アプリケーションによっては、代わりに FILE-MOD-DATE & FILE-MOD-TIME を使用したい場合があります。

于 2014-07-07T13:37:02.447 に答える
0

あなたのサンプルは、あなたが unix/linux を使用していることを示しています。os-command を使用できます

define variable cDir as character no-undo form "x(65)" initial '/home/raj/'.
define variable cFileName as character no-undo form "x(65)".
input through value(substitute("ls -1t &1", cDir)).

repeat:
    import unformatted cFileName.
    display cFileName.
    /* if .... then */ leave.
end.

代わりにls、コマンドの結果を処理することもできますfind。これにはもう少しコードが必要ですが、はるかに強力です。

于 2014-07-08T05:36:09.147 に答える