0

暗号化されたテキストを含むファイルをロードしています。カスタム文字テーブルを使用しています。外部ファイルからロードしたり、文字テーブルをコードに入れたりするにはどうすればよいですか?

ありがとうございました。

4

1 に答える 1

1

ファイルを調べて行を数えることから始めて、配列を割り当てることができます。ここでリストを使用することもできますが、配列の方がパフォーマンスがはるかに優れており、大量のアイテムをループする必要があるため (ファイル内のエンコードされた文字ごとに 1 回)、代わりに配列を使用する必要があると思います.

    int lines = 0;
    try 
    {
         using (StreamReader sr = new StreamReader("Encoding.txt")) 
        {
            string line;
            while ((line = sr.ReadLine()) != null) 
            {
                lines++;   
            }
        }
    }
    catch (Exception e) 
    {
        // Let the user know what went wrong.
        Console.WriteLine("The file could not be read:");
        Console.WriteLine(e.Message);
    }

次に、タプルの配列を割り当てます。

 Tuple<string, string> tuples = new Tuple<string, string>[lines];

その後、各キーと値のペアをタプルとして追加して、ファイルを再度ループします。

     try 
    {
         using (StreamReader sr = new StreamReader("Encoding.txt")) 
        {
            string line;
            for (int i =0; i < lines; i++) 
            {
                line = sr.Readline();
                if (!line.startsWith('#')) //ignore comments
                {
                     string[] tokens = line.Split('='); //split for key and value
                     foreach(string token in tokens)
                           token.Trim(' '); // remove whitespaces

                    tuples[i].Item1 = tokens[0];
                    tuples[i].Item2 = tokens[1];
                }   
            }
        }
    }
    catch (Exception e) 
    {
        // Let the user know what went wrong.
        Console.WriteLine("The file could not be read:");
        Console.WriteLine(e.Message);
    }

多くのコードを提供しましたが、これを機能させるには少し手間がかかるかもしれません。私はコンパイラで 2 番目のループを作成しませんでしたSystem.String.Trim。それらのことはあなたに任せます。これには、それを行うためのコアロジックがあります。代わりにリストを使用する場合は、 for ループ内のロジックを while ループに移動して、行を数えます。

読んでいるファイルをデコードして、この配列をループし、一致するまでキーまたは値を比較する必要があります。

linesもう1つ-タプルの配列には空のインデックスがいくつかあります(実際にはファイルにあるのに、配列の長さがありlines - comments + blankLinesます)。文字を照合しようとするときに、これらのインデックスにアクセスしていないことを確認するために、いくつかのチェックが必要になります。または、ファイルの読み取りを強化して、空白行やコメントをカウントしないようにするか、読み取り元のファイルからそれらの行を削除することもできます。最善の解決策は、ファイルの読み取りを強化することですが、それもまた最も手間のかかる作業です。

于 2012-11-15T02:18:51.950 に答える