none
ERRO AO LER O ARQUIVO TEXTO. O ÍNDICE ESTAVA FORA DOS LIMITES DA MATRIZ RRS feed

  • 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 Class

    Desde ja agradeço

    sábado, 7 de setembro de 2013 20:48

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
    terça-feira, 10 de setembro de 2013 12:21