vb.net - 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
解决方案
实际上,如果您正在做的最复杂的事情是计算疾病发生率,那么您实际上不需要疾病类别(您的疾病类别没有公共成员,所以我不知道您在那里做了什么)。您可以使用一点 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
推荐阅读
- php - 如何将 $bad = 数组条件添加到 die 函数?
- javascript - 在生产中调用销毁时,不会从 Mongo 存储中删除 Express 会话数据
- javascript - 在 JavaScript 构造函数中访问私有成员
- macos - Freeradius:Open Directory 的问题,没有 rlm_opendirectory.* 存在
- distribution - 如何计算相关高斯变量之和的参数?
- ruby - 如何使用 RSpec 证明特定实例不再存在?
- python - MyClass.attr VS type(self).attr VS 单独的@classmethod
- mongodb - mongodb 中的 findOneAndUpdate 只返回更新的值
- c++ - 具有数据成员语法的零成本属性
- excel - Excel 问题:如何在嵌套的 if 语句中实现索引匹配?