FileHelpers: как работать с полями в кавычках при чтении файла

Вот данные, которые я хочу прочитать:

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

Затем, прочитав данные, я хочу выполнить объединение двух коллекций, одного массива и одного списка - мой код приведен ниже. Однако после выполнения строки чтения файла мои строки хранятся так "\"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 ответа

Решение

Вы должны добавить [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# как escape-символ. Так что \"это действительно просто". Вам нужно либо заменить кавычки на пустые, обрезать кавычки, либо использовать библиотеку CSV для правильного чтения в файле. Лично я раньше использовал CSVHelper, и это было здорово. Вы можете получить его у менеджера пакетов nuget.

например

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

У вас есть доступ к FileHelperEngine? Если это так, вы должны посмотреть, как он анализирует файл. В противном случае вы можете перебирать список и вырезать кавычки или вырезать их в установщиках объекта или в любом другом месте, которое вы считаете подходящим для вашего решения.

Другие вопросы по тегам