我正在使用 StreamReader 访问 CSV 文本文件并将所有行读取到 DataTable。
public static DataTable ConvertToDataTable(string filePath, int numberOfColumns)
{
DataTable tbl = new DataTable();
for (int col = 0; col < numberOfColumns; col++)
tbl.Columns.Add(new DataColumn("Column" + (col + 1).ToString()));
string line;
System.IO.StreamReader file = new StreamReader("C:/ProgramData/3CX/Instance1/Data/Logs/CDRLogs/cdr.log");
while ((line = file.ReadLine()) != null)
{
var cols = line.Split(',');
DataRow dr = tbl.NewRow();
for (int cIndex = 0; cIndex < cols.Length + 1; cIndex++)
{
dr[cIndex] = cols[cIndex];
}
tbl.Rows.Add(dr);
}
将所有 CSV 行添加到 DataTable 后,我想遍历这些行并根据条件删除不需要的行。
DataTable dt = ConvertToDataTable("C:/ProgramData/3CX/Instance1/Data/Logs/CDRLogs", 4);
for (int i = 0; i < dt.Rows.Count; i++)
{
string duration = dt.Rows[i][1].ToString();
if (duration == "")
{
dt.Rows[i].Delete();
}
Console.WriteLine(i.ToString() + dt.Rows[i][1].ToString());
}
这运行得很好,直到我到达最后一行,它似乎正在循环遍历不存在的一行。
有人知道为什么吗?任何和所有帮助将不胜感激!
最佳答案
您可以向后遍历行以保持索引不变。
for(int i = dt.Rows.Count - 1; i >= 0; i--)
{
dt.Rows[i].Delete();
}
关于c# - 使用 DataTable 时出现 IndexOutOfRange 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38914505/