从文本文件/ ListBox中收集数据,并将干净的数据放入另一个ListBox中

时间:2017-05-24 01:17:56

标签: arrays vb.net listbox

我有两个列表框。我有一个文本文件,我已将原始数据导入列表框。

如何从已导入列表框的内容中提取某些数据,并将“干净数据”放入另一个列表框?

到目前为止,我似乎能够获得的是第一个框中的原始数据,然后第二个框中没有任何内容。

Imports System.IO

Public Class Form1
    Public Structure FinalData
        Dim LocationString As String 'Location
        Dim TypeString As String 'Cities or Regions
        Dim StateString As String 'State
        Dim FemalesInteger As Integer 'How many females
        Dim MalesInteger As Integer 'How many males
        Dim FemalePercentageInteger As Integer 'Female percentage
        Dim MalePercentageInteger As Integer 'Male percentage
        Dim TotalInteger As Integer 'Total population

    End Structure
    Private Sub BrowseButton_Click(sender As Object, e As EventArgs) Handles BrowseButton.Click
        'Selects the file name for import
        Dim FileNameLocationString As String

        'establish initial settings
        OpenFileDialog.Title = "Please Select a File"
        OpenFileDialog.InitialDirectory = Directory.GetCurrentDirectory()
        OpenFileDialog.Filter = "Text Files|*.txt*"

        'OpenFileDialog.ShowDialog()
        'First test to see if cancel has been selected
        If OpenFileDialog.ShowDialog = DialogResult.Cancel Then
            Exit Sub
        Else 'Selection has been made, save the file name to the text box
            FileNameLocationString = OpenFileDialog.FileName.ToString()
            If File.Exists(FileNameLocationString) Then
                FileNameLocationTextBox.Text = FileNameLocationString
            Else
                MessageBox.Show("File Does Not Exist")
            End If

        End If

    End Sub

    Private Sub ImportButton_Click(sender As Object, e As EventArgs) Handles ImportButton.Click
        Dim InRawDataStreamReader As StreamReader
        Dim RawDataLineString As String

        'Opens the file and imports data into list box
        Try
            'Check is file exists
            If File.Exists(FileNameLocationTextBox.Text) Then
                InRawDataStreamReader = New StreamReader(FileNameLocationTextBox.Text)

            Else
                MessageBox.Show("Please Select Valid File")
            End If

            'Read Lines from the File and Add to the List Box
            Do Until InRawDataStreamReader.Peek = -1
                RawDataLineString = InRawDataStreamReader.ReadLine
                RawDataListBox.Items.Add(RawDataLineString)
            Loop
            InRawDataStreamReader.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

    End Sub

    Private Sub LoadButton_Click(sender As Object, e As EventArgs) Handles LoadButton.Click
        'checks there is raw data loaded 
        If RawDataListBox.Items.Count = 0 Then
            MessageBox.Show("No Data Has Been Loaded")
            Exit Sub
        End If
        'Splits the raw data into the structure
        Try
            Dim counterInteger As Integer = 1
            Dim FinalDataStructure(FinalDataListBox.Items.Count) As FinalData
            Dim CleanDataString As String

            While counterInteger < FinalDataListBox.Items.Count
                'reads one row into a string
                Dim FinalDataLineString As String = FinalDataListBox.Items(counterInteger).ToString
                'Splits string by comma
                Dim FinalDataArrayString As String() = FinalDataLineString.Split(","c)

                With FinalDataStructure(counterInteger)
                    .LocationString = FinalDataArrayString(0)
                    .TypeString = FinalDataArrayString(1)
                    .StateString = FinalDataArrayString(2)
                    .FemalesInteger = Integer.Parse(FinalDataArrayString(3))
                    .MalesInteger = Integer.Parse(FinalDataArrayString(4))
                    'calculate the percentages and totals
                    .TotalInteger = .FemalesInteger + .MalesInteger
                    .FemalePercentageInteger = .FemalesInteger + .TotalInteger
                    .MalePercentageInteger = .MalesInteger + .TotalInteger


                End With
                CleanDataString = "Location" + FinalDataStructure(counterInteger).LocationString + ","
                CleanDataString += "Type" + FinalDataStructure(counterInteger).TypeString + ","
                CleanDataString += "State" + FinalDataStructure(counterInteger).StateString + ","
                CleanDataString += "Females" + FinalDataStructure(counterInteger).FemalesInteger.ToString + ","
                CleanDataString += "Males" + FinalDataStructure(counterInteger).MalesInteger.ToString + ","
                CleanDataString += "Female Percentage" + FinalDataStructure(counterInteger).FemalePercentageInteger.ToString + ","
                CleanDataString += "Male Percentage" + FinalDataStructure(counterInteger).MalePercentageInteger.ToString + ","
                CleanDataString += "Total Population" + FinalDataStructure(counterInteger).TotalInteger.ToString + ","
                'Add to list box
                FinalDataListBox.Items.Add(CleanDataString)

                counterInteger += 1
            End While
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
End Class

0 个答案:

没有答案