2

ブロックごとに比較する2kファイルがいくつかありますが、これらのブロックの識別方法は異なります。各ファイルを適切なブロックリストに分割し、各ブロックタイプを同じブロックタイプと比較するための最良の方法は何でしょうか。

ブロックタイプ:

  • HL *
  • EB *
  • SE *
  • GE *
  • IEA *

ファイルの例-読みやすくするためにスペースを追加しましたが、ファイルにスペースがありません。

    useless-Text-useless-Text-~
    useless-Text-useless-Text-useless-Text-~

    HL*Block1'HL'text-Block1'HL'text-Block1'HL'text-Block1'HL'text-~
    Block1'HL'text-Block1'HL'text-~

    HL*Block2'HL'text-Block2'HL'text-~
    Block2'HL'text-Block2'HL'text-~

    HL*Block3'HL'text-Block3'HL'text-Block3'HL'text-~
    Block3'HL'text-~

    EB*Block1'EB'Text-Block1'EB'Text-Block1'EB'Text-~
    Block1'EB'Text-Block1'EB'Text-~
    Block1'EB'Text-Block1'EB'Text-~

    EB*Block2'EB'Text-Block2'EB'Text-Block2'EB'Text-~
    Block2'EB'Text-Block2'EB'Text-~
    Block2'EB'Text-Block2'EB'Text-~

    EB*Block3'EB'Text-Block3'EB'Text-Block3'EB'Text-~
    Block3'EB'Text-Block3'EB'Text-~
    Block3'EB'Text-Block3'EB'Text-~

    EB*Block4'EB'Text-Block4'EB'Text-Block4'EB'Text-~
    Block4'EB'Text-Block4'EB'Text-~
    Block4'EB'Text-Block4'EB'Text-~

    EB*Block_N'EB'Text-Block_N'EB'Text-Block_N'EB'Text-~
    Block_N'EB'Text-Block_N'EB'Text-~
    Block_N'EB'Text-Block_N'EB'Text-~

    SE*Block1'SE'Text-Block1'SE'Text-~
    Block1'SE'Text-~

    GE*Block1'GE'Text-~
    IEA*Block1'IEA'Text-~
4

2 に答える 2

1

パターンを識別または把握できる場合、最善の方法は正規表現を使用することです。周りには多くのチュートリアルがあります。 Parse Text Files With Regular Expressionsをご覧ください。

于 2012-01-20T16:31:17.663 に答える
0

ボトムアップからテキストファイルを解析し、それらのセクションをリストに追加しました

        List<String> listHL_Base = new List<String>();
        List<String> listEB_Base = new List<String>();
        List<String> listSE_Base = new List<String>();

        StreamReader streamReader = new StreamReader(baseFile);
        string textBASE = streamReader.ReadToEnd().Trim();
        streamReader.Close();

        //we start scanning file from the button to up)           
        string[] textBASE_Step1 = Regex.Split(textBASE, "GE\\*");
        textBASE = textBASE_Step1[0];

        string[] textBASE_Step2 = Regex.Split(textBASE, "SE\\*");
        for (int i = 1; i < textBASE_Step2.Length; i++) //creating list with SE values
        {
            listSE_Base.Add(textBASE_Step2[i]);
        }

        textBASE = textBASE_Step2[0]; //remainder (beginning) of the file, without GE, or SE. Only  EB's and HL's Left
        string[] textBASE_Step3 = Regex.Split(textBASE, "EB\\*");
        for (int i = 1; i < textBASE_Step3.Length; i++) //creating list with EB values
        {
            listEB_Base.Add(textBASE_Step3[i]);
        }
于 2012-01-25T19:24:26.220 に答える