C# 在c中csv文件的第二个位置添加列

C# 在c中csv文件的第二个位置添加列,c#,csv,C#,Csv,我有很多不同的CSV文件,其中包含包括标题在内的数据 我不知道如何在第二个位置添加新列 我可以用每行的空值填充新单元格,但新列位于第一个位置 请参阅附件图像:新列必须位于列IDATA之后 有人能帮我吗 提前谢谢 下面是我的代码 output = System.Web.HttpContext.Current.Server.MapPath("/public/target.csv"); string[] CSVDump = File.ReadAllLines(output); List<Lis

我有很多不同的CSV文件,其中包含包括标题在内的数据

我不知道如何在第二个位置添加新列

我可以用每行的空值填充新单元格,但新列位于第一个位置

请参阅附件图像:新列必须位于列IDATA之后

有人能帮我吗

提前谢谢

下面是我的代码

output = System.Web.HttpContext.Current.Server.MapPath("/public/target.csv");

string[] CSVDump = File.ReadAllLines(output);
List<List<string>> CSV = CSVDump.Select(x => x.Split('|').ToList()).ToList();
for (int i = 0; i < CSV.Count; i++)
{
    CSV[i].Insert(0, i == 0 ? "Headername" : "Filename");
}
File.WriteAllLines(output, CSV.Select(x => string.Join("|", x)));

只需更改Insert语句中的索引:

CSV[i].Insert(2, i == 0 ? "Headername" : "Filename");
使用所需位置的变量,完整代码为:

// define the desired position here:
int posNewColumn = 2;

output = System.Web.HttpContext.Current.Server.MapPath("/public/target.csv");

string[] CSVDump = File.ReadAllLines(output);
List<List<string>> CSV = CSVDump.Select(x => x.Split('|').ToList()).ToList();
for (int i = 0; i < CSV.Count; i++)
{
    if( CSV[i].Count > posNewColumn)
    {
        CSV[i].Insert(posNewColumn , i == 0 ? "Headername" : "Filename");
    }
    else 
    {
    // append the new data at the end if the existing line is too short.
    // You may want to do nothing instead or fill the appropriate number
    // of empty cells before adding.
        CSV[i].Add(i == 0 ? "Headername" : "Filename");
    }
}
File.WriteAllLines(output, CSV.Select(x => string.Join("|", x)));
这应该可以做到

output = System.Web.HttpContext.Current.Server.MapPath("/public/target.csv");

string[] CSVDump = File.ReadAllLines(output);

var CSV = CSVDump.Select(x => x.Split('|').ToList());

var newInserted = CSV.Aggregate(new List<List<String>>(), (l, i) =>
{
    i.Insert(1, (l.Count == 0) ? "header" : "fileName");
    l.Add(i);
    return l;
});

File.WriteAllLines(output, newInserted.Select(x => string.Join("|", x)));

我能想到的是;将csv转换为数据表。一旦数据存在于DataTable中,您就可以在您想要的任何位置添加列。那么,您想要插入哪一列呢?您能告诉我们它前后应该是什么样子吗?@wkl请参阅我的第一个问题中的Edit 02。您能解释一下哪个csv表在前面,哪个在后面,第三个是什么吗?@wkl:我需要在列IDINTA和DDMMYYY HHMMSSTH之间的csv文件中添加新的列文件名。谢谢您的帮助。请参见我的第一篇文章中的编辑01question@AntonioMailtraq如果您得到一个错误,索引必须在列表的限制范围内,我假设您的csv中有一行比其他行短。你应该检查一下。如果这是一项要求,请将其添加到问题中。您的csv中可能有一行比其他行短,但有数百行。当行不够长时,我们会将其追加到行的末尾。谢谢,但在您的代码中,新列不会被添加。请让我检查一下,它不会出现在新插入的变量中?oops现在应该得到修复。谢谢,新列不会被添加。您是否要查看CSV变量以查找新列?
output = System.Web.HttpContext.Current.Server.MapPath("/public/target.csv");

string[] CSVDump = File.ReadAllLines(output);

var CSV = CSVDump.Select(x => x.Split('|').ToList());

var newInserted = CSV.Aggregate(new List<List<String>>(), (l, i) =>
{
    i.Insert(1, (l.Count == 0) ? "header" : "fileName");
    l.Add(i);
    return l;
});

File.WriteAllLines(output, newInserted.Select(x => string.Join("|", x)));