Importao de arquivo texto

Criei uma tabela no Sqlite e quero importar um arquivo texto para esta tabela do Sqlite, como fao isso ?
o seguinte: tem uma tabela de IBPT no formato texto quero importar para meu banco em Sqlite, como fao isso ?

Voc pode fazer de vrias maneiras. Primeiro, como est definida a sua tabela em formato texto ? Existe um separador, como Tab ou ponto e vrgula ?

Este exemplo de cdigo, da documentao, l de um arquivo texto delimitado por tab, e insere os dados em uma listBox. Voc pode usar como base, e ao invs de alimentar uma listBox, criar um record com os dados e gravar no banco:

Dim f As FolderItem
Dim textInput As TextInputStream
Dim rowFromFile, oneCell As String
Dim i As Integer
f = GetOpenFolderItem("text/plain")  //defined as a FileType
If f <> Nil And f.Exists Then
  Dim tab As String = ChrB(9)
  textInput = TextInputStream.Open(f)
  textInput.Encoding = Encodings.MacRoman //strings are MacRoman
  While Not textInput.EOF
    rowFromFile = textInput.ReadLine
    
    // Set
    If ListBox1.ColumnCount < CountFields(rowFromFile, tab) Then
      ListBox1.ColumnCount = CountFields(rowFromFile, tab)
    End If
    
    ListBox1.AddRow("")
    For i = 1 To CountFields(rowFromFile, tab)
      oneCell = NthField(rowFromFile, tab, i)
      ListBox1.Cell(ListBox1.ListCount-1, i-1) = oneCell
    Next
  Wend
  textInput.Close
End If

Aqui, http://forums.realsoftware.com/viewtopic.php?f=3&t=46994, neste exemplo do frum antigo est bem detalhado a exportao e importao de dados de arquivos csv para mysql, o que praticamente a mesma coisa.

E se for apenas para uma vez, talvez valha a pena voc procurar algum programa freeware que faa isso…

O arquivo texto no tem delimitador uma tripa inteira se o campo no ocupa todo seu espao ele preenche com espacos a direita.
vou colocar um exemplo.
NCM Descricao etc…
22222222xxxxxxxxxxxxx12,80 5,78 676,78
33333333wwwwwww 5,00 13,78 12,13

Quero pegar a linha colocar dentro dos campos de uma tabela criada no Sqlite

Bom, neste caso, vai ser um pouco mais trabalhoso. Mas se voc conhece o tamanho de cada campo, sabe onde comea e termina cada um. Use o exemplo e as referncias que passei, e combine com os comandos left, mid e right, para conseguir separar os campos depois de ler a linha do arquivo.

Depois de atribuir cada parte da linha a cada campo do record, o procedimento o mesmo.

http://documentation.xojo.com/index.php/Left
http://documentation.xojo.com/index.php/Mid
http://documentation.xojo.com/index.php/Right

Blz.
Vou testar se tiver alguma zebra grito socorro.
Obrigado.

Estou com problema na rotina ele comea a executar e vem uma mensagem que o programa parou de responder.
A ideia a seguinte: tenho uma janela com um boto importar neste boto eu apago todo o contedo da tabela chamada ibpt no Sqlite e inclui o contedo do arquivo texto na mesma tabela. Notei que ele inclui uma serie de registro na tabela ibpt mas fala que o programa parou de responder.

Vou colocar o cdigo do boto importar.

If Not App.MyDb.Connect Then
MsgBox(“No existe coneco com Banco de Dados” + EndOfLine +“Favor entrar em contato com o Suporte do Sistema”)
TxtImp.SetFocus
Return
End If

Dim dl As New OpenDialog
Dim ts As TextInputStream
Dim f As FolderItem

