Seleção de Arquivo

Discussão em 'Progress 4GL' iniciado por leonardosg, Março 16, 2010.

  1. leonardosg

    leonardosg Sem Pontuação

    Ola, eu estou desenvolvendo um programa para importação de arquivos e para selecionar o arquivo uso o SYSTEM-DIALOG GET-FILE, mas com ele apenas posso selecionar um arquivo por vez e eu preciso de algo para selecionar múltiplos arquivos ao mesmo tempo.
    Alguém conhece alguma forma para selecionar vários arquivos ao mesmo tempo?
  2. pinut

    pinut Sem Pontuação

    Leonardo, o que vc quer dizer com importar arquivo?
  3. leonardosg

    leonardosg Sem Pontuação

    Abri um arquivo em determinado layout, ler seu conteúdo e gravar nas devidas tabelas.
  4. pinut

    pinut Sem Pontuação

    Eu nunca usei essa função que vc mencionou.
    Costumo fazer da seguinte forma:

    Código:
    def var c-linha as char no-undo format 'x(100)'.
    def var c-arquivo as char no-undo format 'x(100)'.
    
    update c-arquivo.
    
    input from value(c-arquivo).
    
    repeat:
        import unformatted c-linha.
        create tabela.
        assign tabela.campo1 = entry(1,c-linha,';')
                   tabela.campo2 = entry(2,c-linha,';').
    
    end.
    input close.
    
    no meu exemplo eu estaria lendo um arquivo com os campos separados por ponto e virgula, mas vc pode tratar de outra forma.. dependendo de como for o seu layout.
    a leitura pode ser feita para varios arquivos tb, a variavel c-arquivo pode ser uma lista, por exemplo, e vc faz uma estrutura de repetição para ler todos os arquivos da lista.

    enfim..
    é a forma mais simples que me ocorre..

    []'s
  5. LeandroSantos

    LeandroSantos Membro Participativo

    Pelo que eu entendi, a duvida do colega não é ler o arquivos mas sim como selecionar varios arquivos para depois fazer a importação.
    Bom tive uma situação parecida com a sua e o que eu fiz foi criar um browse para selecionar os arquivos.

    Veja se lhe ajuda:
    Código:
    def var hbrowse     as handle.
    def var hquery      as handle.
    def var hcolumn     as handle extent 2.
    def var vLinha      as char   extent 6.
    def var vDir        as char   init "C:\".
    def var vLista      as char.
    def var iRow        as int.
    
    def button btn-abrir label "Abrir".
    
    def temp-table tt-arquivos
        field arquivo   as char format "X(50)"
        field tipo      as char format "X(10)"
        field path      as char format "X(50)"
        field fullpath  as char format "X(50)".
        
    
    def frame f-arquivos
        btn-abrir at row 16 col 1
        with no-label three-d no-box scrollable size 80 by 20.
    
    
    create query hquery.
    hquery:set-buffers(buffer tt-arquivos:handle).
    hquery:query-prepare("for each tt-arquivos by tipo by arquivo").
    create browse hbrowse assign
        frame      = frame f-arquivos:handle
        query      = hquery
        width      = 70
        down       = 15
        multiple   = true
        visible    = true
        sensitive  = true.
    hcolumn[1] = hbrowse:add-like-column("tt-arquivos.arquivo").
    hcolumn[2] = hbrowse:add-like-column("tt-arquivos.tipo").
    
    
    
    on default-action of hbrowse
    do:
        assign vDir = tt-arquivos.fullpath.
        if tt-arquivos.tipo begins "D" then
            run atualiza.
    end.
    
    on choose of btn-abrir
    do:
        do iRow = 1 to hbrowse:num-selected-rows:
            hbrowse:fetch-selected-row(iRow).
            if tt-arquivos.tipo begins "F" then
                run importa-dados.
        end.
    end.
    
    enable all with frame f-arquivos.
    
    
    run atualiza.
    
    
    wait-for close of this-procedure.
    
    
    
    procedure atualiza:
        for each tt-arquivos:
            delete tt-arquivos.
        end.
        input from os-dir(vDir).
            repeat:
                import vLinha.
                file-info:file-name = vLinha[2].
                if substring(file-info:file-type,2,1) = "H" then next.
                create tt-arquivos.
                assign 
                    tt-arquivos.arquivo  = vLinha[1]
                    tt-arquivos.fullpath = file-info:full-pathname
                    tt-arquivos.tipo     = file-info:file-type.
            end.
        input close.
        hquery:query-open.
    end procedure.
    
    
    
    procedure importa-dados:
    /*     input from value(tt-arquivos.fullpath). */
        message "Importando dados do arquivo:" tt-arquivos.fullpath.
    /*     input close. */
    end.
    
  6. pinut

    pinut Sem Pontuação

    O principio é o mesmo ^^

    Só que no seu exemplo a "lista de arquivos" vem do browser.. =)
    E no meu é uma variavel local..

Compartilhe esta Página