使用FileHelpers编写包含字段换行的CSV文件

3
使用FileHelpers,我的C#应用程序读取CSV文件并处理数据。在处理完成后,数据会被写入另一个CSV文件。输出的CSV文件中某些字段内部有换行符,如何避免这种情况?

我认为你的问题不够清晰。通过“避免”,你是指删除吗?原始CSV中有换行符吗?换行符是实际的\n\r断行符,还是你用来查看CSV的编辑器只是软换行文件? - regretoverflow
3个回答

2

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;
    }
}

0

我使用了这里建议的Log4Net解决方案,它可以工作但不是最快的。话虽如此,我正在使用它来编写数十万行代码...


-2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接