如何解析具有多个分隔符的文件

时间:2009-11-18 06:52:43

标签: java

我需要解析这种格式的文件,这样我就可以通过避免换行或“/ n”来获取/获取存在的值来代替那些标记,回车0r“/ r”,^^(空格) 。只是给我一个示例代码的想法,这样可以帮助我继续......

^^^ 中号^^^ COMPLD (^^^“[,]:,,, [], [],[],[] [,] [:[],[] [, [,]] [:[] [,]]]“)*;

假设响应属于这种类型:我需要获取每个字段值,

RTRV-HDR ::: RH01; [2K

SIMULATOR 09-11-18 13:49:03 M RH01 COMPLD ; 剂> RTRV-EQPT :: ALL:RE01; [2K

SIMULATOR 09-11-18 13:49:04 M RE01 COMPLD    “SLOT-1-1-1,CMP:IS-NR”    “SLOT-1-1-2,CMP:IS-NR”    “SLOT-1-1-3,OLC:IS-NR”    “SLOT-1-1-4,OLC:IS-NR”    “SLOT-1-1-5,OLC:IS-NR”    “SLOT-1-1-6,OLC:IS-NR”    “SLOT-1-1-7,OLC:IS-NR”    “SLOT-1-1-8,OLC:IS-NR”    “SLOT-1-1-9,IOC:IS-NR”    “SLOT-1-1-10,IOC:IS-NR”    “SLOT-1-2-1,NMC:IS-NR”    “SLOT-1-2-2,NMC:IS-NR”    “SLOT-1-2-3,OLC:IS-NR”    “SLOT-1-2-4,OLC:IS-NR”    “SLOT-1-2-5,OLC:IS-NR”    “SLOT-1-2-6,OLC:IS-NR”    “SLOT-1-2-7,OLC:IS-NR”    “SLOT-1-2-8,OLC:IS-NR” ; 剂> RTRV-ALM-EQPT :: ALL:RA01; [2K

SIMULATOR 09-11-18 13:49:05 M RA01 COMPLD    “SLOT-1-1-1,CMP:MN,T-FANCURRENT-1-HIGH,NSA 01-10-09,00-00-00 ,,:\” 范-T \ “”    “SLOT-1-1-1,CMP:MJ,T-BATTERYPWR-2-LOW,NSA 01-10-09,00-00-00 ,,:\” 电池-T \ “”    “SLOT-1-1-2,CMP:CR,PROC_FAIL,SA,09-11-18,13-48-54 ,,:”处理器故障“,”    “SLOT-1-1-3,OLC:MN,T-LASERCURR-1-HIGH,SA,01-10-07,13-21-03 ,,:\”Laser-T \“,”    “SLOT-1-1-3,OLC:MJ,T-LASERCURR-2-LOW,NSA,01-10-02,21-32-11 ,,:\”Laser-T \“,”    “SLOT-1-1-4,OLC:MN,T-LASERCURR-1-HIGH,SA,01-10-05,02-14-03 ,,:\” 激光-T \ “”    “SLOT-1-1-4,OLC:MJ,T-LASERCURR-2-LOW,NSA 01-10-04,01-03-02 ,,:\” 激光-T \ “” ; 剂> RTRV-ALM-EQPT :: ALL:RA02 :: MJ ,; [2K

SIMULATOR 09-11-18 13:49:06 M RA02 COMPLD    “SLOT-1-1-1,CMP:MJ,T-BATTERYPWR-2-LOW,NSA 01-10-09,00-00-00 ,,:\” 电池-T \ “”    “SLOT-1-1-3,OLC:MJ,T-LASERCURR-2-LOW,NSA,01-10-02,21-32-11 ,,:\”Laser-T \“,”    “SLOT-1-1-4,OLC:MJ,T-LASERCURR-2-LOW,NSA 01-10-04,01-03-02 ,,:\” 激光-T \ “” ; 剂> RTRV-ALM-EQPT :: ALL:RA03 :: MN ,; [2K

SIMULATOR 09-11-18 13:49:06 M RA03 COMPLD    “SLOT-1-1-1,CMP:MN,T-FANCURRENT-1-HIGH,NSA 01-10-09,00-00-00 ,,:\” 范-T \ “”    “SLOT-1-1-3,OLC:MN,T-LASERCURR-1-HIGH,SA,01-10-07,13-21-03 ,,:\”Laser-T \“,”    “SLOT-1-1-4,OLC:MN,T-LASERCURR-1-HIGH,SA,01-10-05,02-14-03 ,,:\” 激光-T \ “” ; 剂> RTRV-ALM-EQPT :: ALL:RA04 :: MN,T-LASERCURR-1-HIGH; [2K

SIMULATOR 09-11-18 13:49:10 M RA04 COMPLD    “SLOT-1-1-3,OLC:MN,T-LASERCURR-1-HIGH,SA,01-10-07,13-21-03 ,,:\”Laser-T \“,”    “SLOT-1-1-4,OLC:MN,T-LASERCURR-1-HIGH,SA,01-10-05,02-14-03 ,,:\” 激光-T \ “” ; 剂> RTRV-PM-EQPT :: ALL:RP01; [2K

SIMULATOR 09-11-18 13:49:11 M RP01 COMPLD    “SLOT-1-1-1,CMP:FANCURRENT-1,180.080 ,,,,,”    “SLOT-1-1-1,CMP:FANCURRENT-2,204.660 ,,,,,”    “SLOT-1-1-1,CMP:FANCURRENT-3,230.500 ,,,,,”    “SLOT-1-1-1,CMP:FANCURRENT-4,187.580 ,,,,,”    “SLOT-1-1-1,CMP:BATTERYPWR-1,53.650 ,,,,,”    “SLOT-1-1-1,CMP:BATTERYPWR-2,53.650 ,,,,,”    “SLOT-1-1-2,CMP:FANCURRENT-1,180.080 ,,,,,”    “SLOT-1-1-2,CMP:FANCURRENT-2,204.660 ,,,,,”    “SLOT-1-1-2,CMP:FANCURRENT-3,230.500 ,,,,,”    “SLOT-1-1-2,CMP:FANCURRENT-4,187.580 ,,,,,”    “SLOT-1-1-2,CMP:BATTERYPWR-1,53.650 ,,,,,”    “SLOT-1-1-2,CMP:BATTERYPWR-2,53.650 ,,,,,”    “SLOT-1-1-3,OLC:LASERPWR-1,200.00 ,,,,,”    “SLOT-1-1-3,OLC:LASERPWR-2,200.00 ,,,,,”    “SLOT-1-1-4,OLC:LASERPWR-1,200.00 ,,,,,”    “SLOT-1-1-4,OLC:LASERPWR-2,200.00 ,,,,,”    “SLOT-1-1-5,OLC:LASERPWR-1,200.00 ,,,,,”    “SLOT-1-1-5,OLC:LASERPWR-2,200.00 ,,,,,”    “SLOT-1-1-6,OLC:LASERPWR-1,200.00 ,,,,,”    “SLOT-1-1-6,OLC:LASERPWR-2,200.00 ,,,,,”    “SLOT-1-1-7,OLC:LASERPWR-1,200.00 ,,,,,”    “SLOT-1-1-7,OLC:LASERPWR-2,200.00 ,,,,,”    “SLOT-1-1-8,OLC:LASERPWR-1,200.00 ,,,,,”    “SLOT-1-1-8,OLC:LASERPWR-2,200.00 ,,,,,”    “SLOT-1-2-3,OLC:LASERPWR-1,200.00 ,,,,,”    “SLOT-1-2-3,OLC:LASERPWR-2,200.00 ,,,,,”    “SLOT-1-2-4,OLC:LASERPWR-1,200.00 ,,,,,”    “SLOT-1-2-4,OLC:LASERPWR-2,200.00 ,,,,,”    “SLOT-1-2-5,OLC:LASERPWR-1,200.00 ,,,,,”    “SLOT-1-2-5,OLC:LASERPWR-2,200.00 ,,,,,”    “SLOT-1-2-6,OLC:LASERPWR-1,200.00 ,,,,,”    “SLOT-1-2-6,OLC:LASERPWR-2,200.00 ,,,,,”    “SLOT-1-2-7,OLC:LASERPWR-1,200.00 ,,,,,”    “SLOT-1-2-7,OLC:LASERPWR-2,200.00 ,,,,,”    “SLOT-1-2-8,OLC:LASERPWR-1,200.00 ,,,,,”    “SLOT-1-2-8,OLC:LASERPWR-2,200.00 ,,,,,” ; 剂> INIT-SYS :: SLOT-1-1-2:IS01 :: 1; [2K

SIMULATOR 09-11-18 13:49:11 M IS01 COMPLD ; 剂>

感谢所有有价值的回复

3 个答案:

答案 0 :(得分:1)

你的问题很短,所以很难猜出你的意思,但是使用StreamTokenizer可能会有所帮助。

答案 1 :(得分:1)

我认为你应该有一个动态聚合器,它接收输入并将相干线粘合在一起,使你的表达式更容易在这些行上做。 F.ex.你可以有一个Iterator,用你编写的那些行包装另一个迭代器,查找相干的行并将它们存储在StringBuffer中。当你发现所有相干线形成一条线时,你将在next()方法中返回它。

答案 2 :(得分:0)

我认为你应该使用StringTokenizer

String s = "";
StringTokenizer st = new StringTokenizer("yourString" , "-,\n"); //You can add delimiters
while(!(st.hasMoreTokens())){
s += st.nextToken() + "\n";
}