2016-06-13 6 views
3

Мой недавний проект требует, чтобы я прочитал файл csv. Люди направляют меня к файловым работникам, так как «вы не должны изобретать игру». Однако документация действительно отстойная, я не могу найти способ справиться с дополнительными кавычками. Вот мой CSV:Дополнительные кавычки в файлообменниках

2734000585,IDR,04/04/2016,04/04/2016,0000000,1010,SETOR TUNAI,"783275305006511 VENDY",,"820,000.00","5,820,000.00" 

Я не тот, кто генерироваться выше CSV-файл, это от банка. Как вы можете видеть, их файл csv сосет и имеет серьезную проблему. Некоторые строки заключены в кавычки, некоторые - нет. Кроме того, значения валюты кодируются как строка.

Я сделал класс для него:

using System; 
using FileHelpers; 

[DelimitedRecord(",")] 

public class ImporBii 
{ 
    public long RekNum; 

    public string Currency; 

    [FieldConverter(ConverterKind.Date, "dd/MM/yyyy")] 
    public DateTime TransDate; 

    [FieldConverter(ConverterKind.Date, "dd/MM/yyyy")] 
    public DateTime RecordDate; 

    public string Unused1; 

    public int TransCode; 

    public string TransCodeStr; 

    public string Keterangan; 

    [FieldConverter(ConverterKind.Decimal, "#,##0.00")] 
    public decimal Debet; 

    [FieldConverter(ConverterKind.Decimal, "#,##0.00")] 
    public decimal Kredit; 

    [FieldConverter(ConverterKind.Decimal, "#,##0.00")] 
    public decimal Saldo; 
} 

Я думал filehelpers достаточно умен, чтобы увидеть кавычки само по себе, но результат полной катастрофы. Пожалуйста, помогите мне. :-(

+0

его трудно читать CSV (значения, разделенные запятыми) файл, который использует запятую в качестве разделителя чисел. Может вы используете файл excel вместо этого? –

+0

EPPlus, похоже, может открыть этот неприятный CSV просто отлично, но для этого мне нужно создать промежуточный файл Excel, который вообще не является изящным. Мне, вероятно, нужно изобретать колесо. –

ответ

1

Вам нужно добавить [FieldQuoted()] для полей, которые могут иметь котировка

[DelimitedRecord(",")] 
public class ImporBii 
{ 
    public long RekNum; 

    public string Currency; 

    [FieldConverter(ConverterKind.Date, "dd/MM/yyyy")] 
    public DateTime TransDate; 

    [FieldConverter(ConverterKind.Date, "dd/MM/yyyy")] 
    public DateTime RecordDate; 

    public string Unused1; 

    public int TransCode; 

    public string TransCodeStr; 

    [FieldQuoted('"', QuoteMode.OptionalForBoth)] 
    public string Keterangan; 

    [FieldConverter(ConverterKind.Decimal, ".")] 
    [FieldQuoted('"', QuoteMode.OptionalForBoth)] 
    public decimal? Drebet; 

    [FieldConverter(ConverterKind.Decimal, ".")] 
    [FieldQuoted('"', QuoteMode.OptionalForBoth)] 
    public decimal? Kredit; 

    [FieldConverter(ConverterKind.Decimal, ".")] 
    [FieldQuoted('"', QuoteMode.OptionalForBoth)] 
    public decimal? Saldo; 
} 
+0

Thanks Это работает. Я все еще не могу сделать Debet, Kredit и Saldo в десятичном формате. Кажется, что Filehelpers поддерживает только десятичный разделитель, он не может понять разделитель тысяч. –

+0

@ DanielWu Вы должны пойти Mu stRead docs в разделе преобразователей вы можете проверить десятичные и плавающие конвертеры http://www.filehelpers.net/mustread/ Я только что отредактировал ответ – MarcosMeli

+0

Используя ваш код, некоторые ошибки все еще возникали, потому что _Debet_ и _Kredit_ иногда являются пустой строкой, они заставляют Filehelpers не разбираться. Я смог исправить это самостоятельно, изменив «public decimal» на nullable «public decimal?». Большое спасибо человеку. Дело закрыто. :-D –