无法解析文本文件并在单独的日志中查找匹配项

时间:2016-09-28 01:02:23

标签: java parsing file-io

我正在尝试解析两个文本文件。我想要做的是在一个日志中找到一个特定的关键字,看看下一个日志是否有相同的关键字。

日志包含由标记值对组成的行,如下所示:LOG 1的行数多于LOG 2

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

大约有20,000行看起来与此相似。

基本上我要做的是找到日志1中所有“11 =”标签的值,如value3xyz和randomvalue,然后搜索log 2并查看标签“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 个答案:

没有答案