Começa a a ler a partir da segunda linha do arquivo.

Salve meu Povo !

To apanhando para fazer essa bagaça ler a partir da segunda linha pois no CSV tem um cabeçalho.

Pra abrir esse arquivo estou usando FT_FUse. Posiciona no topo com FT_FGOTOP() mas é uma função não da pra fazer por exemplo FT_FGOTOP() + 1. Em fim...

Quem puder me ajudar, o código esta em anexo.

Forte abraço Manoel Carlos Júnior

#INCLUDE "RWMAKE.CH" 
#INCLUDE "TBICONN.CH"  
#INCLUDE "TOTVS.CH

USER FUNCTION ImporSC8()
Local aLayout  := {}
Local aArquivo := {}
Local nPosicao := 0
Local nColuna  := 0
Local i,j      := 0
Local nLog     := 0
Local cLinha   := ""
Local cMenErro     := ""

Local cTitulo1 := "Selecione o arquivo"
Local cExtens   := "Arquivo CSV | *.csv"
Local cFilial   := ""
Local cNCotacao := ""
LOcal cLoja     := "" 
Local cNItem    := ""   
Local cCFornec  := ""
Local cPreco    := ""   
Local nPreco    := ""                   
Local cQuant    := "2000"

Local cLoja     := ""
Local cCond     := ""
Local cContato  := ""
Local cFilialEnt:= ""
Local cMoeda    := ""
Local cEmissao  := ""
Local cSeguro   := ""
Local cProposta := ""
Local cProduto  := ""



Local aCabec:={}
Local aItens:={}
PRIVATE lMsErroAuto := .F.  

Private wConteudo   := Nil
Private lMsHelpAuto := .T. // se .t. direciona as mensagens do help
Private lMsErroauto := .F. // necessario a criacao


wtam_array := 20 // VEM CONFORME A ESTRUTURA DO ARQUIVO ENVIADO - wtam_array := 22



cFileOpen := cGetFile(cExtens,cTitulo1,,,.T.)

If !File(cFileOpen)
   MsgAlert("Arquivo texto: "+cFileOpen+" não localizado",cCadastro)
   Return
Endif

FT_FUSE(cFileOpen) //ABRIR
FT_FGOTOP()//PONTO NO TOPO
ProcRegua(FT_FLASTREC()) //QTOS REGISTROS LER

While !FT_FEOF() //FACA ENQUANTO NAO FOR FIM DE ARQUIVO
   IncProc()


// -----CAPITURAR DADOS

nColuna  := 0
    nPosicao := 1
    cLinha   := FT_FReadLn()

    AAdd(aArquivo,Array(wtam_array))  
        WLOG := ""
    For i := 1 To Len(cLinha)   

        If SubStr(cLinha,i,1) == ";" .Or. Len(cLinha) == i
            nColuna++

            IF NCOLUNA == wtam_array
                    aArquivo[Len(aArquivo),nColuna] := SubStr(cLinha,nPosicao,i+1-nPosicao)
            else
                    aArquivo[Len(aArquivo),nColuna] := SubStr(cLinha,nPosicao,i-nPosicao)
            ENDIF

            nPosicao := i + 1
        EndIf

    Next i

    IF NCOLUNA < WTAM_ARRAY
        NCOLUNA += 1
        FOR I := NCOLUNA TO WTAM_ARRAY
            aArquivo[Len(aArquivo),nColuna] := SPACE(1)
        NEXT
    ENDIF

    IF .NOT. EMPTY(WLOG)
        FWrite(nLog, WLOG + " - "  + CLINHA + CHR(13) + CHR(10) )
        WERRO := .T.
    ENDIF

    FT_FSkip()

aSort(aArquivo,,,{|aX,aY| ax[1] < aY[1]})

For i := 1 To Len(aArquivo)

cFilialEnt:= aArquivo[i][02]
cNCotacao := aArquivo[i][03]
cProposta := aArquivo[i][04]
cNItem    := aArquivo[i][05]
cEmissao  := aArquivo[i][06]
cCFornec  := aArquivo[i][08]
cLoja     := aArquivo[i][09]
cCond     := aArquivo[i][16]
cContato  := aArquivo[i][11]
cProduto  := aArquivo[i][12]
cQuant    := aArquivo[i][15]
cMoeda    := aArquivo[i][17]
cSeguro   := aArquivo[i][18]
cPreco    := aArquivo[i][19]  

//Tratamento ExecAuto 

cCFornec1  := cValtoChar(StrZero(VAL(cCFornec),6))
cLoja1     := cValtoChar(StrZero(VAL(cLoja),2))
cFilialEnt1:= cValtoChar(StrZero(VAL(cFilialEnt),2))
cProposta1 := cValtoChar(StrZero(VAL(cProposta),2))
cProduto1  := cValtoChar(StrZero(VAL(cProduto),15))
cNItem1    := cValtoChar(StrZero(VAL(cNItem),4))
cNCotacao1 := cValtoChar(StrZero(VAL(cNCotacao),6))
cEmissao1  := SUBSTR(cEmissao,7,4)+SUBSTR(cEmissao,4,2)+SUBSTR(cEmissao,1,2)

// ---- EXEMPLO ALTERACAO DE UMA COTACAO JA EXISTENTE ----   
dbSelectArea("SC8")
dbSetOrder(8)
If SC8->(dbSeek(xFilial("SC8")+cNCotacao1+cCFornec1+cLoja1+cProduto1+cNItem1)) 
aadd(aCabec,{"C8_FORNECE" ,cCFornec1})
aadd(aCabec,{"C8_LOJA"    ,cLoja1})
aadd(aCabec,{"C8_COND"    ,cCond })      
aadd(aCabec,{"C8_CONTATO" ,cContato})
aadd(aCabec,{"C8_FILENT"  ,cFilialEnt1})
aadd(aCabec,{"C8_MOEDA"   ,1})
aadd(aCabec,{"C8_EMISSAO" ,cEmissao1})
aadd(aCabec,{"C8_SEGURO"  ,VAL(cSeguro)})
aadd(aItens,{{"C8_NUMPRO",cProposta1,Nil},;
             {"C8_PRODUTO",cProduto1,Nil},;             
             {"C8_ITEM" , cNItem1,Nil},;             
             {"C8_QUANT",VAL(cQuant) ,Nil},;
             {"C8_PRECO",VAL(StrTran(cPreco,",",".")),Nil}})
else
MsgAlert("Atenção, o Algum código esta errado")                   
//{"C8_ITEM"  ,cNItem,Nil},;
Endif
MSExecAuto({|v,x,y| MATA150(v,x,y)},aCabec,aItens,3)

If lMsErroAuto   
mostraerro()
EndIf 
Next                                                                                                
   FT_FSKIP()   //proximo registro no arquivo txt
EndDo

FT_FUSE() //fecha o arquivo txt

MsgInfo("Processo finalizado")

Return
  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 SigaOAdvpl!

2 respostas

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