1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

Stream como parametro

Discussão em 'Progress 4GL' iniciado por weiss_sbs, Julho 28, 2017.

  1. weiss_sbs

    weiss_sbs Membro Participativo

    É possível passar o nome de uma stream como parametro para uma procedure ou via include ?
    Tenho que realizar a exportação de registros porem preciso quebrar em vários arquivos e não quero duplicar o código de exportação apenas para mudar o nome da stream de destino.

    def stream str1.
    def stream str2.

    output stream str1 to C:\arquivo1.txt.
    output stream str2 to C:\arquivo2.txt.

    for each customer no-lock:

    put stream str1
    customer.custnum
    customer.name
    skip.

    put stream str2
    customer.custnum
    customer.name
    skip.


    end

    output stream str1 close.
    output stream str2 close.
  2. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    se os arquivos são exatamente iguais como o seu exemplo, manda salvar tudo em um e depois com o OS-COPY vc duplica o arquivo, vai até ficar mais rapido.
  3. weiss_sbs

    weiss_sbs Membro Participativo

    o formato do arquivo é igual porem seu conteúdo é diferente, tentei gerar somente em um arquivo e gerou 2.6 GB de informação, por isso a necessidade de quebrar em vários arquivos.
  4. af.dums

    af.dums Membro Ativo

    Olá...

    E se tu abrir e fechar os arquivos utilizando APPEND?

    Código:
    OUTPUT TO C:\arquivo1.txt. /*Para limpar o arquivo*/
    OUTPUT CLOSE.
    OUTPUT TO C:\arquivo2.txt. /*Para limpar o arquivo*/
    OUTPUT CLOSE.
    
    FOR EACH customer NO-LOCK:
    
        OUTPUT TO C:\arquivo1.txt APPEND.
        PUT customer.custnum
            customer.name
            SKIP.
        OUTPUT CLOSE.
       
        OUTPUT TO C:\arquivo2.txt APPEND.
        PUT customer.custnum
            customer.name
            SKIP.
        OUTPUT CLOSE.
    
    END
    
    
  5. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Bem, stream não é parametro de função, então não tem como ser dinamico, vamos assim dizer, o que daria pra vc fazer, é criar um .p que recebe como parametro o buffer do seu registro, um outro parametro indicando se é o primeiro registro ou não, se for o primeiro, o seu .p faz output stream saida to value(nomeArquivo). se não for o primeiro registro, faz output stream saida to value(nomeArquivo) append.
    dai vc pode fazer run quantas fezes for necessario para esse programa, o stream será um só, mas como é em .p diferente, vc pode estar gerando uns 10 arquivos ao mesmo tempo.
  6. af.dums

    af.dums Membro Ativo

    Só precisaria ver se não fica lento, pela abertura e fechamento de arquivos.

Compartilhe esta Página