CSV 分析和输出
CSV Analysis and Output
我目前正在尝试分析 CSV 文件,然后仅输出满足特定条件的项目。我正在使用 CSVHelper 库。
到目前为止,我可以导入文件,也可以导出文件,...有点。
出于某种原因,条目数量增加了三倍。如前所述,它成功地遍历值一次,然后连续两次输出所有值。喜欢:
A
B
C
D
A
A
B
B
C
C
D
D
这就是问题 1。为什么?
问题2:如何让它过滤并只输出符合条件的数据?第2栏是年龄,年龄必须在62岁以上。
以下是我目前的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Diagnostics;
using CsvHelper;
using System.Collections;
namespace firstdraft
{
class Program
{
public String Name { get; set; }
public String Age { get; set; }
private static void Main(string[] args)
{
using (var sr = new StreamReader(@"people.csv"))
{
using (var sw = new StreamWriter(@"results.csv"))
{
var reader = new CsvReader(sr);
var writer = new CsvWriter(sw);
IEnumerable<Program> records = reader.GetRecords<Program>().ToList();
writer.WriteRecords(records);
foreach (Program record in records)
{
writer.WriteRecord(record);
writer.WriteField(record.Name);
writer.WriteField(record.Age);
writer.NextRecord();
}
}
}
}
}
}
您正在写入记录 3 次。首先,将它们全部写入(A B C D):
writer.WriteRecords(records);
接下来,您将在遍历记录时写入每条记录:
writer.WriteRecord(record);
然后你再写一遍,一列一列:
writer.WriteField(record.Name);
writer.WriteField(record.Age);
writer.NextRecord();
你想在那里实现什么目标?
对于过滤,您可能希望通过 LINQ 执行如下操作:
IEnumerable<Program> records = reader.GetRecords<Program>().Where(r => r.Age >= 62).ToList();
writer.WriteRecords(records);
// No futher code
假设它能按预期工作多一点?
我目前正在尝试分析 CSV 文件,然后仅输出满足特定条件的项目。我正在使用 CSVHelper 库。
到目前为止,我可以导入文件,也可以导出文件,...有点。
出于某种原因,条目数量增加了三倍。如前所述,它成功地遍历值一次,然后连续两次输出所有值。喜欢:
A
B
C
D
A
A
B
B
C
C
D
D
这就是问题 1。为什么?
问题2:如何让它过滤并只输出符合条件的数据?第2栏是年龄,年龄必须在62岁以上。
以下是我目前的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Diagnostics;
using CsvHelper;
using System.Collections;
namespace firstdraft
{
class Program
{
public String Name { get; set; }
public String Age { get; set; }
private static void Main(string[] args)
{
using (var sr = new StreamReader(@"people.csv"))
{
using (var sw = new StreamWriter(@"results.csv"))
{
var reader = new CsvReader(sr);
var writer = new CsvWriter(sw);
IEnumerable<Program> records = reader.GetRecords<Program>().ToList();
writer.WriteRecords(records);
foreach (Program record in records)
{
writer.WriteRecord(record);
writer.WriteField(record.Name);
writer.WriteField(record.Age);
writer.NextRecord();
}
}
}
}
}
}
您正在写入记录 3 次。首先,将它们全部写入(A B C D):
writer.WriteRecords(records);
接下来,您将在遍历记录时写入每条记录:
writer.WriteRecord(record);
然后你再写一遍,一列一列:
writer.WriteField(record.Name);
writer.WriteField(record.Age);
writer.NextRecord();
你想在那里实现什么目标?
对于过滤,您可能希望通过 LINQ 执行如下操作:
IEnumerable<Program> records = reader.GetRecords<Program>().Where(r => r.Age >= 62).ToList();
writer.WriteRecords(records);
// No futher code
假设它能按预期工作多一点?