首页 > 解决方案 > Vb.net 数据未递增并添加到列表中

问题描述

我在尝试创建一个程序时遇到问题,该程序将用户输入用于包含医疗记录的文本文件的位置。疾病和患者人数正在被添加到列表中。我遇到了一个问题,我的控制台在 XX 独特疾病和 YYY 患者遭遇的总数中都打印 0。我没有收到任何错误,只是输出不正确。

我相信我的问题出在我的 processData() 子程序中,但是我不确定它为什么打印回 0。此外,当我尝试添加一个计数器时,如何跟踪添加到列表中的重复疾病每次看到这种疾病。

疾病样本.txt

3710079 JUDITH CLOUTIER 2012-08-04 痉挛性结肠炎

3680080 弗吉尼亚杏仁 2012-07-25 慢性痰

3660068 ELLEN ENGLEHARDT 2012-04-06 百日咳

3810076 LILLIAN KEMMER 2014-07-04 坏血病

3630055 TERESA BANASZAK 2012-06-15 坏血病

输出:

共观察到 0 种独特的疾病。

共举办 0 场患者会诊

主要的():

' Global variables
Dim inputFile As String
Dim patientCounter = 0
Dim diseaseList As New List(Of String)
Dim dateList As New List(Of Date)

Sub Main()

    Dim reportFile As String
    Dim yn As String

    Console.ForegroundColor = ConsoleColor.Yellow
    Console.BackgroundColor = ConsoleColor.Blue
    Console.Title = "Medical Practice Data Analysis Application"
    Console.Clear()

    Console.WriteLine("Please enter the path and name of the file to process:")
    inputFile = Console.ReadLine

    If (File.Exists(inputFile)) Then

        ' Call to processData sub if input file exists
        processData()

        Console.WriteLine(vbCrLf & "Processing Completed...")
        Console.WriteLine(vbCrLf & "Please enter the path and name of the report file to generate")

        reportFile = Console.ReadLine
        File.Create(reportFile).Dispose()

        If (File.Exists(reportFile)) Then
            Console.WriteLine(vbCrLf & "Report File Generation Completed...")
        Else
            ' Call to sub to end program if directory does not exist
            closeProgram()
        End If

        ' Get user input to see report
        Console.WriteLine(vbCrLf & "Would you like to see the report file [Y/n]")
        yn = Console.ReadLine

        ' If user inputs "y" or "Y" then print report
        ' Otherwise close the program
        If (yn = "y" OrElse "Y") Then
            printFile()
        Else
            closeProgram()
        End If

    Else

        ' Call to sub to end program if file does not exist
        closeProgram()

    End If

    Console.ReadLine()

End Sub

处理数据子():

Public Sub processData()

    Dim lines As String() = File.ReadAllLines(inputFile)
    Dim tab
    Dim dates
    Dim diseaseCounter = 0

    For Each line As String In lines
        tab = line.Split(vbTab)
        patientCounter += 1
        dates = Date.Parse(line(3))
        dateList.Add(dates)
        'diseaseList.Add(line(4))
        Dim disease As New disease(line(4))
        diseaseList.Add(disease.ToString)
        'diseaseList(line(4)).

        For Each value In diseaseList
            'If value.Equals(line(4)) Then disease.counter += 1
        Next

    Next

    Dim uniqueDiseases As String() = diseaseList.Distinct().ToArray

End Sub

疾病分类

Class disease

    Dim counter As Integer = 0
    Dim name As String = ""

    Sub New(newDisease As String)
        name = newDisease
        counter = 0
    End Sub

End Class

打印文件()

Sub printFile()

    Dim muchoMedical As String = "MuchoMedical Health Center"
    Dim diseaseReport As String = "Disease Report For the Period " & "earliest_date" & " through " & "latest_date"

    Console.WriteLine(vbCrLf & muchoMedical.PadLeft(Console.WindowWidth / 2))
    Console.WriteLine(diseaseReport.PadLeft(Console.WindowWidth / 2))

    Console.WriteLine(vbCrLf & "There were a total of " & diseaseList.Count & " unique diseases observed")
    Console.WriteLine("A total of " & patientCounter & " patient encounters were held")

    Console.WriteLine(vbCrLf & "Relative Histogram of each disease")

    For Each disease As String In diseaseList
        Console.WriteLine(vbCrLf & disease & vbTab & " ")
    Next

End Sub

关闭程序()

Sub closeProgram()

    Console.WriteLine(vbCrLf & "File does not exist")
    Console.WriteLine("Press Enter to exit the program...")
    Console.ReadLine()

End Sub

标签: vb.net

解决方案


实际上,如果您正在做的最复杂的事情是计算疾病发生率,那么您实际上不需要疾病类别(您的疾病类别没有公共成员,所以我不知道您在那里做了什么)。您可以使用一点 LINQ 简单地完成所有操作。

' processing section
Dim lines = File.ReadAllLines(inputFile)
Dim splitLines = lines.Select(Function(l) l.Split({vbTab}, StringSplitOptions.RemoveEmptyEntries))
Dim diseaseGrouping = splitLines.GroupBy(Function(s) s(3))
Dim patients = splitLines.Select(Function(s) s(1))
Dim dates = splitLines.Select(Function(s) DateTime.Parse(s(2)))

' report section
Dim padAmount = CInt(Console.WindowWidth / 2)
Dim muchoMedical As String = "MuchoMedical Health Center"
Dim diseaseReport As String = $"Disease Report For the Period {dates.Min():d} through {dates.Max():d}"
Console.WriteLine()
Console.WriteLine(muchoMedical.PadLeft(padAmount))
Console.WriteLine(diseaseReport.PadLeft(padAmount))
Console.WriteLine()
Console.WriteLine($"There were a total of {diseaseGrouping.Count()} unique diseases observed.")
Console.WriteLine($"A total of {patients.Count()} patient encounters were held")
For Each diseaseAndCount In diseaseGrouping
    Console.WriteLine()
    Console.WriteLine($"{diseaseAndCount.Key}{vbTab}{diseaseAndCount.Count()}")
Next

我认为您的疾病名称在索引 3 中。您最初查看的是 4。也许你在名字和姓氏之间有一个标签?如果我错了就改。这可能适用于任何或所有指数。

输出:

MuchoMedical Health Center
疾病报告 2012 年 4 月 6 日至 2014 年 7 月 4 日期

间共观察到 4 种独特疾病。
共举行 5 次患者

会诊 痉挛性结肠炎 1

慢性痰 1

百日咳 1

坏血病 2


推荐阅读