使用CSVHelper准备字符串和后缀字符串以进行记录

本文关键字:字符串 记录 后缀 CSVHelper 使用 | 更新日期: 2023-09-27 18:29:58

我需要使用CSVHelper将实体导出到CSV文件。我做了一个试验性的工作,但我必须手动写每个字段。我想要的是写一个以"H"或"D"为前缀的记录,并用一个空格结束每一行。我的演示模型:

PersonId    FirstName   LastName    DateOfBirth
1           Randy       Smith       1968-08-31 
2           Zachary     Smith       2002-01-10 
3           Angie       Smith       1969-11-20 
4           Khelzie     Smith       1996-07-27 
AutoId  Year    Make        Model                   OwnerId
1       2000    Toyota      4Runner                 1
2       1995    Ford        Mustang                 1
3       2014    Chevrolet   Corvette Stingray Coupe 2
4       2014    Volkswagen  Beetle Coupe            4
5       1980    Ford        F-150                   2
6       1968    Chevrolet   Camaro                  3
7       2000    Tonka       Truck                   3
8       1993    Honda       Accord                  4

进入CSV文件如下:

H 1 Randy       Smith       8/31/1968 
D 1 2000        Toyota      4Runner 
D 2 1995        Ford        Mustang 
H 2 Zachary     Smith       1/10/2002 
D 3 2014        Chevy       Corevett 
D 5 1980        Ford        F-150
H 3 Angie       Smith       11/20/1969 
D 6 1968        Chevrolet   Camaro  
D 7 2000        Tonka       Truck 
H 4 Khelzie     Smith       7/27/1996 
D 4 2014        Volkswagen  Beetle Coupe 

这是我终于开始工作的代码:

        StreamWriter textWriter = File.CreateText(fileName);
        var csv = new CsvWriter(textWriter);
        csv.Configuration.Delimiter = delimiter;
        csv.Configuration.QuoteNoFields = true;
        // This will skip those people who don't own a vehicle
        foreach (Person person in people.Where(person => person.Vehicles.Count > 0))
        {
            // The letter 'H' must prefix every Header line
            csv.WriteField((@"H " + person.PersonId));
            csv.WriteField(person.FirstName);
            csv.WriteField(person.LastName);
            // Headers lines must end with a single space.
            csv.WriteField((person.DateOfBirth.ToShortDateString() + " "));
            csv.NextRecord();
            foreach (Automobile auto in person.Vehicles)
            {
                // The letter 'D' must prefix every Detail line
                csv.WriteField((@"D " + auto.AutoId));
                csv.WriteField(auto.Year);
                csv.WriteField(auto.Make);
                // Details lines must end with a single space.
                csv.WriteField((auto.Model + " "));
                csv.NextRecord();
            }
        }

真正的表每个有大约70个字段。

使用CSVHelper准备字符串和后缀字符串以进行记录

对于那些头骨和我一样厚的人,这里有一个解决方案:

    foreach (TransactionHeader header in headers)
    {
        csv.WriteField("H");
        csv.WriteRecord(header);
        csv.WriteField(" ");
        csv.NextRecord();
        foreach (TransactionDetail detail in header.TransactionDetail)
        {
            csv.WriteField("D");
            csv.WriteRecord(detail);
            csv.WriteField(" ");
            csv.NextRecord();
         }             
     }

感谢所有人,他们认为这一点很明显,并耐心地等待我把头撞在桌子上足够多次,然后自己解决这个问题。