2016-09-28 61 views
0

我有兩個文本文件,我試圖解析。我想要做的是在一個日誌中查找特定的關鍵字,並查看下一個日誌是否具有相同的關鍵字。無法解析文本文件並在單獨的日誌中查找匹配

日誌有一個由看起來像這樣的標籤 - 值對線:LOG 1比2 LOG

多線
log 1 
32=A 9=value 39=value2 10=value3xyz D=339 Z=abcdef 
32=A 100=value 10=randomvalue 109=randomvalue2 376=435014 528=A 

log 2 
9=value 39=value2 22=value3xyz D=339 Z=abcdef 
100=value 22=blahblah 109=randomvalue2 376=435014 528=A 

大約有2萬行,看起來與此類似。

本質上我想要做的是找到log1中所有「11 =」標記的值,如value3xyz和randomvalue,然後搜索log2並查看標記「22 =」是否有任何標籤11具有的值。

我希望能夠打印這樣的事情

Log 1: 
Line: 9=value 39=value2 10=value3xyz D=339 Z=abcdef 
Log 2: 
Line: 9=value3 39=value12 22=value3xyz D=3349 Z=abcdefda 

Log 1: 
Line: 100=value 10=randomvalue 109=randomvalue2 376=435014 528=A 
Log 2: 
Not found 

這裏是我有:

import java.io.BufferedReader; 
import java.io.FileInputStream; 
import java.io.InputStreamReader; 
import java.io.IOException; 
import java.util.ArrayList; 

public class FileData { 

     public static void main(String[] args) throws IOException { 

       FileInputStream log1Stream = new FileInputStream("src/txtfiles/log1.txt"); 
       FileInputStream log2Stream = new FileInputStream("src/txtfiles/log2.txt"); 
       BufferedReader log1Reader = new BufferedReader(new InputStreamReader(log1Stream)); 
       BufferedReader log2Reader = new BufferedReader(new InputStreamReader(log2Stream)); 
       ArrayList<String> parentTagValue = new ArrayList<String>();  
       ArrayList<String> childTagValue = new ArrayList<String>(); 
       ArrayList<String> hasChild = new ArrayList<String>(); 
       ArrayList<String> noChild = new ArrayList<String>(); 

       String upstream; 
       String downstream; 
       String strLine; 

       // put all of the "10=" tag values into an arraylist 
       while ((strLine = log1Reader.readLine()) != null) { 

        if (strLine.contains("32=A")) { 
         parentTagValue.add((strLine.substring(strLine.lastIndexOf(" 10=") + 4).replaceAll(" .+$", ""))); 
        } 

       } 

       // put all of the "22=" tag values into an arraylist 
       while ((strLine = log2Reader.readLine()) != null) { 

         if (strLine.contains("22=")) { 
           childTagValue.add(strLine.substring(strLine.lastIndexOf(" 22=") + 4).replaceAll(" .+$", "")); 
         } 
       } 

       // see which "10=" tag values have a "child value" in log 2 
       for (String string : parentTagValue) { 
         if (childTagValue.contains(string)) { 
           hasChild.add(string); 
         } 
         else { 
           noChild.add(string); 
         } 
       } 



       log1Reader.close(); 
       log2Reader.close(); 
       System.out.println(noChild.size()+hasChild.size()); 
     } 
} 

我不知道我怎樣才能打印出來的線條從日誌顯示我想要在上面顯示的信息。有人可以請我指出正確的方向。另外,有沒有更好/更有效的方法來做到這一點?

+0

你確定這兩個文件具有相同的行數,並沒有數據丟失? –

+0

@TimBiegeleisen對不起,日誌不一定有相同數量的行。每個日誌中大約有15-20行,所以我只是發佈了幾行代碼的示例 – user2980566

+0

您如何建議將一個文件中的行與另一個文件中的行配對成一個有意義的(並且是理想的可重現的)方式? –

回答

0

我沒有做過的Java多年,但如果我沒記錯的話,你需要做的是:

strLine.substring(strLine.lastIndexOf("22="), strLine.lastIndexOf("22=") + 4) unless you want to start 4 characters past the start of your value.