2016-08-14 6 views
0

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

############# 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, которые потенциально могли бы решить эту проблему, но в документации так просто, как изображения, и не имеет никакого объяснения и не приводит пример.

enter image description here

ответ

5

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

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; 
} 

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

EDIT: Вы также можете использовать INotifyRead интерфейс внутри записи, как это:

public class OrdersFixed 
    :INotifyRead 
{ 
    //... 

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

} 

 Смежные вопросы

  • Нет связанных вопросов^_^