解析文本/在日志文件中排列文本

时间:2011-11-04 12:15:08

标签: java parsing logging

我正在尝试使用java:

读取以此形式编写的日志文件
2 05.08.2011 13:07:54.136 .r5 objects - ODBC [128] - C:\Windows\example.r5 [30] - 0x081BF015 - TLineThread.ModuleODBC the ODBC driver reports an error - parameter strSQLError contains the error information 
1 09.08.2011 19:01:28.473 .r5 objects - ODBC [27] - C:\Windows\ExampleWithALongName.r5 [18] - 0x081BF015 - ODBC driver reports an error - parameter strSQLError contains the error information 

在这样的输出中它是什么东西:

2 05.08.2011 13:07:54.136 .r5 objects - ODBC [128] - C:\Windows\example.r5 [30]              - 0x081BF015 - TLineThread.ModuleODBC the ODBC driver reports an error - parameter strSQLError contains the error information 
1 09.08.2011 19:01:28.473 .r5 objects - ODBC [27]  - C:\Windows\ExampleWithALongName.r5 [18] - 0x081BF015 - ODBC driver reports an error                            - parameter strSQLError contains the error information 

因此,在每一行中,分隔符“ - ”恰好位于前一行的分隔符“ - ”之下。 (如果路径的名称更长或不同,则无效)

我该怎么做?

1 个答案:

答案 0 :(得分:1)

有6个部分,你应该找到每个部分中最长的部分。

    File file = new File(inputFilePath);
    try {
        BufferedReader br = new BufferedReader(new FileReader(file));
        String line;
        int[] partCharCount = new int[6];
        for(int c : partsCount)
            c=0;

        while((line=br.readLine())!=null)
        {
            String[] parts = line.split("\\s*-\\s*");
            for(int i=0;i<parts.length; i++)
                if(parts[i].length() > partCharCount[i])
                    partCharCount[i] = parts.length;
        }

之后你应该再次阅读该文件,将每一行拆分为此代码中的部分,然后附加到每个部分空格以到达partsCount [i] +1