FileHelpers を nuget からダウンロードしましたが、この機能が存在しないのか、適切なバージョンを持っていないのか、それとも何なのかわかりません。
私は周りを見回しており、FileHelpers にはフィールドの順序を指定する属性があるようです。
これをダウンロードしましたが、ナゲットを探していたときに別のバージョンがあるようです
FileHelpers を nuget からダウンロードしましたが、この機能が存在しないのか、適切なバージョンを持っていないのか、それとも何なのかわかりません。
私は周りを見回しており、FileHelpers にはフィールドの順序を指定する属性があるようです。
これをダウンロードしましたが、ナゲットを探していたときに別のバージョンがあるようです
まず、FileHelpers 2.0 には FieldOrder 属性がありません。FileHelpers 2.9.9 (NuGet からも入手可能) には、属性が存在しますが、任意のフィールドに指定する場合は、すべてのフィールドに指定する必要があります。ただし、フィールドの順序はフォーマットによって定義されるため、通常は属性を使用する必要はありません。
FileHelpers を使用する場合、フォーマットを記述するクラスを提供します。
[DelimitedRecord("|")]
public class Order
{
// First field
public int OrderID;
// Second field
public string CustomerID;
// Third field
[FieldConverter(ConverterKind.Date, "ddMMyyyy")]
public DateTime OrderDate;
}
これは、縦棒で区切られた 3 つのフィールドを持つ形式を表しています。よろしければフォーマットの仕様です。定義したら、それを使用してインポートおよびエクスポートできます。
FileHelperEngine engine = new FileHelperEngine(typeof(Order));
// To read use:
Order[] orders = engine.ReadFile("FileIn.txt") as Order[];
// To write use:
engine.WriteFile("FileOut.txt", orders);
したがって、フィールドを別の順序で並べたい場合は、Order
クラスを変更する必要があります。
本当に必要な場合は (FileHelpers 2.9.9 で)、次のようにフィールドの順序を変更できます。
[DelimitedRecord("|")]
public class Order
{
// Third field
[FieldOrder(3)]
public int OrderID;
// Second field
[FieldOrder(2)]
public string CustomerID;
// First field
[FieldOrder(1)]
[FieldConverter(ConverterKind.Date, "ddMMyyyy")]
public DateTime OrderDate;
}
ただし、属性の使用を避け、FieldOrder
代わりにクラス内のフィールドの順序を変更する方がクリーンです。
一方、実行時にフィールドの順序を指定する必要がある場合は、ランタイム レコードOrder
を使用してクラスをビルドする必要があります。あなたが使用することができますstring
Type orderType = ClassBuilder.ClassFromString(stringContainingOrderClassInCSharp);
FileHelperEngine engine = new FileHelperEngine(orderType);
Order[] orders = engine.ReadFile("FileIn.txt") as Order[];
または、次を使用できますClassBuilder
。
DelimitedClassBuilder cb = new DelimitedClassBuilder("Order");
// First field
cb.AddField("OrderID", typeof(int));
// Second field
cb.AddField("CustomerID", 8, typeof(string));
// Third field
cb.AddField("OrderDate", typeof(DateTime));
cb.LastField.Converter.Kind = ConverterKind.Date;
cb.LastField.Converter.Arg1 = "ddMMyyyy";
engine = new FileHelperEngine(cb.CreateRecordClass());
Order[] orders = engine.ReadFile("FileIn.txt") as Order[];
必要な順序でフィールドを追加するために、好きなロジックを使用できます。