Cobolシステムで生成されたシーケンシャルファイルを処理するシステムを開発中です。現在、データを取得するためにいくつかの部分文字列を使用してデータ処理を行っていますが、プロセスのいくつかのサブストリングを作成するよりも、ファイル...今ではシーケンシャルファイルの効率的な処理C#
が、私は基本的に行います。
using (var sr = new StreamReader("file.txt"))
{
String line = "";
while(!sr.EndOfStream)
{
line = sr.ReadLine();
switch(line[0])
{
case '0':
processType0(line);
break;
case '1':
processType1(line);
break;
case '2':
processType2(line);
break;
case '9':
processType9(line);
break;
}
}
}
private void processType0(string line)
{
type = line.Substring(0, 15);
name = line.Substring(15, 30);
//... and more 20 substrings
}
private void processType1(string line)
{
// 45 substrings...
}
ファイルサイズは50メガバイトと150メガバイトの間で変動することがあります... ファイルの小さな例:
01ARQUIVO01CIVDSUQK 00000000000000999999NAME NAME NAME NAME 892DATAFILE 200616 KY0000853 000001
1000000000000000000000000999904202589ESMSS59365 00000010000000000000026171900000000002 0 01000000000001071600000099740150000000001N020516000000000000000000000000000000000000000000000000000000000000009800000000000000909999-AAAAAAAAAAAAAAAAAAAAAAAAA 00000000 000002
1000000000000000000000000861504202589ENJNS63198 00000010000000000000036171300000000002 0 01000000000001071600000081362920000000001N020516000000000000000000000000000000000000000000000000000000000000009800000000000000909999-BBBBBBBBBBBBBBBBBBBBBBBBBB 00000000 000003
9 000004
効率的ですか?コードの実行速度が速いのはなぜですか?あるいは、コードを書く実際のプロセスはより効率的ですか? –
これを試したことはありませんが、これを試してみてください。http://stackoverflow.com/a/20803/1105235 – rpeshkov
正規表現は実際にはじまるまで一時的な文字列を生成しないため、手動で分割するよりも高速です*ロット*あなたが望むマッチを抽出する。これは、大きなファイルを解析する場合、割り当てとガベージコレクションを劇的に減らすため、大きな利点です。また、特定のグループに名前を割り当てることもできます(例: ''(?。{15})(?。{14}) '等 –