作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试弄清楚如何最好地解析以下日志文件,拆分由水平线分隔的每个部分并提取各种数据,例如'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(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
-----------------------------------------------------------------------------------------------------------------------------------
最佳答案
你可以尝试使用框架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 实例化它。
关于java - Java解析定宽文本日志的技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7482021/
在 Java 中,我有以下代码: System.out.printf("%05.5f", myFloat); 这适用于任何小于 10 的数字,但对于任何大于或等于 10 的数字,小数位被削减为 5,但
我是一名优秀的程序员,十分优秀!