简体   繁体   English

动态解析文本文件

[英]Dynamically parsing the text file

I have an ask to import a text file.我有一个要求导入文本文件。

Some of the contents in the text file has static occurrences and some has dynamic.文本文件中的一些内容有 static 出现,一些有动态。

Example:例子:

H0X004010850TPQ0030030030030032021/03/1710:34:450 H0X004010850TPQ0030030030030032021/03/1710:34:450

H100DEVTEST01 H100DEVTEST01

H2PQ003003003003003 H2PQ003003003003003

H3CP001001001001001PP002002002002002 H3CP001001001001001PP002002002002002

D1DEVTEST01 D1DEVTEST01

D2T-010 D2T-010

S1100000 S1100000

Out of this H0,H1,H2,H3 and S1 comes only once in a file But D1 and D2 can come multiple times.这个 H0,H1,H2,H3 和 S1 在一个文件中只出现一次,但 D1 和 D2 可以出现多次。

The below works well if I have static number of contents.如果我有 static 内容数量,则以下内容效果很好。 But this will fail if my D1 and D2 occurs multiple times.但是,如果我的 D1 和 D2 出现多次,这将失败。

Could any one help me with some approach to handle this?任何人都可以帮助我解决这个问题吗?

DEFINE TEMP-TABLE TT-File 

FIELDS H0 AS CHAR

FIELDS H1 AS CHAR

FIELDS H2 AS CHAR

FIELDS H3 AS CHAR

FIELDS H4 AS CHAR

FIELDS D1 AS CHAR

FIELDS D2 AS CHAR

FIELDS S1 AS CHAR.

DEFINE VARIABLE W-IMPORT-FILE      AS CHARACTER   NO-UNDO.
DEFINE VARIABLE W-COUNT            AS INTEGER     NO-UNDO.


ASSIGN W-IMPORT-FILE = "C:\Temp\Manny.txt".
INPUT FROM VALUE(W-IMPORT-FILE).
    ASSIGN W-COUNT = 0.
    REPEAT TRANSACTION:
        
        CREATE TT-File.            
        IMPORT UNFORMATTED TT-File.H0.
        IMPORT UNFORMATTED TT-File.H1.
        IMPORT UNFORMATTED TT-File.H2.
        IMPORT UNFORMATTED TT-File.H3.
        IMPORT UNFORMATTED TT-File.D1.
        IMPORT UNFORMATTED TT-File.D2.
        IMPORT UNFORMATTED TT-File.S1.                
            
    END.
INPUT CLOSE.

FOR EACH TT-File:
    IF SUBSTRING(TT-File.H1,1,2) = "H0":U THEN
        MESSAGE "Header 0 is available to parse":U. 
END.

Since there's no information on what the headers etc actually do mean it's hard to give a really good answer.由于没有关于标题等实际作用的信息,因此很难给出一个很好的答案。 If one row/header changes the meaning of another row a temp-table might be a good idea.如果一个行/标题改变了另一行的含义,那么临时表可能是一个好主意。 If every row however is it's own little universe I wouldn't bother with the temp-table but just handle each row by itself.但是,如果每一行都是它自己的小宇宙,我不会打扰临时表,而是自己处理每一行。

Something like this (you need to fill in all the blocks of the CASE-statement).像这样的东西(您需要填写 CASE 语句的所有块)。

DEFINE VARIABLE W-IMPORT-FILE      AS CHARACTER   NO-UNDO.
DEFINE VARIABLE W-COUNT            AS INTEGER     NO-UNDO.

DEFINE VARIABLE cImport            AS CHARACTER   NO-UNDO.
DEFINE VARIABLE cHeader            AS CHARACTER   NO-UNDO.


ASSIGN W-IMPORT-FILE = "C:\Temp\Manny.txt".
INPUT FROM VALUE(W-IMPORT-FILE).
    ASSIGN W-COUNT = 0.
    REPEAT TRANSACTION:
        IMPORT UNFORMATTED cImport.

        cHeader = SUBSTRING(cImport,1,2).

        CASE cHeader:
            WHEN "H0" THEN DO:

            END.
            WHEN "H1" THEN DO:

            END.
            WHEN "H2" THEN DO:

            END.
            WHEN "H3" THEN DO:

            END.
            WHEN "H4" THEN DO:

            END.
            WHEN "D1" THEN DO:

            END.
            WHEN "D2" THEN DO:

            END.    
            WHEN "S1" THEN DO:

            END.
        END.

        W-COUNT = W-COUNT + 1.             
            
    END.
INPUT CLOSE.

>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM