2011-09-20 58 views
2

我想弄清楚如何最好地解析下面的日誌文件,拆分每個部分由水平線分開並提取各種數據片段,例如, 'COMPANY123','BIMMU',日期(2/18等),然後創建一個字符串,其中包含由水平線分隔的部分中包含的所有其他數據。解析Java中固定寬度文本日誌的策略

即,我想創建一個「說法」的對象數組每個具有以下屬性:

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(142, 147);

我應該做兩次這樣的事情,例如:將代碼分成由水平線分隔的部分,然後分別解析這些部分?

只要在這裏寫出來幫助我得到我的思路,但如果任何人有任何聰明的想法,那麼聽到他們會很高興。


------------------------------------------------------------------------------------------------------------------------------------F BIASPBIMMU 
BIMMU BIASP-COMPANY123 KG    (Z) 9/14/11 EU (T- I-)      MT-0        F BIASP²BIMMU 
CALLS  2/18 YI    50.00-X (49)                      F BIASP²BIMMU 
------------------------------------------------------------------------------------------------------------------------------------F BIASPBIMMU 
BIMMU BIMM2-SUPER CORPORATION KG    (Z) 9/14/11 EU (T- I-)      MT-0        F BIMM2²BIMMU 
                                    F BIMM2²BIMMU 
* * * * * * * * * * * * * * * * * * *  T O D A Y S A C C O U N T A C T I V I T Y * * * * * * * * * * * * * * * * * * * *F BIMM2²BIMMU 
9/14/11  Y9    500 GO CALL OESX OCT 11 2400   9.60 EU          .00 F BIMM2²BIMMU 
                   GO-PARFSecurities Ser             F BIMM2²BIMMU 
       Y9  * 500 *  COMMISSIONS         EU          250.00- F BIMM2²BIMMU 
       Y9      PERTES & PROFITS NETS      EU          250.00- F BIMM2BIMMU 
CALLS  9/14 E1   17,825.00-H (1)                      F BIMM2²BIMMU 
CALLS  9/14 E1   17,825.00-N (1)                      F BIMM2²BIMMU 
-----------------------------------------------------------------------------------------------------------------------------------                                          

回答

1

我有類似的問題recenly,我結束了使用烙餅(Google Code: Flapjack)...查看谷歌代碼示例,我想這應該幫助你。

4

您可以嘗試使用框架Fixedformat4j。它使用註釋並且工作得很快。我已經部分爲我的項目實施瞭解它是如何工作的。

你可以用這樣的註解創建類:

@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實例化。