0

我目前正在尝试分析 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();
                    }
                }
            }
        }
    }
}
4

1 回答 1

1

你写了 3 次记录。首先,把它们全部写出来(ABCD):

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

假设这更符合预期?

于 2015-05-20T22:59:58.397 回答