[英]Get only first column values from CSV rows using CSVHelper
我正在尝试解析CSV文件并提取每行中的第一个字符串,或提取在MS Excel中布局的第一列。 我将CsvParser
与Read()
方法一起使用,该方法将string[]
返回到row
变量。 问题是,它返回每个单个值,所以我的输出看起来像这样:
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();
}
}
您将在此处显式将每个值打印到控制台:
foreach (var date in row)
{
Console.WriteLine(date);
}
这个foreach循环遍历当前行的所有元素并打印它们。
将此循环替换为仅将打印第一个元素(索引为0)的循环:
Console.WriteLine(row[0]);
当然,如果该行为空,这可能会失败,因此您也需要检查一下。
您使用的CsvHelper库要求您在构建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方法将输入行相应地分隔为分隔符后,返回一个字符串数组。 此时,您只需要引用数组的第一个元素,而无需任何循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.