У меня проблема с чтением CSV-файла с помощью библиотеки FileHelpers, например:
У меня есть CSV-файл с некоторыми строками, если первая строка также имеет символ «символ», а вторая - «символ», то вторая строка будет последним столбцом первой строки после чтения.
Если в моем CSV-файле есть несколько строк, все строки имеют одну строку, а одна из них имеет символ "", то эта строка будет игнорироваться.
Действительно нужна помощь!
Вот мой класс
[DelimitedRecord(",")]
[IgnoreEmptyLines()]
[IgnoreFirst()]
public sealed class MyClass
{
[FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.AllowForBoth)]
[FieldTrim(TrimMode.Both)]
public String NAME;
[FieldQuoted('"', QuoteMode.OptionalForBoth, MultilineMode.AllowForBoth)]
[FieldTrim(TrimMode.Both)]
public String NOTES;
}
И мой прочитанный код файла:
OpenFileDialog ofd = new OpenFileDialog
{
Filter = "CSV files (*.csv)|*.csv",
FilterIndex = 0,
CheckFileExists = true,
RestoreDirectory = true
};
if (ofd.ShowDialog(this) == DialogResult.OK)
{
if (AppSetting.IsFileLocked(ofd.FileName))
{
//file in is use
MessageUtility.ShowNotify(LanguagesMessage.GetLanguagesMessage("USING"));
return;
}
else
{
FileInfo f = new FileInfo(ofd.FileName);
if (f.Extension != ".csv")
{
MessageUtility.ShowNotify(MsgFormatFile);
return;
}
}
var _curr_encoding = SimpleHelpers.FileEncoding.DetectFileEncoding(ofd.FileName);
if (_curr_encoding == null)
{
MessageUtility.ShowNotify(MsgFormatFile);
return;
}
if (_curr_encoding.CodePage == _encoding_export_import.CodePage)
{
_curr_encoding = _encoding_export_import;
}
else
{
_curr_encoding = Encoding.GetEncoding(_curr_encoding.CodePage);
}
var engine = new FileHelperEngine<MyClass>(_curr_encoding);
engine.ErrorManager.ErrorMode = ErrorMode.SaveAndContinue;
engine.Encoding = _curr_encoding;
engine.AfterReadRecord += Engine_AfterReadRecord;
List<MyClass> lstDataImports = engine.ReadFile(ofd.FileName).ToList();
if (engine.ErrorManager.ErrorCount > 0)
{
MessageUtility.ShowNotify(MsgFormatFile);
engine.ErrorManager.SaveErrors("Errors.txt");
return;
}
else
{
if (lstDataImports.Count() < 1)
{
MessageUtility.ShowNotify(LanguagesMessage.GetLanguagesMessage_SM("MY_ERROR"));
return;
}
}
if (!ValidateHeader(engine.HeaderText))
{
return;
}
}