View Single Post
 
Old 05-12-2015, 07:39 AM
magoteli magoteli is offline
Newcomer
 
Join Date: May 2015
Posts: 1
Default Length can't be less than zero

Hi, i'm trying to use this code to read a .txt file, but i am getting a error in the line:

.medico = Ler_linha_de_registos.Substring(P10, P11 - P10 - 1)

the error:
http://i.imgur.com/dn78smg.png?1

it says:
"Length can't be less than zero - ArgumentOutOfRangeException was unhandled"

I don't know what to do :S

Here's the code:


Code:
   Public Sub Ler_Registo_Requisitados()
        Try
            Dim FSFicheiro_registos As New FileStream(caminho, FileMode.Open, FileAccess.Read)
            Dim SRRegisto_Requisitados As New StreamReader(FSFicheiro_registos)
            Dim Ler_linha_de_registos As String
            Dim P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12 As Integer 'Para guardar a posição final de cada campo da linha de registo
            lst_nomes.Items.Clear() 'Limpar a ListBox
            Do Until SRRegisto_Requisitados.Peek = -1
                Ler_linha_de_registos = SRRegisto_Requisitados.ReadLine
                P1 = Ler_linha_de_registos.IndexOf(";") + 1 'Atibuição da posição do final de cada campo
                P2 = Ler_linha_de_registos.IndexOf(";", P1) + 1
                P3 = Ler_linha_de_registos.IndexOf(";", P2) + 1
                P4 = Ler_linha_de_registos.IndexOf(";", P3) + 1
                P5 = Ler_linha_de_registos.IndexOf(";", P4) + 1
                P6 = Ler_linha_de_registos.IndexOf(";", P5) + 1
                P7 = Ler_linha_de_registos.IndexOf(";", P6) + 1
                P8 = Ler_linha_de_registos.IndexOf(";", P7) + 1
                P9 = Ler_linha_de_registos.IndexOf(";", P8) + 1
                P10 = Ler_linha_de_registos.IndexOf(";", P9) + 1
                P11 = Ler_linha_de_registos.IndexOf(";", P10) + 1
                P12 = Ler_linha_de_registos.IndexOf(";", P11) + 1
                With bs
                    .nome = Ler_linha_de_registos.Substring(0, P1 - 1)
                    .morada = Ler_linha_de_registos.Substring(P1, P2 - P1 - 1)
                    .idade = Ler_linha_de_registos.Substring(P2, P3 - P2 - 1)
                    .datanasc = Ler_linha_de_registos.Substring(P3, P4 - P3 - 1)
                    .freg = Ler_linha_de_registos.Substring(P4, P5 - P4 - 1)
                    .motivo = Ler_linha_de_registos.Substring(P5, P6 - P5 - 1)
                    .sitsocial = Ler_linha_de_registos.Substring(P6, P7 - P6 - 1)
                    .dataatendimento = Ler_linha_de_registos.Substring(P7, P8 - P7 - 1)
                    .nragregado = Ler_linha_de_registos.Substring(P8, P9 - P8 - 1)
                    .rendimento = Ler_linha_de_registos.Substring(P9, P10 - P9 - 1)
                    .medico = Ler_linha_de_registos.Substring(P10, P11 - P10 - 1)
                    .apoios = Ler_linha_de_registos.Substring(P11)
                End With
                lst_nomes.Items.Add(bs.nome) 'Adicionar o nome do utente à ListBox
            Loop
            SRRegisto_Requisitados.Close()
        Catch ex As System.IO.FileNotFoundException 'Tratamento de erro na abertura do ficheiro
            mensagem = "O ficheiro de armazenamento de dados não foi encontrado" & vbNewLine & "Deseja criar um novo ficheiro?"
            titulo = "Ficheiro de Registos"
            botoes = MessageBoxButtons.YesNo
            icone = MessageBoxIcon.Question
            resposta = MessageBox.Show(mensagem, titulo, botoes, icone)
            If resposta = Windows.Forms.DialogResult.Yes Then
                Dim FSFicheiro_registos As New FileStream(caminho, FileMode.CreateNew)
                FSFicheiro_registos.Close()
            Else
                Me.Close()
            End If
        End Try
    End Sub
Reply With Quote