【发布时间】:2012-12-06 10:11:44
【问题描述】:
public class myRows
{
public decimal Col1 { get; set; }
public decimal Col2 { get; set; }
public decimal Col3 { get; set; }
public decimal Col4 { get; set; }
public decimal Col5 { get; set; }
public decimal Col6 { get; set; }
public string myDateTimeCol { get; set; }
public myRows(string str)
{
var fields = str.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
Col1 = Convert.ToDecimal(fields[0]);
Col2 = Convert.ToDecimal(fields[1]);
Col3 = Convert.ToDecimal(fields[2]);
Col4 = Convert.ToDecimal(fields[3]);
Col5 = Convert.ToDecimal(fields[4]);
Col6 = Convert.ToDecimal(fields[5]);
myDateTimeCol = string.Format("{0} {1} {2} {3} {4}", fields[6], fields[7], fields[8], fields[9], fields[10]);
}
}
然后我像阅读我的日志文件
var rows = new List<myRows>();
var sr = new StreamReader(txtFileToImport.Text);
while (!sr.EndOfStream)
{
string s = sr.ReadLine();
if (!String.IsNullOrEmpty(s.Trim()))
{
rows.Add(new myRows(s));
}
}
sr.Close();
dataGridView_preView.DataSource = rows;
这段代码面临的问题是,如果输入的 LogFile 有超过 12 列或更多列,我会得到 index out of range 异常。
有没有我可以重构代码以使其处理具有任意数量列的任何 LogFile。要处理的日志文件有不同数量的列,我唯一的保证是日期列在所有情况下始终是最后一列。
【问题讨论】:
-
您可以将它们读入
List<string>,而不是将行读入类中,因此整个表存储在List<List<string>>中 -
您是否也负责创建日志文件?如果没有 - 有任何规格吗?
-
@mbx,我不负责创建日志文件。日志文件由监控发电机的专有软件系统创建。
-
IC,然后我将使用 List
并结合到最后五个字段为 DateTime.TryParse。如果您已经有基于 CSV 的日志处理,那么简单的转换和使用已经测试过的代码也是一种选择。由于您没有任何规范,您所能做的就是收集任何新样本来自己构建/重新设计一个。然后这些选择样本将成为您测试用例的一部分。
标签: c# winforms streamreader