FileHelpers меняют RecordLine перед чтением записи

Я читаю огромный файл, используя библиотеку FileHelpers. Я хотел бы изменить RecordLine перед чтением записи, как показано ниже.

   static void engine_BeforeReadRecord(object sender, BeforeReadRecordEventArgs<object> e)
    {
        if (e.RecordLine.Contains(@"\|"))
            e.RecordLine.Replace(@"\|", "");
    }

В их онлайн-справке также говорится, что можно изменить

Note: if you change the RecordLine the engine use the changed value
This can be useful in some cases but you must be carefull

Но это не работает. Есть ли какие-либо проблемы в том, как я это делаю?


person Rajan R.G    schedule 05.12.2011    source источник


Ответы (3)


С последней версией библиотеки вы можете сделать это

http://www.filehelpers.net/download/

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

http://www.filehelpers.net/example/EventsAndNotification/INotifyRead/

person Marcos Meli    schedule 05.12.2011
comment
Спасибо, Маркос, я скачаю последнюю версию и попробую с заданием. - person Rajan R.G; 06.12.2011
comment
Последняя версия с ответом Джоэла работает отлично. Спасибо за замечательную библиотеку, которую вы предоставили. - person Rajan R.G; 06.12.2011

Предполагая, что RecordLine является строкой, вы вызываете функцию .Replace(), но эта функция не изменяет встроенную строку, а возвращает новую строку. Вам нужно где-то присвоить результат:

if (e.RecordLine.Contains(@"\|"))
    e.RecordLine = e.RecordLine.Replace(@"\|", "");
person Joel Coehoorn    schedule 05.12.2011
comment
Спасибо, Джоэл, я пробовал это раньше, и это показало ошибку, что e.RecordLine доступен только для чтения. - person Rajan R.G; 06.12.2011
comment
@RajanR.G В этом случае вам нужно использовать как мой ответ, так и ответ Маркоса Мели. Кроме того, нет необходимости в операторе if - если строка не содержит текста, вызов замены не будет иметь никакого эффекта. - person Joel Coehoorn; 06.12.2011
comment
Спасибо Джоэл, последняя версия с вашим разрешением работает отлично. - person Rajan R.G; 06.12.2011

Я предполагаю, что вы устанавливаете событие?

engine.BeforeReadRecord += engine_BeforeReadRecord;
person Derek Beattie    schedule 05.12.2011