Программа, которая выводит отчет в виде CSV - PullRequest
0 голосов
/ 21 ноября 2018

Как мне написать код для программы, которая может принимать три входных параметра: x, y и имя файла для записи?

Я должен иметь возможность вызывать программу следующим образом: run prog.p(введите «1», введите 5, введите «filename1.csv»).

До сих пор я написал код ниже и не уверен, как его обойти.

OUTPUT TO xxxxxx\filename1.csv". 

DEFINE VARIABLE Profit AS DECIMAL  FORMAT "->>,>>9.99":U INITIAL 0 NO-UNDO.

EXPORT DELIMITER "," "Amount" "Customer Number" "Invoice Date" "Invoice Number" "Total_Paid" "Profit".

FOR EACH Invoice  WHERE Invoice.Ship-charge > 5.00
                  AND   Invoice.Total-Paid > 0.01
                  AND   Invoice.Invoice-Date GE 01/31/93 /* this is between  also can use < >*/
                  AND   Invoice.Invoice-Date LE TODAY NO-LOCK:

    Profit = (Invoice.Invoice-Num / Invoice.Total-Paid) * 100.

EXPORT DELIMITER "," Amount Cust-Num Invoice-Date Invoice-Num  Total-Paid Profit. 
END.

OUTPUT CLOSE.

Спасибо.

1 Ответ

0 голосов
/ 21 ноября 2018

Вы на правильном пути!OUTPUT TO VALUE(variable) это то, что может вам помочь.Также вам, возможно, следует использовать именованный поток.

Мне не ясно, какие параметры x и y должны делать, поэтому я просто вставил их в качестве пустышек ниже.

Примечание. Вы комментируете использование <> вместо GE.Это может работать логически, но может (будет) влиять на вашу производительность, заставляя базу данных сканировать все таблицы вместо использования индекса.

Примерно так:

DEFINE INPUT  PARAMETER pcX    AS CHARACTER NO-UNDO.
DEFINE INPUT  PARAMETER piY    AS INTEGER   NO-UNDO.
DEFINE INPUT  PARAMETER pcFile AS CHARACTER NO-UNDO.

/* Bogus temp-table to make the program run... */
/* Remove this unless just testing without database ...*/
DEFINE TEMP-TABLE Invoice NO-UNDO 
    FIELD Ship-Charge  AS DECIMAL 
    FIELD Total-Paid   AS DECIMAL 
    FIELD Invoice-Date AS DATE
    FIELD Invoice-Num  AS INTEGER
    FIELD Amount       AS INTEGER 
    FIELD Cust-Num     AS INTEGER.

DEFINE STREAM str.

DEFINE VARIABLE Profit AS DECIMAL  FORMAT "->>,>>9.99":U INITIAL 0 NO-UNDO.

OUTPUT STREAM str TO VALUE(pcFile). 

EXPORT STREAM str DELIMITER "," "Amount" "Customer Number" "Invoice Date" "Invoice Number" "Total_Paid" "Profit".
FOR EACH Invoice  WHERE Invoice.Ship-charge > 5.00
                  AND   Invoice.Total-Paid > 0.01
                  AND   Invoice.Invoice-Date GE 01/31/93 /* this is between  also can use < >*/
                  AND   Invoice.Invoice-Date LE TODAY NO-LOCK:

    Profit = (Invoice.Invoice-Num / Invoice.Total-Paid) * 100.
    EXPORT STREAM str DELIMITER "," Amount Cust-Num Invoice-Date Invoice-Num  Total-Paid Profit. 
END.

OUTPUT STREAM str CLOSE.

Теперь вы можете запустить этоПрограмма, предполагая, что она называется "program.p":

RUN program.p("1", 5, "c:\temp\file.txt").

или

RUN program.p(INPUT "1", INPUT 5, INPUT "c:\temp\file.txt").

(INPUT является направлением по умолчанию для параметров).

EDIT: Пример выполнения+ изменил первый ввод на CHARACTER вместо целого числа

...