如何通过CsvHelper将csv中的引号传递到写入的文件中

问题描述 投票:0回答:1

[请帮助。有关于CsvHelper库的问题。我使用动态记录,并希望按原样传递双引号,或者将双引号更改为单引号可能更好。但是库始终会删除引用。

var csvHelperConfig = new Configuration();
var csv = new CsvReader(reader, csvHelperConfig);
var record = csv.GetRecord<dynamic>() as IDictionary<string, object>;



LANGUAGE,TITLE,CODE,UPDATED
"EN","English, English, English",1,"01.01.2000"
"DE","German",2,"01.01.2000"

谢谢您的回答!

csvhelper
1个回答
0
投票

不是很漂亮,但我相信它能满足您的要求。

public static void Main(string[] args)
{
    using (MemoryStream stream = new MemoryStream())
    using (StreamWriter writer = new StreamWriter(stream))
    using (StreamReader reader = new StreamReader(stream))
    using (CsvReader csv = new CsvReader(reader, CultureInfo.InvariantCulture))
    {
        writer.WriteLine("LANGUAGE,TITLE,CODE,UPDATED");
        writer.WriteLine("\"EN\",\"English, English, English\",1,\"01.01.2000\"");
        writer.WriteLine("\"DE\",\"German\",2,\"01.01.2000\"");
        writer.Flush();
        stream.Position = 0;

        var records = new List<dynamic>();

        csv.Read();
        csv.ReadHeader();

        while (csv.Read())
        {
            var startIndex = 0;
            dynamic dynamicObject = new ExpandoObject();

            for (int i = 0; i < csv.Context.HeaderRecord.Length; i++)
            {
                var item = csv.GetField<string>(i);

                var foundIndex = csv.Context.RawRecord.IndexOf(item, startIndex);

                startIndex = foundIndex;

                if (csv.Context.RawRecord[foundIndex - 1] == '"')
                {
                    item = '"' + item + '"';
                }

                IDictionary<string, object> underlyingObject = dynamicObject;

                underlyingObject.Add(csv.Context.HeaderRecord[i], item);
            }

            records.Add(dynamicObject);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.