アプローチ方法がわからないという問題があります。ここにいる人々が何か良いヒントを持っていることを願っています。
複数のログ (1 行に 1 つのログ) を含むテキスト ファイルを解析しています。フォーマットは次のようなものです。
Date Type Description
10/20 A LogTypeADescription
10/20 B LogTypeBDescription
10/20 C LogTypeCDescription
ここでは、ログには 3 つの「タイプ」(A、B、および C) があることがわかります。ログの種類に応じて、「説明」フィールドを異なる方法で解析します。
私の質問は、データ構造をどのように設定すればよいですか? 私はこのようなことをしたいと思います:
class Log
{
DateTime Date;
String Type;
String Description;
public Log(String line)
{
Parse(line);
}
}
class ALog : Log { }
class BLog : Log { }
class CLog : Log { }
現在、各派生クラスは、「説明」フィールドの解析方法に応じて独自の固有のプロパティを持つことができ、3 つの「コア」プロパティ (Date、Type、および Description) を維持します。
ログ ファイルから行を解析するまで、必要な (派生) ログの種類がわからないことを除けば、これまでのところすべて問題ありません。もちろん、行を解析してそれを理解することもできますが、解析コードを「ログ」コンストラクターに入れたいと思っています。私はこのようなことができたらいいのにと思います:
void Parse(String line)
{
String[] pieces = line.Split(' ');
this.Date = DateTime.Parse(pieces[0]);
this.Type = pieces[1];
this.Description = pieces[2];
if(this.Type == "A")
this = new ALog();
else if(this.Type == "B")
this = new BLog();
else if(this.Type == "C")
this = new CLog();
}
しかし、残念ながらこれは不可能だと思います。私はまだ試していませんが、これを行うと確信しています:
Log l = new Log(line);
if(l.Type == "A") l = new ALog();
違法であるか、最初に「ログ」を作成したときに行ったすべての解析を破棄します。
助言がありますか?