我在文本文件上运行StreamReader
并将数据存储到ArrayList
。数据以“,”分隔,并存储约会日期和时间。有些患者只被看过两次,所以我不得在文本文件中添加任何数据,但仍然添加“,”以确保StreamReader
移动它。
然而,当它到达只有两次访问的Patient
时,它会停止读取文件并将数据存储到该点。我有try
/ catch
错误处理,告诉我何时停止读取文件。
例如
1, Name,DOB,12/12/2015,13/12/2015,,,,
2, Name,DOB,11/11/2015,,,,
它读取所有完全5次访问的患者,但是“,”之间没有数据的患者,它停止阅读。
我的阅读代码如下;
public static void LoadPatient(string filename)
{
try
{
StreamReader file = new StreamReader(filename); //System IO for StreamReader
while (!file.EndOfStream)
{
string line = file.ReadLine();
string[] fields = line.Split(",".ToCharArray());
int PID = int.Parse(fields[0]);
string pName = fields[1];
string NIN = fields[2];
DateTime pDOB = DateTime.Parse(fields[3]);
string pGender = fields[4];
DateTime Visit1 = DateTime.Parse(fields[5]);
int Duration1 = int.Parse(fields[6]);
DateTime Visit2 = DateTime.Parse(fields[7]);
int Duration2 = int.Parse(fields[8]);
DateTime Visit3 = DateTime.Parse(fields[9]);
int Duration3 = int.Parse(fields[10]);
DateTime Visit4 = DateTime.Parse(fields[11]);
int Duration4 = int.Parse(fields[12]);
DateTime Visit5 = DateTime.Parse(fields[13]);
int Duration5 = int.Parse(fields[14]);
Patient p = new Patient();
p.ID = PID;
p.Name = pName;
p.DOB = pDOB;
p.Gender = pGender;
p.NIN = NIN;
p.Visit1 = Visit1;
p.Duration1 = Duration1;
p.Visit2 = Visit2;
p.Duration2 = Duration2;
p.Visit3 = Visit3;
p.Duration3 = Duration3;
p.Visit4 = Visit4;
p.Duration4 = Duration4;
p.Visit5 = Visit5;
p.Duration5 = Duration5;
patientList.Add(p);
}
file.Close();
}
catch (Exception)
{
MessageBox.Show("Error loading Data file");
}
}
答案 0 :(得分:0)
我不会说它完全是"停止",它正在抛出异常。您有一个不检查索引的简单情况。您需要确保存在所有索引的值,并且可以将该值解析为所需的数据类型。您可以在数组上使用ElementAtOrDefault()
来获取null
而不是索引超出范围的异常。您可以使用TryParse
转换而不会抛出无效的强制转换异常。
将您的while
循环替换为:
while (!file.EndOfStream)
{
string line = file.ReadLine();
string[] fields = line.Split(",".ToCharArray());
Patient p = new Patient();
int id = 0;
DateTime dob = DateTime.MinValue;
DateTime visit1 = DateTime.MinValue;
int duration1 = 0;
//... etc. for each visit 2, 3, 4 and 5
int.TryParse(fields.ElementAtOrDefault(0), out id);
p.Name = fields.ElementAtOrDefault(1);
p.NIN = fields.ElementAtOrDefault(2);
DateTime.TryParse(fields.ElementAtOrDefault(3), out dob);
p.Gender = fields.ElementAtOrDefault(4);
DateTime.TryParse(fields.ElementAtOrDefault(5), out visit1);
int.TryParse(fields.ElementAtOrDefault(6), out duration1);
//... etc. for each visit 2, 3, 4 and 5
p.ID = id;
p.DOB = dob;
p.Visit1 = visit1;
p.Duration1 = duration1;
//... etc. for each visit 2, 3, 4 and 5
patientList.Add(p);
}