我正在尝试解析CSV文件并提取每行中的第一个字符串,或者在MS Excel中显示的第一列。
我使用CsvParser
Read()
方法将string[]
返回到row
变量。
问题是,它返回每一个值,所以我的out对于每一行都是这样的:
20070330 00:00 // This is the value I want to reference
0.9312
0.9352
0.9298
0.9343
如何在不放入计数器的情况下仅引用文件中这些位置的值来跳过临时值?
using (TextReader reader = File.OpenText(folder))
{
var datesInCsv = new List<string>();
var parsedCsv = new CsvParser(reader);
while (true)
{
var row = parsedCsv.Read();
if (row.IsNullOrEmpty())
{
break;
}
foreach (var date in row)
{
Console.WriteLine(date);
}
Console.ReadLine();
}
}
答案 0 :(得分:1)
您在此处明确将每个值打印到控制台:
foreach (var date in row)
{
Console.WriteLine(date);
}
这个foreach循环遍历当前行的所有elemtens并打印它们。
用这个替换循环,它只打印第一个元素(索引0):
Console.WriteLine(row[0]);
当然,如果该行为空,这可能会失败,因此您也需要检查它。
答案 1 :(得分:1)
您正在使用的CsvHelper library要求在构建CsvParse类的实例时传递CsvConfiguration实例。让图书馆理解并正确解析您的行
非常重要最重要的是Delimiter属性的值。换句话说,用于将一个字段与下一个字段分开的字符 您应该查看您的CSV文件并在下面输入适当的值 (对于此示例,我使用了分号,但根据您的文件进行了更改)
看着你的代码,我认为配置SkipEmptyRecords可以用来简化代码。
using (TextReader reader = File.OpenText(folder))
{
var datesInCsv = new List<string>();
CsvConfiguration config = new CsvConfiguration();
config.Delimiter = ";";
config.SkipEmptyRecords = true;
var parsedCsv = new CsvParser(reader, config);
string[] row = null;
while ((row = parsedCsv.Read()) != null)
{
// This IsNullOrEmpty doesn't exist according
// to Intellisense and the compiler.
// if(row.IsNullOrEmpty)
// At this point the row is an array of strings where the first
// element is the value you are searching for. No need of loops
Console.WriteLine(row[0]);
Console.ReadLine();
}
}
在将输入行与分隔符相对分割后,CsvParser实例的Read方法返回一个字符串数组。此时,您只需要引用数组的第一个元素而不需要任何循环。
答案 2 :(得分:0)