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? Если это так, вы должны посмотреть, как он анализирует файл. В противном случае вы можете перебирать список и вырезать кавычки или вырезать их в установщиках объекта или в любом другом месте, которое вы считаете подходящим для вашего решения.