FileHelpers:读取文件时如何处理带引号的字段

本文关键字:处理 字段 读取 文件 何处理 FileHelpers | 更新日期: 2023-09-27 18:08:43

下面是我要读取的数据:

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

FileHelpers:读取文件时如何处理带引号的字段

您必须添加[fieldquotes]以使库自动删除它们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框架的一部分。

添加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#中用作转义字符。所以"is really just"。您需要将引号替换为空,修剪引号,或者使用CSV库来正确读取文件。就我个人而言,我以前使用过CSVHelper,它非常棒。你可以从nuget包管理器中获取。

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

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