2023/05/14

CsvHelperで可変項目数のレコード出力

 ターゲット用外部指数出力は以前ダビジェネ予想をターゲットで表示させる為に作ったりしてたので今回のアプリにも機能を載せてます。その際にはCsvHelperなしで作ったりしてたツールのイメージそのままで作りこんだので馬単位でした。これだと単純に1レコードに3項目固定なんです。レースID、指数、順位ですね。まあ、これ指数だけってのもありなんですが、なんとなく順位も入れてました。今回はまあ、他のアプリでも多いレース単位にしようかと思い、まあ、それが原因で躓いてました。

アイビー先生に何度もお願いして試しましたがイメージとしては可変な部分はList<>にすれば良いって事で取り掛かったんです。

internal class TG_Uma
{
    public int Shisu { get; set; }
    public int Juni { get; set; }
}

internal class TG
{
    public string RaceID { get; set; }
    public List<TG_Uma> Umas { get; set; }
}

てな感じで定義しておいて出力しても何故かってかそれが本来の動作なのかは別として、このTGクラスを

List<TG> TGs = new List<TG>();

として出力に使おうと、データ準備して

TG rc = new TG();
TG.RaceID = "202301050501";
for (int i=0; i<Tousu;i++)
{
    TG_Uma uma = new TG_Uma();
    uma.Shisu = shisu[i];
    uma.Juni = chaku[i];
    rc.Umas.Add(uma);
}
TGs.Add(rc)

1日分のレース分用意出来たら

var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    HasHeaderRecord = false
};
using (StreamWriter sw = new StreamWriter(this.TG_Folder + @"¥" + CurKaisaibi + ".csv", false))
using (var csv = new CsvWriter(sw, config))
{
    csv.WriteRecords(TGs);
}

で行けるものと試すが"202301050501,プロセス名+TG_Umas,プロセス名+TG_Umas,プロセス名+TG_Umas,..."てな内容に。Listが全然上手く出力出来ないじゃんってね😨 まあ、今回はそのListが別クラスってのが悪かったのか

internal class TG
{
    public string RaceID { get; set; }
    public List<int> Umas { get; set; }
}

にして

rc.Umas.Add(shisu[i]);
rc.Umas.Add(chaku[i]);

って感じで入れ込んで出力する事で思った出力にたどり着けました。これ、もし、実数の指数と順位だったらどうすれば良かったのか...

0 件のコメント:

コメントを投稿