質問に回答がない場合は編集
ストリームリーダーからコンソールへの1つの基準(最初の3つの数値は110、210、または310で、3つの異なるグループを提供)に基づいてフィルター処理された出力があります。最初の答えは私が与えた特定の例の文字通りの解決策だったので、質問を編集しました。私が使用している実際の文字列は、450ASCII文字の長さです。これを修正するためにサンプル文字列を調整しました。サンプルデータで機能するものはすべて、私が持っているものでも機能します。
したがって、私が本当に必要としているのは、最初の3つの数字に応じて、事前に指定された既知の場所から3文字を取得できるものです(210の場合は、文字スロット14〜16になり、それをサブカテゴリとして使用して、すべてのエントリを合計します。文字スロット33-37で、それらを出力します)。
文字列の例:
210!!!!123244AAA75AWEHUIHJUAS!!!11111
210???1223455ABC76554HJHSDFQ????22222
210--32455623ABCFFCDGHDSFAS-----33333
310 1232451 2ABC34 GAERsASDFASDG1234523 44444
310 1234a354GDSAASDR 3 AAA GF234523653hfdssdgSDASDF 11111
310 12378HJK1234 ABC HJHJK123462 ASDHDFS FA REW 22222
4101111ASDJF 1ABCASF D1234 ASGF66666
4102222QW12362ER2 ABC 23459876HJKXC 11111
41033333T123 1RWE AAA ASDFHJKRTR WQ 22222
この最後に、私の出力は次のようになります。
210 AAA 11111
210 ABC 55555
310 ABC 66666
310 AAA 11111
410 ABC 77777
410 AAA 22222
ABC、AAAなどは常に同じ開始番号の同じ場所にありますが、開始番号ごとに異なります。
同様に、合計される金額の場所も、各開始番号ごとに同じ場所にのみあります。
既存のコード(以下)にstring.splitを追加しようとしましたが、うまくいきませんでした。
// Read in a file line-by-line, and store in a List.
List<string> list = new List<string>();
using (StreamReader reader = new StreamReader("file.dat"))
{
string line;
while ((line = reader.ReadLine()) != null)
{
var beginning = line.Substring(0, 3);
if (beginning != "210" && beginning != "310" && beginning != "410")
continue;
list.Add(line); // Add to list.
Console.WriteLine(line); // Write to console.
}
}