C# FileHelper在字段中使用换行符编写CSV

C# FileHelper在字段中使用换行符编写CSV,c#,winforms,csv,line-breaks,filehelpers,C#,Winforms,Csv,Line Breaks,Filehelpers,使用FileHelpers,我的C#应用程序读取CSV,然后处理数据。处理后,数据将写入另一个CSV。输出CSV在某些字段中有换行符。如何避免这些呢?CSV本质上是基于行的。因此,数据中不能有真正的换行符。您可以使用文字“\n”(在文件中以\n的形式表示)对其进行编码,然后在以后解析文件时,需要将文字替换为实际的换行符。FileHelpers在写入CSV之前不会自动删除换行符。这是一件容易的事。这里有一个有效的例子 [DelimitedRecord(",")] public partial cl

使用FileHelpers,我的C#应用程序读取CSV,然后处理数据。处理后,数据将写入另一个CSV。输出CSV在某些字段中有换行符。如何避免这些呢?

CSV本质上是基于行的。因此,数据中不能有真正的换行符。您可以使用文字“\n”(在文件中以\n的形式表示)对其进行编码,然后在以后解析文件时,需要将文字替换为实际的换行符。

FileHelpers在写入CSV之前不会自动删除换行符。这是一件容易的事。这里有一个有效的例子

[DelimitedRecord(",")]
public partial class MyClass
{
    [FieldConverter(typeof(MyStringConverter))]
    [FieldQuoted('"')]
    public String Field1;
    [FieldConverter(typeof(MyStringConverter))]
    [FieldQuoted('"')]
    public String Field2;
}      

class Program
{
    private static void Main(string[] args)
    {
        var engine = new FileHelperEngine<MyClass>();
        var myClass1 = new MyClass();
        myClass1.Field1 = "Dear Sir,\n Blah blah blah";
        myClass1.Field2 = "Yours sincerely,\n George";
        var output = engine.WriteString(new MyClass[]{myClass1});
        Assert.AreEqual(@"""Dear Sir, Blah blah blah"",""Yours sincerely, George""" + Environment.NewLine, output);
    }
}

public class MyStringConverter : ConverterBase
{
    public override string FieldToString(object from)
    {
        string output = base.FieldToString(from);
        // remove any line breaks before outputting
        output = output.Replace("\n", "");
        output = output.Replace("\r", "");
        return output;
    }

    public override object StringToField(string from)
    {
        return from;
    }
}
[分隔符记录(“,”)]
公共部分类MyClass
{
[FieldConverter(类型(MyStringConverter))]
[字段引用(“”)]
公共字符串字段1;
[FieldConverter(类型(MyStringConverter))]
[字段引用(“”)]
公共字符串字段2;
}      
班级计划
{
私有静态void Main(字符串[]args)
{
var engine=new FileHelperEngine();
var myClass1=新的MyClass();
myClass1.Field1=“亲爱的先生,\n诸如此类”;
myClass1.Field2=“您诚挚的,\n乔治”;
var output=engine.WriteString(新的MyClass[]{myClass1});
Assert.AreEqual(@“亲爱的先生,诸如此类”,“您诚挚的,乔治”,“Environment.NewLine,output”);
}
}
公共类MyStringConverter:ConverterBase
{
公共重写字符串FieldToString(对象来自)
{
字符串输出=base.FieldToString(from);
//在输出之前删除任何换行符
输出=输出。替换(“\n”和“);
输出=输出。替换(“\r”和“);
返回输出;
}
公共覆盖对象StringToField(字符串来自)
{
返乡;
}
}

我使用了建议的Log4Net解决方案,它可以工作,但不是最快的。也就是说,我用它写了数十万行…

我认为你的问题不够清楚。你说的避免,是指移除?换行符是否在原始CSV中?换行符是实际的\n\r换行符,还是您正在查看的CSV编辑器只是软包装文件?