2

私は、テキスト ファイルを解析し、それらから関連情報を取得して後で作業する必要があるプロジェクトに取り組んでいます。

関連データを含むテキスト行に一致する正規表現を作成しましたが、行から関連情報を取得して新しいテキスト ファイルにダンプする方法がわかりません。

解析しているテキスト ファイルのサンプルを次に示します。

[  5] local 10.170.150.195 port 42507 connected with 184.72.63.139 port 5001
[  4] local 10.170.150.195 port 42506 connected with 184.72.63.139 port 500
[  1]  0.0- 1.0 sec  0.00 KBytes  50.00 Kbits/sec

このサンプルでは、​​関連する情報は「0.0- 1.0 秒」および 50.00 Kbits/秒です。

これが私の正規表現です:

[  [0-6]]  0.0- 1.0 sec  0.00 KBytes  [0-9]*.[0-9][0-9] Kbits/sec

これが些細な質問である場合は申し訳ありませんが、私はJavaにかなり慣れていません...これは3日目です...すべての助けをいただければ幸いです。

ありがとうございました

4

3 に答える 3

2

括弧を使用して必要なグループを取得し、それらのグループを出力に出力します。

    Pattern pattern = Pattern.compile("\\[  [0-6]\\]  (0.0- 1.0 sec)  0.00 KBytes  ([0-9]*.[0-9][0-9] Kbits/sec)");

    String line = "[  1]  0.0- 1.0 sec  0.00 KBytes  50.00 Kbits/sec";
    Matcher matcher = pattern.matcher(line);
    if (matcher.matches()) {
        System.out.println(matcher.group(1) + "\t" + matcher.group(2));
    }

ここでpatternobject は正規表現です。すべての行で再利用します。ファイルの行ごとに、新しい行を作成してmatcher渡します。次に、行が正規表現に一致した場合、キャプチャ グループを出力します。

于 2012-10-13T05:52:49.293 に答える
0
  1. FileReader/BufferedReader を使用して入力ファイルを開きます。

    FileReader fr = new FileReader("input.txt");
    BufferedReader br = new BufferedReader(fr);
    
  2. FileWriter/BufferedWriter を使用して出力ファイルを開きます

    FileWriter fw = new FileWriter("output.txt");
    BufferedWriter bw = new BufferedWriter(fw);
    
  3. while loopBuffered Reader を使用して一度に 1 行ずつ文字列に読み込む

    String lineString = null;
    while((lineString= br.readLine())!= null){
          //....
     }
    
  4. while loopで、読み取った文字列を正規表現と照合します

    Pattern pattern = 
    Pattern.compile("\\[  [0-6]\\]  (0.0- 1.0 sec)  0.00 KBytes  ([0-9]*.[0-9][0-9] Kbits/sec)");
    Matcher matcher = pattern.matcher(lineString);
    if(matcher .matches()){
       //....
    }
    
  5. 一致が見つかった場合は、Buffered writer を使用して出力ファイルに文字列を書き込みます

        bw.write(lineString);
    
  6. 開いているリーダー/ライターをすべて閉じます。

        bw.close();
        fw.close();
        br.close();
        fr.close();
    

編集: 以下のサンプル コード スタイル 1:

    String regex = "\\[  [0-6]\\]  (0.0- 1.0 sec)  0.00 KBytes  ([0-9]*.[0-9][0-9] Kbits/sec)";
    FileReader fr = new FileReader("input.txt");
    BufferedReader br = new BufferedReader(fr);

    FileWriter fw = new FileWriter("output.txt");
    BufferedWriter bw = new BufferedWriter(fw);

    String lineString = null;
    while((lineString= br.readLine())!= null && 
                  !lineString.equals("Starting Test 2: Iperf TCP East....")){
        if(lineString.matches(regex)){
            bw.write(lineString);
        }
    }
    bw.close();
    fw.close();
    br.close();
    fr.close();

以下のサンプル コード スタイル 2:

 FileReader fr = new FileReader("input.txt");
 BufferedReader br = new BufferedReader(fr);
 FileWriter fw = new FileWriter("output.txt");

 BufferedWriter bw = new BufferedWriter(fw);

 Pattern pattern = 
    Pattern.compile("\\[  [0-6]\\]  (0.0- 1.0 sec)  0.00 KBytes  ([0-9]*.[0-9][0-9] Kbits/sec)");

    String lineString = null;
    while((lineString= br.readLine())!= null && !lineString.equals("Starting Test 2: Iperf TCP East....")){
        Matcher matcher = pattern.matcher(lineString);
        if(matcher.matches()){
            bw.write(lineString);
        }
    }
    bw.close();
    fw.close();
    br.close();
    fr.close();

ではごきげんよう!

于 2012-10-13T05:43:16.453 に答える
0

UNIX 端末または grep にアクセスできる場合は、この 1 行のコマンドでうまくいくはずです。

grep "[ [0-6]] 0.0- 1.0 sec 0.00 KBytes [0-9]*.[0-9][0-9] Kbits/sec" yourfile > newfile.txt

newfile.txt には、正規表現パターンに一致する yourfile のすべての行が含まれます

于 2012-10-14T06:21:58.240 に答える