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