【问题标题】:Dynamically parsing the text file动态解析文本文件
【发布时间】:2021-06-20 06:49:18
【问题描述】:

我有一个导入文本文件的请求。

文本文件中的内容有些是静态的,有些是动态的。

例子:

H0X004010850TPQ0030030030030032021/03/1710:34:450

H100DEVTEST01

H2PQ003003003003003

H3CP001001001001001PP002002002002002

D1DEVTEST01

D2T-010

S1100000

这个 H0,H1,H2,H3 和 S1 在一个文件中只出现一次 但 D1 和 D2 可以多次出现。

如果我有静态数量的内容,下面的效果很好。 但是如果我的 D1 和 D2 出现多次,这将失败。

谁能帮我解决这个问题?

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.

【问题讨论】:

  • 如果您包含一个示例数据文件来说明 问题 数据,并且如果您描述了生成的临时表应该有哪些记录或任何其他输出应该有什么,这将很有帮助看起来像。

标签: openedge progress-4gl text-parsing


【解决方案1】:

由于没有关于标题等实际作用的信息,因此很难给出真正好的答案。如果一个行/标题改变了另一行的含义,那么临时表可能是一个好主意。但是,如果每一行都是它自己的小宇宙,我不会打扰临时表,而是自己处理每一行。

类似这样(您需要填写 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.

>

【讨论】:

  • 我的问题不在于找到它是“H0”还是“H1”。问题是“D*”记录的出现。 D1 和 D2 可以多次出现。在一个文件中可能是 2 次,在另一个文件中可能是 5 次。 DO WHILE TRUE ON ENDKEY UNDO, LEAVE: 几乎给了我我想要的。一旦我完成正确的编码,我将在一两天内分享解决方案。
  • @Manny 包含的数据格式与您的临时表定义不匹配。我认为您需要更多地描述您的问题。
猜你喜欢
  • 1970-01-01
  • 2018-08-04
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
  • 2010-10-12
  • 2012-08-25
相关资源
最近更新 更多