Ler TXT separado por ;

Discussão em 'Progress 4GL' iniciado por DFResmer, Setembro 6, 2011.

  1. DFResmer

    DFResmer Membro Participativo

    Olá galera,
    Tenho que importar uma tabela que vem de outro programa, ele está em .txt e as fields separadas por ; tem alguma forma de ler esta tabela e reconhecer as fields pelo ;

    Att,

    Diogo
  2. baltazar

    baltazar Membro Participativo

    Exemplo para ler um txt com 2 campos.

    Código:
    def var i-terc as int no-undo.
    def var i-mail as char no-undo.
    
    def stream texto.
    input stream texto from c:\temp\livro1.txt.
    
    repeat:
    
        import stream texto delimiter ";"
        
            i-terc
            i-mail.
  3. DFResmer

    DFResmer Membro Participativo

    Olá, na verdade quero separar as linhas lidas em uma tabela, tendei desta forma abaixo mas dá erro:

    Código:
    
    
     DEF VAR i-codemp AS CHAR.
     DEF VAR i-km     AS CHAR.
     DEF VAR i-qtde   AS CHAR.
     DEF VAR i-valor  AS CHAR.
     DEF VAR i-motorista AS CHAR.
     DEF VAR i-placa  AS CHAR.
     DEF VAR i-codati AS CHAR.
     DEF VAR i-data   AS CHAR FORM 'X(30)'. 
     DEF VAR i-tipo AS CHAR. 
    
       FOR EACH TEMPREL WHERE TEMPREL.texto BEGINS 'AT;0' no-lock.
           IMPORT DELIMITER ";" i-tipo i-codemp i-km i-qtde i-valor i-motorista i-placa i-codati i-data. 
               FIND genios.tabimp WHERE genios.tabimp.codvei = INT(STRING(i-placa, '9999')) AND
                                        genios.tabimp.dtaemi = i-data AND
                                        genios.tabimp.codemp = INT(STRING(i-codemp, '9999')) NO-ERROR.
                    IF NOT AVAILABLE genios.tabimp THEN DO:
                       CREATE genios.tabimp.
                         ASSIGN genios.tabimp.codvei = INT(STRING(i-placa, '9999')) 
                                genios.tabimp.dtaemi = i-data 
                                genios.tabimp.codemp = INT(STRING(i-codemp, '9999')).
                    END.    
                         ASSIGN genios.tabimp.km = INT(STRING(i-km, '999999'))
                                genios.tabimp.qtde = DEC(STRING(i-qtde, 'ZZZ,ZZ9.99'))
                                genios.tabimp.valor = DEC(STRING(i-valor, 'Z,ZZZ,ZZ9.99'))
                                genios.tabimp.codmot = INT(STRING(i-motorista, 'ZZZ9'))
                                genios.tabimp.codati = INT(STRING(i-codati, 'ZZZ9')).
       END.
    
    
    Os Itens da tabela segue abaixo:

    Código:
    AT;0001;1541;254456;;;9104;105;Sat Mar 15 08:34:27 GMT-03:00 2008
    AT;0001;1255;4522;;;0668;103;Sat Mar 15 08:37:40 GMT-03:00 2008
    AT;0001;088;542134;;;6351;104;Tue Sep 13 14:07:00 GMT+00:00 2011
    AT;0001;5555;555;30;65;9104;105;Tue Sep 13 14:09:09 GMT+00:00 2011
    AT;0002;123456;;;005;9104;106;Thu Sep 15 07:51:52 GMT+00:00 2011
    
  4. baltazar

    baltazar Membro Participativo

    Não consegue "tratar" esses dados.

    Separar os ";;;" por ";".

    Penso que o problema será dai.
  5. jalegria

    jalegria Membro Participativo

    bom dia, acho q entendi...

    vc não pode dar import em uma tabela, tire o import.
    neste for each vc pode usar a função entry para separar os itens delimitados por ';'.

    tipo assim:

    assign i-placa = int(entry(7,TEMPREL.texto,';')) no-error.
    if error-status:error or i-placa = ? then /*o conteudo é invalido*/

    /*tratar os outros campos*/

    FIND genios.tabimp WHERE genios.tabimp.codvei = i-placa AND ...

    e por aí vai...

Compartilhe esta Página