C#:将变量结构化CSV文件读入带有行计数器的数据表中

时间:2017-09-19 10:22:46

标签: c# csv datatable streamreader

我正在尝试开发一个工具,该工具将获取CSV文件并将其导入数据表,数据表中的第一列是行计数器。

CSV文件来自不同的客户,因此具有不同的结构。有些人有一个标题行;有些人有几个标题行;有些没有标题行。它们也有不同的列。

到目前为止,我有以下代码。

ThatModel.objects.filter(
    last_datetime__lte=now + datetime.timedelta(seconds=1)*F("interval"))

这很有效,因为它创建列标题(C1,C2 ......根据csv文件中有多少)然后写入行,但是我想在列中添加一列添加行时,最左边有一个行号。在代码中,您可以看到我有一个注释掉的部分创建了一个自动编号列,但我完全不知道如何将行写入数据表。如果我取消注释该部分,我会收到错误,因为csv文件中的第一列尝试写入int字段。我知道你可以指定每一行中的哪个字段可以进入哪一列,但这在这里没有用,因为此时列未知。我只需要能够读取任何文件,无论结构如何,但使用行计数器。

希望这是有道理的。

1 个答案:

答案 0 :(得分:1)

您在问题中写道,取消注释添加第一列的代码会导致错误。这是因为你的循环:它从0开始,但第0列是你手动添加的。因此,您只需要在循环中跳过它,从1开始。但是,必须从第0个元素处理源数组。

所以解决方案是:

首先,取消注释行添加代码。

然后,在循环中,引入一个偏移量以保持第一列不变:

for (int i = 0; i < headers.Length; i++)
{
    dr[i + 1] = rows[i];
}