//+-----------------------------------------------------------------------------+
//| PROGRAMA | CSV2TELA | By LB&B Consultores Associados [ Balboena ] | 2011 |
//+-----------------------------------------------------------------------------+
//| DESCRIÇÃO | Importa dados de arquivo CSV e mostra browse dos dados |
//+-----------------------------------------------------------------------------+
//| HISTORICO DAS ALTERAÇÕES |
//+-----------------------------------------------------------------------------+
//| DATA | AUTOR | DESCRICAO |
//+-----------------------------------------------------------------------------+
//| | | |
//+-----------------------------------------------------------------------------+
#INCLUDE "RWMAKE.CH"
#INCLUDE "TOPCONN.CH"
#INCLUDE "COLORS.CH"
User Function CSV2TELA()
Private nPos
Private x
Private cLinha
Private cCab := ""
Private nIni
Private i := 0
Private aCSV := {}
Private nCols := 0
Private pArquivo:= "ARQUIVO.CSV"
Private pMatriz := {}
Private pUsaCab := .F.
If ( !File(pArquivo) )
MsgBox("ArquiVO CSV não encontrado" + CHR(13) + " Formato ")
Return
Else
Processa({|| fImpDados()})
Endif
Return
Static Function fImpDados
ProcRegua(2000)
//Abrindo o arquivo
FT_FUse(pArquivo)
FT_FGoTop()
//Capturando as linhas do arquivo
do while ( !FT_FEof() )
IncProc()
if ( Empty(cCab) )
cCab := FT_FREADLN()
endif
if ( pUsaCab )
AADD(aCSV,FT_FREADLN())
elseif ( !pUsaCab ) .and. ( i > 0 )
AADD(aCSV,FT_FREADLN())
endif
i++
FT_FSkip()
enddo
FT_FUSE()
//Pegando o numero de colunas com base no cabecalho
for i := 1 to Len(cCab)
IncProc()
nPos := At(";",cCab)
if ( nPos > 0 )
nCols+= 1
cCab := SubStr(cCab,nPos+1,Len(cCab)-nPos)
endif
next
//Definindo o tamanho da Matriz que recebera os dados
pMatriz := Array(Len(aCSV),nCols+1)
// Carregando os dados
for i := 1 to Len(aCSV)
IncProc()
cLinha := aCSV[i]
for x := 1 to nCols+1
nPos := At(";",cLinha)
if ( nPos > 0 )
pMatriz[i,x] := AllTrim(SubStr(cLinha,1,nPos-1))
cLinha := SubStr(cLinha,nPos+1,Len(cLinha)-nPos)
else
pMatriz[i,x] := AllTrim(cLinha)
cLinha := ""
endif
next x
next i
Private aDados := {}
AADD(aDados, {"Coluna1","Coluna1", "@!" , "10" , "00"})
AADD(aDados, {"Coluna2","Coluna2", "@!" , "50" , "00"})
AADD(aDados, {"Coluna3","Coluna3", "@!" , "05" , "00"}) AADD(aDados, {"Coluna4","Coluna4", "@!" , "05" , "00"})
Private aCampos := {}
AADD(aCampos, {"Coluna1" , "C" , 10 , 00})
AADD(aCampos, {"Coluna2" , "C" , 50 , 00})
AADD(aCampos, {"Coluna3" , "C" , 05 , 00})
AADD(aCampos, {"Coluna4" , "C" , 05 , 00})
cArqTrab := CriaTrab(aCampos)
dbUseArea( .T.,, cArqTrab, "DADOS",.F.,.F.)
For inx := 1 to Len(pMatriz)
RECLOCK("DADOS",.T.)
DADOS->Coluna1 := pMatriz[inx][1]
DADOS->Coluna2 := pMatriz[inx][2]
DADOS->Coluna3 := pMatriz[inx][3]
MSUNLOCK()
Next inx
DbSelectArea("DADOS")
DbGotop()
@ 000,000 TO 800,900 DIALOG oDlg TITLE "dados csv"
@ 010,010 to 370,430 Browse "DADOS" Fields aDados
@ 380,390 BMPBUTTON TYPE 2 ACTION Close(oDlg)
ACTIVATE DIALOG oDlg CENTERED
DbSelectArea("DADOS")
DbCloseArea("DADOS")
Return
by Balboena (www.lbeb.com.br)
Parabens pelo post, me ajudou bastante...
ResponderExcluir:D