//f =GetFolderItem(“C:\XCOMERCIO”)
dl.InitialDirectory = SpecialFolder.Desktop
dl.SuggestedFileName = “Ibptrio.txt”
dl.PromptText = “Escolha o arquivo texto”
dl.ActionButtonCaption = “Abrir”
dl.CancelButtonCaption = “Cancelar”
dl.Title = “Importao Tabela IBPT”
//dl.Filter=“txt”

f = dl.ShowModal()
If f = Nil Then
MsgBox(“Arquivo para importao obrigatorio”)
TxtImp.SetFocus
Return
End If

TxtImp.Text = f.Name
Label2.Text = “Aguarde …”
ProTempo.Visible = True // ProgressWheel

Dim sql As String
sql = “DELETE From Ibpt ;”
App.MyDb.SQLExecute(sql)
If App.MyDb.Error Then
MsgBox("Erro na Excluso Tabela IBPT " + App.MyDb.ErrorMessage)
Self.TxtImp.SetFocus
Return
End If

// ------------- aqui ele apaga o contedo da tabela certinho ------------------------------------//

Dim resultado, vdescricao, vcamp, vncm As String
Dim vfederal, vestadual, vmunicipal, vimportado, vdataini, vdatafim As String
Dim mdataini, mdatafim As Date
Dim linha As New DatabaseRecord

ts = TextInputStream.Open(f)
ts.Encoding = Encodings.MacRoman

While Not ts.EOF

resultado = ts.ReadLine
vncm = Left(resultado,8)
vdescricao = Mid(resultado,9,80)
vfederal = Mid(resultado,89,10)
vestadual = Mid(resultado,99,10)
vmunicipal = Mid(resultado,109,10)
vimportado = Mid(resultado,119,10)
vdataini = Mid(resultado,129,8)
vdataini = Right(vdataini,2) + "/" + Mid(vdataini,5,2)  + "/" + Left(vdataini,4)
If Not ParseDate(vdataini,mdataini) Then 
  mdataini = Nil
End If 
vdatafim = Mid(resultado,137,8)
vdatafim = Right(vdatafim,2) + "/" + Mid(vdatafim,5,2)  + "/" + Left(vdatafim,4) 
If Not ParseDate(vdatafim, mdatafim) Then
  mdatafim = Nil
End If
vcamp = Right(resultado,10)

// -------- retirei o cdigo a baixo e o programa roda normal

linha.Column("ncm")  = vncm
linha.Column("descricao")  = vdescricao
linha.Column("federal")  = vfederal
linha.Column("estadual")  = vestadual
linha.Column("municipal")  = vmunicipal
linha.Column("importado")  = vimportado
If mdataini <> Nil Then 
  linha.Column("dtini")  = mdataini.SQLDate
End If 
If mdatafim <> Nil Then
  linha.Column("dtfim")  = mdatafim.SQLDate
End If
linha.Column("versao")  = vcamp
App.MyDb.InsertRecord("ibpt", linha)
If App.MyDb.Error Then
  MsgBox("Erro na Importao da tabela IBPT " + App.MyDb.ErrorMessage)
  ts.Close
  TxtImp.Text = ""
  Label2.Text = ""
  ProTempo.Visible = False
  TxtImp.SetFocus
  Exit
  Return
End If

// -------------- com o codigo acima inclui registros na tabela mais o programa para de responder como entra-se em loop

Wend

MsgBox(“importao Feita com Sucesso !!!”)
ts.Close
TxtImp.Text = “”
Label2.Text = “”
ProTempo.Visible = False
TxtImp.SetFocus

Seu arquivo texto de importao muito grande ? Est na mesma mquina ou em rede ? Sinceramente, olhando seu cdigo no identifiquei nenhum motivo para este comportamento…

Se no for algo restrito / secreto, e voc puder enviar uma cpia do projeto, posso tentar depurar pra voc.

Enviei o projeto para seu email adelar@xojo.com
Muito o brigado.

Respondi no seu email tambm…

Mandei novamente para seu email o projeto com algumas colocaes para voc analisar .
Obrigado.