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
compartilhar
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags advpl ou faça a sua própria pergunta.