使用 CSVHelper 仅从 CSV 行中获取第一列值
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();
}
}
您需要 "read" 记录并传递您想要的 "mapping" 的参数。按索引或名称。
在上面详述的每个部分,请参阅此处:
您在这里明确地将每个值打印到控制台:
foreach (var date in row)
{
Console.WriteLine(date);
}
这个 foreach 循环遍历当前行的所有元素并打印它们。
用这个替换循环,它只会打印第一个元素(索引 0):
Console.WriteLine(row[0]);
当然,如果该行为空,这可能会失败,因此您也需要检查一下。
您正在使用的 CsvHelper library 要求您在构建 CsvParse class 实例时传递 CsvConfiguration 实例。这对于让库理解并正确解析你的行很重要
要给出的最重要的是分隔符 属性 的值。换句话说,用于将一个字段与下一个字段分开的字符。
您应该查看您的 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 方法 returns 根据您的分隔符拆分输入行后的字符串数组。此时你只需要引用数组的第一个元素,不需要任何循环。
我正在尝试解析 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();
}
}
您需要 "read" 记录并传递您想要的 "mapping" 的参数。按索引或名称。
在上面详述的每个部分,请参阅此处:
您在这里明确地将每个值打印到控制台:
foreach (var date in row)
{
Console.WriteLine(date);
}
这个 foreach 循环遍历当前行的所有元素并打印它们。
用这个替换循环,它只会打印第一个元素(索引 0):
Console.WriteLine(row[0]);
当然,如果该行为空,这可能会失败,因此您也需要检查一下。
您正在使用的 CsvHelper library 要求您在构建 CsvParse class 实例时传递 CsvConfiguration 实例。这对于让库理解并正确解析你的行很重要
要给出的最重要的是分隔符 属性 的值。换句话说,用于将一个字段与下一个字段分开的字符。
您应该查看您的 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 方法 returns 根据您的分隔符拆分输入行后的字符串数组。此时你只需要引用数组的第一个元素,不需要任何循环。