Usuário com melhor resposta
ERRO AO LER O ARQUIVO TEXTO. O ÍNDICE ESTAVA FORA DOS LIMITES DA MATRIZ

Pergunta
-
Olá,
Eu estou usando um listView para receber o conteudo de um txt cujo os dados se encontram desta forma:
rodrigo_junes@hotmail.com teste
pati@hotmail.com test
entao quando eu executo o form mando pegar o txt
da o seguinte erro: "ERRO AO LER O ARQUIVO TEXTO. O ÍNDICE ESTAVA FORA DOS LIMITES DA MATRIZ"
segue abaixo o meu codigo:
Imports System.IO
Public Class Form1
Private Sub btnAbrir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAbrir.Click
Dim AbrirComo As OpenFileDialog = New OpenFileDialog()
Dim caminho As DialogResult
Dim Arquivo As String
AbrirComo.Title = "Abrir como"
AbrirComo.FileName = "Nome Arquivo"
AbrirComo.Filter = "Arquivos Textos (*.txt)|*.txt"
caminho = AbrirComo.ShowDialog
Arquivo = AbrirComo.FileName
If Arquivo = Nothing Then
MessageBox.Show("Arquivo Invalido", "Salvar Como", MessageBoxButtons.OK)
Else
txtArquivoOrigem.Text = Arquivo
End If
'verifica se o caminho e nome do arquivo estão ok
If txtArquivoOrigem.Text = String.Empty Or Not txtArquivoOrigem.Text.Contains(".txt") Then
MsgBox("Informe o caminho do arquivo texto origem.")
Return
End If
Try
'declara um streamReader e passa o caminho e nome do arquivo texto
Dim SR As New StreamReader(txtArquivoOrigem.Text)
' variavel que trata as linhas que são lidas
Dim strTemp() As String
Do While SR.Peek <> -1 ' Utilize Peek para ler o arquivo até que não haja mais linhas
' cria uma variavel para o ListViewItems
Dim LVItem As New ListViewItem
' Le a proxima linha no arquivo e a separa se estiver usando TAB
strTemp = SR.ReadLine.Split(Chr(9))
' Extrai o primeiro elemento na linha e atribui os dados a primeira coluna
LVItem.Text = strTemp(0).ToString
' Inclui o item no ListView
lvDados.Items.Add(LVItem)
' Atribui as demais linhas ao subitens
LVItem.SubItems.Add(strTemp(1).ToString)
LVItem.SubItems.Add(strTemp(2).ToString)
LVItem.SubItems.Add(strTemp(3).ToString)
Loop
SR.Close() ' fehca o StreamReader
Catch ex As Exception
MsgBox("Erro ao ler o arquivo texto." & ex.Message)
End Try
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
lvDados.View = View.Details
'colunas criadas com nome da coluna e largura
lvDados.Columns.Add("Email", 390)
lvDados.Columns.Add("Codigo", 90)
End Sub
End ClassDesde ja agradeço
Respostas
-
Bom dia amigo!
Estudei o seu problema e descobri o problema. Primeiro eu mudei a forma de abordagem para inserir no listview. Segundo, se é vc quem monta esse arquivo, tente montá-lo com um caracter especial separando o email do código. Isso facilita na hora de quebrar a linha, caso algum email venha com um espaço embranco ou algum código.
O código abaixo é o do botão. Eu apenas substituí a sua abordagem por uma que eu teste aqui.
Private Sub btnAbrir_Click(sender As System.Object, e As System.EventArgs) Handles btnAbrir.Click Dim AbrirComo As OpenFileDialog = New OpenFileDialog() Dim caminho As DialogResult Dim Arquivo As String AbrirComo.Title = "Abrir como" AbrirComo.FileName = "Nome Arquivo" AbrirComo.Filter = "Arquivos Textos (*.txt)|*.txt" caminho = AbrirComo.ShowDialog Arquivo = AbrirComo.FileName If Arquivo = Nothing Then MessageBox.Show("Arquivo Invalido", "Salvar Como", MessageBoxButtons.OK) Else txtArquivoOrigem.Text = Arquivo End If 'verifica se o caminho e nome do arquivo estão ok If txtArquivoOrigem.Text = String.Empty Or Not txtArquivoOrigem.Text.Contains(".txt") Then MsgBox("Informe o caminho do arquivo texto origem.") Return End If Try 'declara um streamReader e passa o caminho e nome do arquivo texto Dim SR As New StreamReader(txtArquivoOrigem.Text) While Not SR.EndOfStream Dim vAux() As String = SR.ReadLine.Split(" ") 'Quebra a linha quando encontrar um espaço em branco. O interessante seria usar um cacter especial para isso. 'lvDados.Items.Add(vAux(0)) If UBound(vAux) > 0 Then 'Aqui, verifica se a linha é em branco. Dim lvItem As New ListViewItem 'Este cara aqui serve para a primeira coluna Dim lvSubItem As New ListViewItem.ListViewSubItem 'E este aqui serve para a segunda coluna 'Pelo que entendi do link que estudei, para cada coluna vc adiciona um subitem. Cada subitem 'tem que ser adicionado ao subitem diretamente anterior. 'http://wiki.portugal-a-programar.pt/dev_net:vb.net:listviews_36_utilidades_directas lvItem.Name = "Email" 'Nivelei pelo nome da primeira coluna lvItem.Text = vAux(0) lvSubItem.Name = "Codigo" 'Nivelei pelo nome da segunda coluna lvSubItem.Text = vAux(1) lvItem.SubItems.Add(lvSubItem) 'Adiciona a segunda coluna a primeira coluna lvDados.Items.Add(lvItem) 'Adiciona a primeira coluna ao listview End If End While SR.Close() ' fehca o StreamReader Catch ex As Exception MsgBox("Erro ao ler o arquivo texto." & ex.Message) End Try End Sub
Espero ter ajudado.
Att.
Giovani
- Sugerido como Resposta Giovani Cruzara segunda-feira, 16 de setembro de 2013 15:21
- Marcado como Resposta Giovani Cr segunda-feira, 16 de setembro de 2013 16:32