Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中固定宽度文本日志的解析策略_Java_Regex_Parsing_Logging - Fatal编程技术网

Java中固定宽度文本日志的解析策略

Java中固定宽度文本日志的解析策略,java,regex,parsing,logging,Java,Regex,Parsing,Logging,我试图找出如何最好地解析下面的日志文件,将每个由水平线分隔的部分拆分,并提取各种数据,例如“COMPANY123”、“BIMMU”、日期(2/18等),然后创建一个字符串,其中包含由水平线分隔的部分中包含的所有其他数据 也就是说,我想创建一个“语句”对象数组,每个对象都具有以下属性: Company name, Account, Date, Data. 例如,对于下面的第二条记录 Account = 'BIMMU' Firm = 'Super Corporation' Date= 9/14/1

我试图找出如何最好地解析下面的日志文件,将每个由水平线分隔的部分拆分,并提取各种数据,例如“COMPANY123”、“BIMMU”、日期(2/18等),然后创建一个字符串,其中包含由水平线分隔的部分中包含的所有其他数据

也就是说,我想创建一个“语句”对象数组,每个对象都具有以下属性:

Company name, Account, Date, Data.
例如,对于下面的第二条记录

Account = 'BIMMU'
Firm = 'Super Corporation'
Date= 9/14/11
Data = '* * * * * * * * TODAYS ACCOUNT ACTIVITY * * * * * * * * * * *
        9/14/11 Y9 CALL OESX OCT 11 ........ etc'
日志是一个固定宽度的文本文件,变量(日期等)始终出现在行中的相同位置,例如
sSalesCode=line.substring(142147)

我是否应该分两次执行此操作,例如,将代码拆分为由水平线分隔的部分,然后分别解析这些部分

在这里写下这篇文章有助于我了解自己的思路,但如果其他人有任何聪明的想法,那么听到这些想法就太好了



最近我遇到了类似的问题,我最终使用了Flapjack()。。。看看谷歌代码上的例子,我想它应该会对你有所帮助。

你可以尝试使用框架。它使用注释,工作速度很快。我已经部分地实现了它,以便我的项目能够理解它是如何工作的

您可以创建具有如下注释的类:

@Record
public class LogRecord {
    private String firm;
    private String user;
    private Date logonDate;
    private String logData;

    public String getFirm() {
        return firm;
    }

    @field(offset=10, length=10)
    public void setFirm(String firm) {
        this.firm = firm;
    }

    public String getUser() {
        return user;
    }

    @field(offset=0, length=10)
    public void setUser(String user) {
        this.user = user;
    }

    public Date getLogonDate() {
        return logonDate;
    }

    @field(offset=nn, length=8)
    @FixedFormatPattern("mm/dd/yy")  
    public void setLogonDate(Date logonDate) {
        this.logonDate = logonDate;
    }

    public String getLogData() {
        return logData;
    }

    @field(offset=mm, length=yy)
    public void setLogData(String logData) {
        this.logData = logData;
    }

}
然后用FixedFormatManager实例化它

@Record
public class LogRecord {
    private String firm;
    private String user;
    private Date logonDate;
    private String logData;

    public String getFirm() {
        return firm;
    }

    @field(offset=10, length=10)
    public void setFirm(String firm) {
        this.firm = firm;
    }

    public String getUser() {
        return user;
    }

    @field(offset=0, length=10)
    public void setUser(String user) {
        this.user = user;
    }

    public Date getLogonDate() {
        return logonDate;
    }

    @field(offset=nn, length=8)
    @FixedFormatPattern("mm/dd/yy")  
    public void setLogonDate(Date logonDate) {
        this.logonDate = logonDate;
    }

    public String getLogData() {
        return logData;
    }

    @field(offset=mm, length=yy)
    public void setLogData(String logData) {
        this.logData = logData;
    }

}