m***l 发帖数: 45 | 1 要实现下面的功能,可是一点儿idea都没有,该用什么类什么思路实现
恳请java前辈指点
万分感谢!!
将类似这样的一个比较长的.log文件解析开
[18/09/2011 06:53:21:021 PM] ERROR Main 70: Running logger, watch out!
java.lang.IndexOutOfBoundsException: Index: 99, Size: 0
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
[18/09/2011 06:53:21:021 PM] INFO Main 73: Running logger, watch out!
[18/09/2011 06:53:21:021 PM] INFO Main 73: Identity manager starting.
。。。。。。。
按时间解析开,比如上面的一段就是按时间分的3条
要求是:
+不能用stream把整个文件load到内存
+还要把每个时间和后面的内容解析开
+最好用普通的方法不用特别的类
其实我也不知道解析到什么地方怎么表达
原题要求
- Must not load entire file in memory (stream)
- Must capture the entire entry (single and multiple lines)
- Must split the entry also in two parts, timestamp and the rest of the
entry
- Must use a regular expression to parse
- Must be configurable to parse log files in slightly different formats
并且最后一条要求都不太理解什么意思
还请前辈指点 |
d**********x 发帖数: 4083 | 2 正则呗。。两个匹配之间断开
其实这玩意先用sed处理下,把每个时间段的都合成一行,然后再用java处理会方便很
多的。。
【在 m***l 的大作中提到】 : 要实现下面的功能,可是一点儿idea都没有,该用什么类什么思路实现 : 恳请java前辈指点 : 万分感谢!! : 将类似这样的一个比较长的.log文件解析开 : [18/09/2011 06:53:21:021 PM] ERROR Main 70: Running logger, watch out! : java.lang.IndexOutOfBoundsException: Index: 99, Size: 0 : at java.util.ArrayList.RangeCheck(ArrayList.java:547) : [18/09/2011 06:53:21:021 PM] INFO Main 73: Running logger, watch out! : [18/09/2011 06:53:21:021 PM] INFO Main 73: Identity manager starting. : 。。。。。。。
|
m***l 发帖数: 45 | 3 还请前辈指教
正则是什么意思? 两个匹配是什么意思?
sed处理?
万分感谢
【在 d**********x 的大作中提到】 : 正则呗。。两个匹配之间断开 : 其实这玩意先用sed处理下,把每个时间段的都合成一行,然后再用java处理会方便很 : 多的。。
|
h*******e 发帖数: 1377 | 4 最近写了两个 个c++的 parse xml 的小程序 大体思路是 每次读 进一个 字符 判
断[ 如果是的话 进入时间 tag函数 处理里面的时间 tag 之后 读入 后面的字符直
到】
理论上 正文 不会有 【字符。。碰到下一个[字符 开始新的一组时间函数。 关键你要
自己查一下生成这个log文件的程序 或者找相关人士 明确一下log 文件的语法。。
比如我parse xml就要压栈什么的。。这个log文件似乎用不到。 |
d**********x 发帖数: 4083 | 5 正则表达式啊。。
【在 m***l 的大作中提到】 : 还请前辈指教 : 正则是什么意思? 两个匹配是什么意思? : sed处理? : 万分感谢
|
p*****p 发帖数: 379 | 6 不需要正则吧
时间都是在[]里的,建一个HashMap>,key是时间,array
里放后面的就行了
while(true)里每次读一行从括号里解出时间字符串,扔到map里
【在 m***l 的大作中提到】 : 要实现下面的功能,可是一点儿idea都没有,该用什么类什么思路实现 : 恳请java前辈指点 : 万分感谢!! : 将类似这样的一个比较长的.log文件解析开 : [18/09/2011 06:53:21:021 PM] ERROR Main 70: Running logger, watch out! : java.lang.IndexOutOfBoundsException: Index: 99, Size: 0 : at java.util.ArrayList.RangeCheck(ArrayList.java:547) : [18/09/2011 06:53:21:021 PM] INFO Main 73: Running logger, watch out! : [18/09/2011 06:53:21:021 PM] INFO Main 73: Identity manager starting. : 。。。。。。。
|
m***l 发帖数: 45 | 7 这个要求用java
我不懂c++的能否参考到java里面?
【在 h*******e 的大作中提到】 : 最近写了两个 个c++的 parse xml 的小程序 大体思路是 每次读 进一个 字符 判 : 断[ 如果是的话 进入时间 tag函数 处理里面的时间 tag 之后 读入 后面的字符直 : 到】 : 理论上 正文 不会有 【字符。。碰到下一个[字符 开始新的一组时间函数。 关键你要 : 自己查一下生成这个log文件的程序 或者找相关人士 明确一下log 文件的语法。。 : 比如我parse xml就要压栈什么的。。这个log文件似乎用不到。
|
m***l 发帖数: 45 | 8 谢指点
请问如果不能用stream的话应该怎么读入呢?
array
【在 p*****p 的大作中提到】 : 不需要正则吧 : 时间都是在[]里的,建一个HashMap>,key是时间,array : 里放后面的就行了 : while(true)里每次读一行从括号里解出时间字符串,扔到map里
|
m***l 发帖数: 45 | 9 还想请教第5条要求该如何理解和用什么途径实现比较好
非常感谢 |
p**r 发帖数: 5853 | 10 俺说下思路及考官意图,个人看法。
#1 绝对不一次性读入整个文件!!!!
这个是考你处理大文件的方法,
一次性读入,3行还行,如果3百万行,那就是坑爹
所以类似readline的方式,分行读入,但是不是只读1行!
【注意点】
读单项(不是单行!!!)的时候做一个判断,是否读到结尾了,因为不一定一行包括
了所有信息。
是否结尾标志,用regular expression判断,一旦读到第2个时间,结束,进入数据拆
分!
【可能会加分的,但是有点showoff,遇到考官装X的会起反效果。】
你可以在读文件前再做一个判断,文件小于类似10k,直接读文件,不然就分行读。
也就是说你知道如何处理大文件,但是对小文件也不扯淡。。
#2 必须用regular expression<正则>,要求#4里说得很清楚!!!!
正则表达式分离数据,必须学会,以后会用很多。
判断日期格式,有很多种表达式。
如果不懂,就先去研究一把,这个题目只是分离日期以及后面数据,算简单的。
#3 把数据分离成2部分就不说了,这个你肯定会。
#4 第5条要求的意思其实是为了cross platform等后期需要,
所以建议用xml(rss)或json等格式re-format数据,我个人建议用json,更精简。 |