Versão atual:

Dúvida importação .CSV

Senhores, Boa Tarde.

Estou criando um fonte aqui usando o Reclock, para gravar dados em uma tabela, esses dados estou lendo de um arquivo .CSV, segue o trecho do código abaixo.

O problema é que ele só está inserindo a primeira linha do .CSV onde será que errei? Não estou conseguindo localizar.

Valeu.

Static Function fImporta(cArqSel)
    Local cDirTmp    := GetTempPath()
    Local cArqLog    := 'importacao_' + dToS(Date()) + '_' + StrTran(Time(), ':', '-') + '.log'
    Local nTotLinhas := 0
    Local cLinAtu    := ''
    Local nLinhaAtu  := 0
    Local aLinha     := {}
    Local oArquivo
    Local cLog       := ''
    Local lIgnor01   := FWAlertYesNo('Deseja ignorar o cabeçalho do arquivo?', 'Ignorar?')
    Local cSequen       := SuperGetMv("MV_XSEQREI",.F.,.F.)
    //Variáveis da Importação
    Private cAliasImp  := 'C1H'
    Private cSeparador := ';'

    //Abre as tabelas que serão usadas
    DbSelectArea(cAliasImp)
    (cAliasImp)->(DbSetOrder(1))
    (cAliasImp)->(DbGoTop())


    //Definindo o arquivo a ser lido
    oArquivo := FWFileReader():New(cArqSel)

    //Se o arquivo pode ser aberto
    If (oArquivo:Open())

        //Se não for fim do arquivo
        If ! (oArquivo:EoF())

            //Definindo o tamanho da régua
            aLinhas := oArquivo:GetAllLines()
            nTotLinhas := Len(aLinhas)
            ProcRegua(nTotLinhas)

            //Método GoTop não funciona (dependendo da versão da LIB), deve fechar e abrir novamente o arquivo
            oArquivo:Close()
            oArquivo := FWFileReader():New(cArqSel)
            oArquivo:Open()

            //Caso você queira, usar controle de transação, descomente a linha abaixo (e a do End Transaction), mas tem algumas rotinas que podem ser impactadas via ExecAuto
            //Begin Transaction

                //Enquanto tiver linhas
                While (oArquivo:HasLine())

                    //Incrementa na tela a mensagem
                    nLinhaAtu++
                    IncProc('Analisando linha ' + cValToChar(nLinhaAtu) + ' de ' + cValToChar(nTotLinhas) + '...')

                    //Pegando a linha atual e transformando em array
                    cLinAtu := oArquivo:GetLine()
                    aLinha  := Separa(cLinAtu, cSeparador)

                    //Se estiver configurado para pular a linha 1, e for a linha 1
                    If lIgnor01 .And. nLinhaAtu == 1
                        Loop

                    //Se houver posições no array
                    ElseIf Len(aLinha) > 0 

                        //Transformando de caractere para data (exemplo '19930712' para 12/07/1993 -OU- '12/07/1993' para 12/07/1993)
                        If ('/' $ aLinha[4])
                            aLinha[4] := cToD(aLinha[4])
                        Else
                            aLinha[4] := sToD(aLinha[4])
                        EndIf

                        //Transformando de caractere para data (exemplo '19930712' para 12/07/1993 -OU- '12/07/1993' para 12/07/1993)
                        If ('/' $ aLinha[5])
                            aLinha[5] := cToD(aLinha[5])
                        Else
                            aLinha[5] := sToD(aLinha[5])
                        EndIf

                        //Transformando de caractere para numérico (exemplo '1.234,56' para 1234.56)
                        aLinha[15] := StrTran(aLinha[15], '.', '')
                        aLinha[15] := StrTran(aLinha[15], ',', '.')
                        aLinha[15] := Val(aLinha[15])

                        //Transformando de caractere para numérico (exemplo '1.234,56' para 1234.56)
                        aLinha[17] := StrTran(aLinha[17], '.', '')
                        aLinha[17] := StrTran(aLinha[17], ',', '.')
                        aLinha[17] := Val(aLinha[17])

                      If !C1H->(MsSeek(xFilial("C1H")+"F"+aLinha[1]+" 01")) 
                            cLog += '+ Processando a linha da tabela C1H ' + cValToChar(nLinhaAtu) + ';' + CRLF
                            RecLock(cAliasImp, .T.)
                            C1H_FILIAL := "10503010001"
                            C1H_CODPAR := "F" + aLinha[1] + " 01"
                            C1H_NOME := aLinha[7]
                            C1H_BAIRRO := aLinha[9]
                            CIH_CODMUN := aLinha[10]
                            C1H_UF := "000027"
                            C1H_CODPAI := "000001"
                            C1H_CEP := aLinha[13]
                            C1H_PPES := "1"
                            C1H_DTINCL := aLinha[4]
                            (cAliasImp)->(MsUnlock())

                      EndIf


                    Endif        

                    cSequen := Soma1(cSequen)
                    PutMV("MV_XSEQREI",cSequen)

                EndDo

Versão (1):

Ver a versão formatada

Dúvida importação .CSV

Comentário

new question