Библиотека FileHelpers - добавление нескольких записей при преобразовании - PullRequest
0 голосов
/ 24 февраля 2011

Использование библиотеки FileHelpers для некоторых замечательных вещей в VB.NET.Разбор файлов с динамическими классами, созданными из шаблонов текстовых файлов.Одна вещь, которую я не могу найти: способ прочитать одну запись и определить, что это должно привести к генерации двух записей.
Текущий код:

Dim FromType As Type = Dynamic.ClassBuilder.ClassFromSourceFile (MyFilePath, MyDynamicTypeName, NetLanguage.VbNet)

Dim FromRecords () как объект FromRecords = FileHelpers.CommonEngine.ReadString (FromType, MyStringBuilder.ToString) * здесь 100 * * код может быть 1006 *проверить определенные значения

Dim engine As New FileTransformEngine (Of ITransformable (Of MyDestinationClass), MyDestinationClass)

'В идеале в следующей строке я хотел бы, чтобы он увидел определенные условия и мог генерироватьдве записи из одной строки источника.Dim PayRecords () As Object = engine.TransformRecords (FromRecords)

В качестве альтернативы, если есть способ реализовать функцию «TransransTo () преобразования ITransformable (Of ...» и я могу вернуть несколько записей, я мог бы поставитьлогика в определении динамического класса TransformTo () метод.

Мысли?

Вот пример моего исходного динамического класса:

Импортирует FileHelpers 'Никогда не забуду

_ Открытый класс NotInheritable MyDynamicClass Реализует ITransformable (Of MyDestinationClass) _ Публичное имя в виде строки

<FieldQuoted(""""c, QuoteMode.OptionalForRead, MultilineMode.AllowForRead)> _
Public KeyType As String

Public Hours As Double

Открытая функция TransformTo () как MyDestinationClass Реализует ITransformable (Of MyDestinationClass) .TransformTo Dim res как новый MyDestination 1025*

    res.ContactName = Name
    ' Here is where I would like to say... instead of Return res
    If KeyType="ABCD" Then
        Dim newRes as New MyDestinationClass
        newRes.Contactname = Name + " 2nd contact"

        Dim resArray() as MyDestinationClass
        redim resArray(1)
        resArray(0) = res
        resArray(1) = newRes
    End If
    Return resArray
    ' Or alternately refer to the engine, but it is not in scope for the dynamic record (is it?). Something like...
    engine.AppendToDestination(new MyDestinationClass(...))

Функция завершения Класс конца

1 Ответ

0 голосов
/ 24 февраля 2011

Я думаю, что главная проблема, с которой вы столкнетесь, заключается в том, что ITransformable.TransformTo () должен возвращать одно значение T.

Это вызывается в цикле, когда вы вызываете engine.TransformRecords (), где для каждой входной записи добавляется одна выходная запись.

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

...