Как прокомментировать или игнорировать строку в текстовом файле с помощью FileHelpers

IgnoreFirst(int) или IgnoreLast(int) игнорируют только фиксированное количество строк в качестве верхнего или нижнего колонтитула. Но мне нравится игнорировать или комментировать определенные строки в файле txt/csv. Например, как показано ниже (игнорировать некоторые абзацы или определенную строку в txt/csv):

############# This is a comment ##########
/* Some comment paragraph  
some more comments
last line of comment */
1,Foo,FooItem1
2,Foo,FooItem2
3,Goo,GooItem3
#4,Doo,DooItem4 <-- ignore. 
5,Eoo,EooItem5

Я читал о BeforeReadRecord и SkipThisRecord, которые потенциально могут решить эту проблему, но документация так же проста, как изображение, и не содержит ни объяснений, ни примеров.

введите здесь описание изображения


person KMC    schedule 14.08.2016    source источник


Ответы (1)


Вам нужно будет использовать что-то вроде этого для регистрации обработчика событий:

FileHelperEngine engine = new FileHelperEngine(typeof(Orders)); 
// set the event here
engine.BeforeReadRecord += new BeforeReadRecordHandler(BeforeEvent); 

а затем в обработчике вы можете проверить определенные условия для пропуска записи:

private void BeforeEvent(EngineBase engine, BeforeReadRecordEventArgs e)
{
    // skip any bad lines
    if (e.RecordLine.StartsWith("#") || e.RecordLine.StartsWith(" "))
        e.SkipThisRecord = true;
}

Может быть, вы можете просто проверить, начинается ли оно с целого числа, и пропустить, если это не так.

РЕДАКТИРОВАТЬ: вы также можете использовать интерфейс INotifyRead внутри записи следующим образом:

public class OrdersFixed
    :INotifyRead
{
    //...

    public void BeforeRead(BeforeReadEventArgs e)
    {
        if (e.RecordLine.StartsWith(" ") ||
           e.RecordLine.StartsWith("-"))
            e.SkipThisRecord = true;
    }

}
person sachin    schedule 14.08.2016