gpt4 book ai didi

c# - 在 C# 中使用 streamReader 类读取具有动态列数的文本文件

转载 作者:太空宇宙 更新时间:2023-11-03 16:21:34 24 4
gpt4 key购买 nike

 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;

enter image description here

此代码面临的问题是,如果输入日志文件的列数超过 12 列或更多,我将得到一个索引超出范围异常

我是否可以重构代码以使其处理具有任意数量列的任何日志文件。要处理的日志文件具有不同数量的列,我唯一的保证是日期列在所有情况下始终是最后一列。

最佳答案

在不使用任何列表的情况下,我有一种完全不同的方法。请原谅编码,这只是一个快速测试。

首先,我将使用 DataTable。

public DataTable dt = new DataTable();

我从每一行读入的数据将存储在一个String类型的数组中。

public string[] data;

我们需要做的第一件事是确定我们的数据文件中有多少列。下面我计算实例数,然后生成一个新的所需列数。

public void addcolumns()
{

using (StreamReader reader = new StreamReader(@"C:\DataColumnTest.txt"))
{
string s = reader.ReadLine();
string[] col = s.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);


foreach (var a in col)
{
dt.Columns.Add(new DataColumn());
}
}
}

接下来,我们的 DataTable 需要在何处添加行。我们的行数据中的列数应始终与我们的 DataTable 中的列数匹配,并且在最初这样做时它应该每次都有效:-

Public void addRows()
{
var sr = new StreamReader(@"C:\DataColumnTest.txt");

while (!sr.EndOfStream)
{
string s = sr.ReadLine();
if (!String.IsNullOrEmpty(s.Trim()))
{
data = null;
data = s.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
dt.Rows.Add(data);
}

}

sr.Close();
}

我为这个快速示例所做的全部工作是在 Load 表单中调用这些方法,然后为 DataGrid 添加数据源:-

 private void Form1_Load(object sender, EventArgs e)
{

addcolumns();
addRows();
dataGridView1.DataSource = dt;
}

我知道会有更简洁的方法来执行此操作,但它确实有效,这与我看到的其他发布示例不同。

希望对您有所帮助。

*** 编辑 ****

这是我使用的数据以及结果。

enter image description here

enter image description here

关于c# - 在 C# 中使用 streamReader 类读取具有动态列数的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13741302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com