我有这段代码:
//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()
相同。
答案 0 :(得分:0)
您需要在读取列值
时应用skipList<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)
您走在正确的轨道上,使用Take
和Skip
,然后将这些项目添加到各自的列表中,您可以调用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)));
}