如何将csv文件拆分为多个列表

时间:2018-01-30 13:54:40

标签: c# list csv

我有这段代码:

//new List
List<string> lines = new List<string>();
List<string> lines2 = new List<string>();

// read and write data to list 
for (int i = 0; i < fileName.Length; i++)
{
    string file = @"read\" + Path.GetFileName(fileName[i]);
    // load rows to list.
    lines = File.ReadLines(file).ToList();
    foreach (string line in lines)
    {
        // Variablen für lines
        string[] entries = line.Split(';');
        int length = entries.Length;
    }
}

我能够将我的csv文件中的所有行读入一个列表,但我想将第6列之后的csv文件拆分为第二个列表。我怎么做?

我已经厌倦了lines.Take(6).ToList();,但如果我没弄错的话,这只会读取前6行。与Skip()相同。

2 个答案:

答案 0 :(得分:0)

您需要在读取列值

时应用skip
List<string> entries = line.Split(';').Skip(6).ToList();

那就是说有很多可以使用的库是围绕读取CSV文件而构建的。我建议在重新发明轮子之前先搜索一下NuGet。

如果你想要2个列表

string[] entries = line.Split(';');
List<string> entriesFirst = entries.Take(6).ToList();
List<string> entriesSecond = entries.Skip(6).ToList();

答案 1 :(得分:0)

您走在正确的轨道上,使用TakeSkip,然后将这些项目添加到各自的列表中,您可以调用AddRange方法添加一组项目一次:

var filePath = @"c:\public\temp\temp.txt";

var firstSixColumns = new List<string>();
var restOfColumns = new List<string>();

foreach(var fileLine in File.ReadLines(filePath))
{
    var fileLineParts = fileLine.Split(';');
    firstSixColumns.AddRange(fileLineParts.Take(6));  // Add the first 6 entries
    restOfColumns.AddRange(fileLineParts.Skip(6));    // Add the rest of the entries
}

另一方面,如果您尝试将csv行拆分为两组列,而不进一步拆分(因此firstSixLines中的每一行代表一行六列),那么你在添加列之前,可以使用string.Join再次将列拼接回来:

foreach(var fileLine in File.ReadLines(filePath))
{
    var fileLineParts = fileLine.Split(';');

    // Join the items before adding them to their respective lists
    firstSixColumns.Add(string.Join(";", fileLineParts.Take(6)));
    restOfColumns.Add(string.Join(";", fileLineParts.Skip(6)));
}