繁体   English   中英

FileHelpers:如何在读取文件时处理引用的字段

[英]FileHelpers: How to handle quoted fields when reading file

这是我想要阅读的数据:

"Adam C. Emality","1Z620Y1V034826","14.40"
"Ethel Baeron","1Z620Y1V034604","15.19"
"Donna Lidt","1Z620Y1V034650","12.37"

然后在读完数据之后,我想在两个集合上执行一个Join,一个是数组,一个是列表 - 我的代码如下。 然而,在执行读取文件行之后,我的字符串被存储为"\\"Adam C. Emality\\"" "\\"1Z620Y1V034826\\"" "\\"14.40\\"" ......等等。为什么会发生这种情况? 我不想包括"而且我不知道它为什么要添加\\

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FileHelpers;
using Parser;

namespace Amazon_File
{
    class SpreadSheet
    {
        public void create(IEnumerable<SpreadList> list)
        {


            var steamengine = new FileHelperEngine<Records>();
            var records = steamengine.ReadFile(@"C:\Users\Danny\Documents\Visual Studio 2013\Projects\Amazon File\Amazon File\Daniel.csv");

            var spreadlist = from x in list
                             join y in records on x.Name equals y.Name
                             select new { y.Name, y.Track, y.worldPrice, x.ItemPrice, x.Quantity };



[DelimitedRecord(",")]
    public class Records
    {

        public string Name;

        public string Track;

        public string worldPrice;
    }   

public class SpreadList
    {
        public string Name { get; set; }
        public string Title { get; set; }
        public string ItemPrice { get; set; }
        public string Quantity { get; set; }
    }
}

您必须添加[FieldQuoted]以使库自动删除它们http://www.filehelpers.net/docs/html/T_FileHelpers_FieldQuotedAttribute.htm

[DelimitedRecord(",")]
public class Records
{
    [FieldQuoted]
    public string Name;

    [FieldQuoted]
    public string Track;

    [FieldQuoted]
    public string worldPrice;
}   

CSV解析器现在是.NET Framework的一部分。

添加对Microsoft.VisualBasic.dll的引用(在C#中工作正常,不要介意名称)

using (TextFieldParser parser = new TextFieldParser(@"c:\temp\test.csv"))
{
    parser.TextFieldType = FieldType.Delimited;
    parser.SetDelimiters(",");
    while (!parser.EndOfData) 
    {
        //Process row
        string[] fields = parser.ReadFields();
        foreach (string field in fields) 
        {
            //TODO: Process field
       }
    }
    parser.Close();
}

文档在这里

发生这种情况是因为您正在将文件作为扁平字符串读取。 该文件包含引号,因此它们也会被读入。这是标准的CSV格式。

斜杠在C#中用作转义字符。 所以“真的只是”。 您需要将引号替换为空,修剪引号,或使用CSV库正确读入文件。 就个人而言,我之前使用过CSVHelper并且很棒。 你可以从nuget包管理器获得它。

例如

var newstring = oldstring.Replace("\"", string.Empty);

你有权访问FileHelperEngine吗? 如果是这样,您应该看看它如何解析文件。 否则,您可以遍历列表并删除引号,或者在对象的setter或您认为适合您的解决方案的任何内容中删除它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM