FileHelpers:如何在读取文件

时间:2015-08-19 21:10:42

标签: c# linq readfile filehelpers

这是我想要阅读的数据:

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

3 个答案:

答案 0 :(得分:8)

您必须添加[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;
}   

答案 1 :(得分:2)

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

文档为Here

答案 2 :(得分:1)

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

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

e.g。

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

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