TCP メッセージをサーバーに送信し、それを取得するアプリケーションがあります。
返されるメッセージは次の形式です。
0,"120"1,"データ フィールド 1"2,"2401"3,"データ フィールド 3"1403-1,"複数出現 1"1403-2,"複数出現 2"99,""
したがって、基本的には、連結された一連のフィールドです。
各フィールドには、タグ、コンマ、値がこの順序で含まれています。
タグは数字、値は引用符で囲み、カンマで区切ります。
0,"120"
0 はタグ、120 は値です。
完全なメッセージは常に 0 フィールドで始まり、99"" フィールドで終わります。
複雑なことに、一部のタグには複数の値に分割されているため、ダッシュが付いています。
数字の順序は重要ではありません。
(参考までに、これは「Fedex Tagged Transaction」メッセージです)。
したがって、「完全な」メッセージ (つまり、0 フィールドと 99 フィールドがある) を検証する適切な方法を探しています。これは TCP メッセージからのものであるため、完全なメッセージをまだ受信していないことを説明する必要があると思います。
次に、それを分割して、必要なすべての値を取得します。
私が思いついた最善の方法は、解析が貧弱な正規表現であり、その後のクリーンアップです。その核心はこれです: (\d?\d?\d?\d?-?\d?\d,")分割する
string s = @"(\d?\d?\d?\d?-?\d?\d,"")";
string[] strArray = Regex.Split(receivedData, r);
Assert.AreEqual(14, strArray.Length, "Array length should be 14", since we have 7 fields.);
Dictionary<string, string> fields = new Dictionary<string, string>();
//Now put it into a dictionary which should be easier to work with than an array
for (int i = 0; i <= strArray.Length-2; i+=2)
{
fields.Add(strArray[i].Trim('"').Trim(','), strArray[i + 1].Trim('"'));
}
これは実際には機能しません。
引用符とコンマがたくさん残っていて、特に整形式ではないようです...
私は正規表現が苦手なので、必要なことをまとめることができません。
それが最善の方法であるかどうかさえわかりません。
どんな助けでも感謝します。