я пытаюсь прочитать текстовый файл в визуальных основах, но я не могу сохранить детали в массиве, он дает ошибки - PullRequest
0 голосов
/ 05 октября 2019
Dim EmpId(100) As String
Dim Lastname(100) As String
Dim firstname(100) As String
Dim hrs(100) As Integer
Dim min(100) As Integer
Dim counter As Integer
Dim i As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    'declare variables  
    Dim result As DialogResult 'what did the user choose in the open dialog (open or cancel)
    Dim strFileName As String 'store file path of the selected file
    Dim strRecord As String
    Dim sreStreamReader As IO.StreamReader
    Dim strFieldValues(100) As String 'to store extracted field values.

    Try
        result = filebrowser.ShowDialog
        If result = Windows.Forms.DialogResult.OK Then
            strFileName = filebrowser.FileName
            'create a StreamReader object by opening the file for input
            sreStreamReader = IO.File.OpenText(strFileName)

            counter = 0
            i = 0
            Do While sreStreamReader.Peek() <> -1
                strRecord = sreStreamReader.ReadLine()
                strFieldValues = strRecord.Split(",")
                EmpId(counter) = strFieldValues(i) & firstname(counter) = strFieldValues(i) & Lastname(counter) = strFieldValues(i) _
                & hrs(counter) = strFieldValues(i) & min(counter) = strFieldValues(i)
                counter = counter + 1
                i = i + 1
            Loop
            Dim j As Integer
            For j = 0 To j < counter Step +1
                Label1.Text = EmpId(j) & firstname(j) & Lastname(j) & hrs(j) & min(j)
            Next





        sreStreamReader.Close()
        End If
    Catch exFile As IO.FileNotFoundException
        'processed when the file cannot be found            
        MessageBox.Show("Cannot locate the file.", _
            "FileopenDialog", MessageBoxButtons.OK, _
            MessageBoxIcon.Information)
        '  Catch ex As Exception
        'handles any other errors            
        '   MessageBox.Show(ex.Message, "FileopenDialog", _
        '    MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Try

1 Ответ

0 голосов
/ 05 октября 2019

Я предполагаю, что ваш текстовый файл будет выглядеть так, если его открыть в блокноте.

1,Smith,Mary,7,45
2,Jones,Bill, 8,15
3,Mathew,Mark,6, 20
4,Luke,John,9,30

Обратите внимание, что пробелов нет. Если есть пробелы, вам может понадобиться использовать .Trim в строках.

У меня есть класс с именем Employee. В классе есть пользовательский конструктор (Sub New), который устанавливает все соответствующие свойства. Значения будут получены из текстового файла, как вы увидите через минуту.

Затем в событии нажатия кнопки создается список типа Employee.

Dim EmpList As New List(Of Employee)

Можетхранить объекты типа Employee. Я использую `List (0f T) вместо массива, потому что мне не нужно заранее знать, сколько строк в файле.

Метод .ReadAllLines объекта File возвращаетмассив, содержащий каждую строку в файле как элемент массива. Переберите массив строк, вызывая .Split в каждой строке, которая возвращает массив, предположительно содержащий каждое из интересующих вас полей. Каждый элемент отправляется в конструктор Employee, и полученный в результате новый Employee добавляется в список. Если в файле есть посторонние пробелы, вам может понадобиться вызвать .Trim, чтобы избавиться от них

Наконец, я добавил DataGridView в форму во время разработки. Задайте для свойства .DataSource список сотрудников, и ваши данные отобразятся в сетке с заголовками.

Public Class Employee
    Public Property ID As String
    Public Property LasName As String
    Public Property FirstName As String
    Public Property Hours As Integer
    Public Property Minutes As Integer

    Public Sub New(iden As String, lname As String, fname As String, hr As Integer, mn As Integer)
        ID = iden
        LasName = lname
        FirstName = fname
        Hours = hr
        Minutes = mn
    End Sub
End Class

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim EmpList As New List(Of Employee)

    Try
        Dim result = OpenFileDialog1.ShowDialog
        If Not result = Windows.Forms.DialogResult.OK Then
            MessageBox.Show("No file selected")
        End If
        Dim strFileName = OpenFileDialog1.FileName

        Dim lines = IO.File.ReadAllLines(strFileName)
        For Each line In lines
            Dim strFieldValues = line.Split(","c)
            EmpList.Add(New Employee(strFieldValues(0), strFieldValues(1), strFieldValues(2), CInt(strFieldValues(3)), CInt(strFieldValues(4))))
        Next
        DataGridView1.DataSource = EmpList
    Catch exFile As IO.FileNotFoundException
        MessageBox.Show("Cannot locate the file.", "FileopenDialog", MessageBoxButtons.OK, MessageBoxIcon.Information)
    End Try
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...