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 |
g**e 发帖数: 6127 | 2 这还需要用java? shell, awk大家随喜,都是大牛们看不上的script
【在 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 可是要求用java里面做
该怎么做请前辈指点
感谢感谢
【在 g**e 的大作中提到】 : 这还需要用java? shell, awk大家随喜,都是大牛们看不上的script
|
c*********e 发帖数: 16335 | 4 google一下,应该是filename.readline之类的。
【在 m***l 的大作中提到】 : 可是要求用java里面做 : 该怎么做请前辈指点 : 感谢感谢
|
g**e 发帖数: 6127 | 5 作业题都需要把每个版面发一遍挨个问?好好找本书看看,没耐心就google
【在 m***l 的大作中提到】 : 可是要求用java里面做 : 该怎么做请前辈指点 : 感谢感谢
|
m***l 发帖数: 45 | 6 时间紧,水平有限就有病乱投医了
多听听大家的指点
【在 g**e 的大作中提到】 : 作业题都需要把每个版面发一遍挨个问?好好找本书看看,没耐心就google
|
w**z 发帖数: 8232 | 7 string operation,(split, substring , indexof etc. ) 或regex
【在 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 | 8 谢谢
我google一下,希望这个不是load到内存的
【在 c*********e 的大作中提到】 : google一下,应该是filename.readline之类的。
|
m***l 发帖数: 45 | 9 好的,谢谢
我google一下这些方法
【在 w**z 的大作中提到】 : string operation,(split, substring , indexof etc. ) 或regex
|
c*********e 发帖数: 16335 | 10 一行一行load到内存。
【在 m***l 的大作中提到】 : 谢谢 : 我google一下,希望这个不是load到内存的
|
|
|
A***r 发帖数: 34 | 11 1 用file input stream 通过流按行读取
2 你能看到有些行是没有时间戳的,这个属于上一行为同一个entry
3 对每行使用正则解析
4 正则解析不能hard coding,把正则作为一个可配置项放在配置文件中 |
m***l 发帖数: 45 | 12 谢谢
正则不能硬编码吗?
用配置文件更难了,我还是先实现硬编码的吧
还有请教第5条要求知道什么意思吗?
感谢
【在 A***r 的大作中提到】 : 1 用file input stream 通过流按行读取 : 2 你能看到有些行是没有时间戳的,这个属于上一行为同一个entry : 3 对每行使用正则解析 : 4 正则解析不能hard coding,把正则作为一个可配置项放在配置文件中
|
m***l 发帖数: 45 | 13 还想请教第5条要求该如何理解和用什么途径实现比较好
非常感谢
【在 c*********e 的大作中提到】 : google一下,应该是filename.readline之类的。
|
x*****g 发帖数: 764 | 14 用“[”和“]”作为symbol来tokenize the lines行不行?我觉得行。共勉!
【在 m***l 的大作中提到】 : 还想请教第5条要求该如何理解和用什么途径实现比较好 : 非常感谢
|
p**r 发帖数: 5853 | 15 俺说下思路及考官意图,个人看法。
#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,更精简。 |
p**r 发帖数: 5853 | 16 +1
【在 A***r 的大作中提到】 : 1 用file input stream 通过流按行读取 : 2 你能看到有些行是没有时间戳的,这个属于上一行为同一个entry : 3 对每行使用正则解析 : 4 正则解析不能hard coding,把正则作为一个可配置项放在配置文件中
|
p**r 发帖数: 5853 | 17 不行,如果后面数据里面带了类似[I'm 坑爹数据],那你就惨了。
【在 x*****g 的大作中提到】 : 用“[”和“]”作为symbol来tokenize the lines行不行?我觉得行。共勉!
|
m***l 发帖数: 45 | 18 感谢前辈指点!!
还有几点不明想请教
1。我用这种方式读入单行,但是发现FileReader继承自 OutputStreamWriter,那是不
是也算用到了stream,不知道是否load file in memory,所以不知道这种方式是否真
的满足第一条要求
1.Must not load entire file in memory (stream)
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
// process the line.
}
br.close();
2。多行的时候是否需要保持多行的状态?有id建议:“建一个HashMap
ArrayList>,key是时间,array里放后面的就行了while(true)里每次读一行
从括号里解出时间字符串,扔到map里”
不知这个方法是否可行?是否繁琐了?就直接解析出来每行存到xml或者json就行了?
3。我对存成xml,json从来没有接触过,不知道暂时存到比如上面的HashMap中再每条
记录加上标号写到一个新的log中是否满足 5.Must be configurable to parse log
files in slightly different formats
就我现在的水平感觉这条要求貌似要存到一个结构中比较方便地再存到需要的各种数据
形式中
【在 p**r 的大作中提到】 : 俺说下思路及考官意图,个人看法。 : #1 绝对不一次性读入整个文件!!!! : 这个是考你处理大文件的方法, : 一次性读入,3行还行,如果3百万行,那就是坑爹 : 所以类似readline的方式,分行读入,但是不是只读1行! : 【注意点】 : 读单项(不是单行!!!)的时候做一个判断,是否读到结尾了,因为不一定一行包括 : 了所有信息。 : 是否结尾标志,用regular expression判断,一旦读到第2个时间,结束,进入数据拆 : 分!
|
c*********e 发帖数: 16335 | 19 不知道你老师到底是什么意思。
一行一行地读,当读到第二行 的时候,变量line的值从第一行的值变成了第二行的值
,任何时刻,在内存里只有文件的一行的内容存在。
【在 m***l 的大作中提到】 : 感谢前辈指点!! : 还有几点不明想请教 : 1。我用这种方式读入单行,但是发现FileReader继承自 OutputStreamWriter,那是不 : 是也算用到了stream,不知道是否load file in memory,所以不知道这种方式是否真 : 的满足第一条要求 : 1.Must not load entire file in memory (stream) : BufferedReader br = new BufferedReader(new FileReader(file)); : String line; : while ((line = br.readLine()) != null) { : // process the line.
|
p**r 发帖数: 5853 | 20 java语法,以及一些关键词,你最好问问java高手们。
俺java基本忘光了。。。
#1
题目要求是must not load ENTIRE file in memory
貌似有个bufferreader的可以,你设置个limition,怎么读不用担心load整个文件到
memory
#2
时间做key不行,因为就是你的example里面就有时间一模一样的,除非时间数据全部是
unique.
#3
输出成何种格式很难说,因为不知道你公司是什么类型的。
但是既然开始要求你不load entire file,就意味着file size很大
如果你再把所有东西写入结构,再导出另一个log,其实就失去意义了。
#4
最后回答兼职问题,这东西如果是熟练码工的话,应该15分钟内搞定。
1。我用这种方式读入单行,但是发现FileReader继承自 OutputStreamWriter,那是不
是也算用到了stream,不知道是否load file in memory,所以不知道这种方式是否真
的满足第一条要求
1.Must not load entire file in memory (stream)
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
// process the line.
}
br.close();
2。多行的时候是否需要保持多行的状态?有id建议:“建一个HashMap
ArrayList>,key是时间,array里放后面的就行了while(true)里每次读一行
从括号里解出时间字符串,扔到map里”
不知这个方法是否可行?是否繁琐了?就直接解析出来每行存到xml或者json就行了?
3。我对存成xml,json从来没有接触过,不知道暂时存到比如上面的HashMap中再每条
记录加上标号写到一个新的log中是否满足 5.Must be configurable to parse log
files in slightly different formats
就我现在的水平感觉这条要求貌似要存到一个结构中比较方便地再存到需要的各种数据
形式中
【在 m***l 的大作中提到】 : 感谢前辈指点!! : 还有几点不明想请教 : 1。我用这种方式读入单行,但是发现FileReader继承自 OutputStreamWriter,那是不 : 是也算用到了stream,不知道是否load file in memory,所以不知道这种方式是否真 : 的满足第一条要求 : 1.Must not load entire file in memory (stream) : BufferedReader br = new BufferedReader(new FileReader(file)); : String line; : while ((line = br.readLine()) != null) { : // process the line.
|
p**r 发帖数: 5853 | 21 这是工业应用里很常见的要求,
不一行行读,文件稍微大点,就爆了。
【在 c*********e 的大作中提到】 : 不知道你老师到底是什么意思。 : 一行一行地读,当读到第二行 的时候,变量line的值从第一行的值变成了第二行的值 : ,任何时刻,在内存里只有文件的一行的内容存在。
|