#progress-4gl #openedge #datestamp
#прогресс-4gl #openedge #метка даты
Вопрос:
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.
Проблема, с которой я сталкиваюсь, заключается в том, что у меня есть несколько файлов за текущий месяц, но мне нужно получить последний файл за месяц.
Ответ №1:
Почему бы не добавить два поля для создания файла: дата и время? Затем вы можете легко написать простое предложение 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 amp; FILE-MOD-TIME вместо этого.
Комментарии:
1. Спасибо jenscd.я получил последний файл с помощью break by. Для каждого tt-файла, где tfile начинается с «RATES» и tt-file.tfiletype = «FRW», блокировка НЕ прерывается с ПОМОЩЬЮ tt-file.CreateDate С ПОМОЩЬЮ tt-file.createtime: если последний (createdate), затем удалите tt-файл с 2-мя столбцами. END
2. Я могу получить последний файл, который начинается с «TAXRATES», но я ТАКЖЕ ХОЧУ ИМЕТЬ ТОЛЬКО ФАЙЛЫ «.CSV». Как мне ЭТО СДЕЛАТЬ?
3. Спасибо jensd. Я использовал индекс word во временной таблице и использовал contains word для переноса CSV-файлов.
Ответ №2:
Ваш пример показывает, что вы используете 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 amp;1", cDir)).
repeat:
import unformatted cFileName.
display cFileName.
/* if .... then */ leave.
end.
Вместо ls
вы также могли бы обработать результаты find
команды. Для этого потребуется немного больше кода, но он намного мощнее.