huifeima 发表于 2011-4-15 16:27:17

跪求各种高手帮忙,批处理一下介个 文本文件 ,救救小弟!

按照需求改为 各路高手把,小弟不才只能想到批处理这一条路

现有一个文本文档 内容如下

: Command:
: 00 A4 04 00 08 A0 00 00 01 72 95 00 01 00
: Response:
: 6F 13 84 08 A0 00 00 01 72 95 00 01 A5 07 5F 2D
: 04 7A 68 65 6E 90 00
: Command:
: 00 A4 02 00 02 10 80
: Response:
: 90 00
: Command:
: 00 B2 01 04 00
: Response:
: 01 6E 08 30 30 30 30 30 33 35 38 1C 32 35 30 30
: 31 30 30 30 30 30 30 31 30 31 30 32 30 33 30 34
: 30 35 30 36 30 37 30 38 00 08 3F 05 73 DF 69 CF
: 42 BE 90 00
: Command:
: 00 A4 02 00 02 10 01
: Response:
: 90 00
: Command:
: 00 B2 01 05 00
: Response:
: 01 08 38 30 38 30 30 30 30 30 02 1E 01 02 03 04
: 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
: 21 22 23 24 25 26 27 28 29 30 03 10 30 31 30 32
: 30 33 30 34 30 35 30 36 30 37 30 38 04 10 31 31
: 31 31 31 31 31 31 31 31 31 31 31 31 31 31 05 10
: 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
: 06 10 33 33 33 33 33 33 33 33 33 33 33 33 33 33
: 33 33 07 10 30 30 30 30 30 30 30 30 30 30 30 30
: 30 30 30 30 08 10 20 20 20 20 20 20 20 20 20 20
: 20 20 20 20 20 20 09 10 37 37 37 37 37 37 37 37
: 37 37 37 37 37 37 20 20 0A 10 31 32 33 34 35 36
: 37 38 39 30 31 32 33 34 35 36 90 00

现在需要把前面的 : 都去掉 (注意 里面的时间日期数字不是固定的) 然后 把多行的数字都合并到一行
处理完的结果如下面所示 每一个 Command: 与 Response: 为一组。

00 A4 04 00 08 A0 00 00 01 72 95 00 01 00
6F 13 84 08 A0 00 00 01 72 95 00 01 A5 07 5F 2D 04 7A 68 65 6E 90 00

00 A4 02 00 02 10 80
90 00

00 B2 01 04 00
01 6E 08 30 30 30 30 30 33 35 38 1C 32 35 30 30 31 30 30 30 30 30 30 31 30 31 30 32 30 33 30 34 30 35 30 36 30 37 30 38 00 08 3F 05 73 DF 69 CF 42 BE 90 00

00 A4 02 00 02 10 01
90 00

00 B2 01 05 00
01 08 38 30 38 30 30 30 30 30 02 1E 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 03 10 30 31 30 32 30 33 30 34 30 35 30 36 30 37 30 38 04 10 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 05 10 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 06 10 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 07 10 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 08 10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 09 10 37 37 37 37 37 37 37 37 37 37 37 37 37 37 20 20 0A 10 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 90 00

最后的希望了, 因为公司有那么十几个 30M的文本文件 都是如上各式。 如果用手改 几乎等于要命了~~ 万能的论坛~~!! 帮帮小弟吧。 在这里 先谢过!

huifeima 发表于 2011-4-15 16:31:46

冰天雪地 不穿衣服 裸跪半个小时 求高手!

erxun 发表于 2011-4-15 16:33:00

复制到word里面,文本转表格,。删除列,试试看,

huifeima 发表于 2011-4-15 16:37:18

回复【2楼】erxun 老孟
-----------------------------------------------------------------------

谢谢您,但是目前来说前面的那些时间表示去掉好说 问题的关键是 怎么才能把那个 多行的 Response: 变成一行的(之间的回车都去掉)~~~

nnmnnm 发表于 2011-4-15 16:40:05

试试word里的替换也很好用,把[^?^?^?^?^?^?]替换为空 用"^?"代替日期时间中的每个字符,之后可以用“^#^p”替换为空

renpeng009 发表于 2011-4-15 16:45:49

用正则表达式

ssaweee 发表于 2011-4-15 16:53:58

用linux的脚本就简单了

nsza 发表于 2011-4-15 16:59:08

找你们公司做上位机程序的,随手写个小程序就搞定了。

franklinjin 发表于 2011-4-15 17:00:46

UtraEdit有个列编辑,搞定只需要一秒钟

huifeima 发表于 2011-4-15 17:03:38

楼上几位高手,说来惭愧 小弟由于学的是单片机,上位机一窍不通,。 刚毕业来这个公司实行,今天是工作的第五天。 公司不给任务做,只让搞一些这种鬼事情,老大说就用手动一个一个改就行了。小弟用手改了三天 实在受不了了。恳请楼上各位高手帮忙,用任何办法实现都行。小弟不才只能想出用批处理 但是 还不会,现学估计来不及了。

huifeima 发表于 2011-4-15 17:07:29

回复【8楼】franklinjin
-----------------------------------------------------------------------

下载一个试试看 目前小弟一件试过了 文本处理大师,TXTTOOLS1.6 Textpro5 DreamEdit:中文编辑排版专家2.36免费绿色版 等软件 ,均不可。一天的时间都鼓捣这个了,实在没办法了已经

linghu2 发表于 2011-4-15 17:08:06

用EXCEL也可以搞定

huifeima 发表于 2011-4-15 17:15:04

列编辑 果然够给力目前最难得问题在此

Command:                                       
00 A4 04 00 08 A0 00 00 01 72 95 00 01 00      
Response:                                    
6F 13 84 08 A0 00 00 01 72 95 00 01 A5 07 5F 2D
04 7A 68 65 6E 90 00                           
Command:                                       
00 A4 02 00 02 10 80                           
Response:                                    
90 00                                          
Command:                                       
00 B2 01 04 00                                 
Response:                                    
01 6E 08 30 30 30 30 30 33 35 38 1C 32 35 30 30
31 30 30 30 30 30 30 31 30 31 30 32 30 33 30 34
30 35 30 36 30 37 30 38 00 08 3F 05 73 DF 69 CF
42 BE 90 00                                    
Command:                                       
00 A4 02 00 02 10 01                           
Response:                                    
90 00                                          
Command:                                       
00 B2 01 05 00                                 
Response:                                    
01 08 38 30 38 30 30 30 30 30 02 1E 01 02 03 04
05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30 03 10 30 31 30 32
30 33 30 34 30 35 30 36 30 37 30 38 04 10 31 31
31 31 31 31 31 31 31 31 31 31 31 31 31 31 05 10
32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
06 10 33 33 33 33 33 33 33 33 33 33 33 33 33 33
33 33 07 10 30 30 30 30 30 30 30 30 30 30 30 30
30 30 30 30 08 10 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 09 10 37 37 37 37 37 37 37 37
37 37 37 37 37 37 20 20 0A 10 31 32 33 34 35 36
37 38 39 30 31 32 33 34 35 36 90 00            


怎么才能把那些 Response: 都改成一行的啊 并且格式遵循

00 A4 04 00 08 A0 00 00 01 72 95 00 01 00
6F 13 84 08 A0 00 00 01 72 95 00 01 A5 07 5F 2D 04 7A 68 65 6E 90 00

00 A4 02 00 02 10 80
90 00

00 B2 01 04 00
01 6E 08 30 30 30 30 30 33 35 38 1C 32 35 30 30 31 30 30 30 30 30 30 31 30 31 30 32 30 33 30 34 30 35 30 36 30 37 30 38 00 08 3F 05 73 DF 69 CF 42 BE 90 00

00 A4 02 00 02 10 01
90 00

00 B2 01 05 00
01 08 38 30 38 30 30 30 30 30 02 1E 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 03 10 30 31 30 32 30 33 30 34 30 35 30 36 30 37 30 38 04 10 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 05 10 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 06 10 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 07 10 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 08 10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 09 10 37 37 37 37 37 37 37 37 37 37 37 37 37 37 20 20 0A 10 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 90 00

huifeima 发表于 2011-4-15 17:22:21

注意 Command:也会有 多行的情况发生

jrcsh 发表于 2011-4-15 17:22:28

把原文件 上传一个上来把修改后的样本上来一过后


之后看我心情把谁叫你用跪求 你既然这么看不起自己 哪我也不用重视你

jrcsh 发表于 2011-4-15 17:23:18

http://boke.qq.com/play.html?v=7EPNyOKEDCT

我的最~~~~无聊手方法

Yaksa 发表于 2011-4-15 17:25:37

如果你会用vim:
1.删除类似: 的时间信息
:%s/\[.*\]: //

2.每个Command上面添一空行(最后是大写字母O)
:g/Command/norm O

3.暂时把Command和下面的数据合并为一行
:g/Command/norm J

4.把Response和下面的数据都合并为一行
:g/^\d/-1 norm J

5.把Command/Response和后面的数据分开
:%s/: /:\r

我实际操作得到的数据:

Command:
00 A4 04 00 08 A0 00 00 01 72 95 00 01 00
Response:
6F 13 84 08 A0 00 00 01 72 95 00 01 A5 07 5F 2D 04 7A 68 65 6E 90 00

Command:
00 A4 02 00 02 10 80
Response:
90 00

Command:
00 B2 01 04 00
Response:
01 6E 08 30 30 30 30 30 33 35 38 1C 32 35 30 30 31 30 30 30 30 30 30 31 30 31 30 32 30 33 30 34 30 35 30 36 30 37 30 38 00 08 3F 05 73 DF 69 CF 42 BE 90 00

Command:
00 A4 02 00 02 10 01
Response:
90 00

Command:
00 B2 01 05 00
Response:
01 08 38 30 38 30 30 30 30 30 02 1E 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 03 10 30 31 30 32 30 33 30 34 30 35 30 36 30 37 30 38 04 10 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 05 10 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 06 10 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 07 10 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 08 10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 09 10 37 37 37 37 37 37 37 37 37 37 37 37 37 37 20 20 0A 10 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 90 00

dr2001 发表于 2011-4-15 17:27:11

1 列编辑,去掉开头的无用列。
2 编辑器功能,去掉行尾空格;可以用正则搞定。
3 正则模式,删除无用空行。
4 正则模式,行尾回车换成空格。
5 正则模式,英文字母替换成回车。
Done.

几个文件手搞快,多了找Linux的工具用脚本。

dr2001 发表于 2011-4-15 17:31:17

补充:

这么整齐的格式,明显用程序生成的,用C写个程序来搞定也就10来分钟的事情。

Yaksa 发表于 2011-4-15 17:31:54

第3步可以省略

billowtust 发表于 2011-4-15 17:49:27

还好我会一些VC,已经批处理过很多重复性数据了,楼主有空还是要学个PC工具,会有用的

gehao92 发表于 2011-4-15 17:52:08

用C++写个吧。并不是很难,图方便的话也不需要多高级的数据结构和算法。
字符处理应该会吧。。。。。。:-),祝你好运。建议不要一次性都读入内存,
读一条,写一条。研究一下,一天够了。总比手动改好吧。

hls_hh 发表于 2011-4-15 17:55:13

用C#给你写的一个小程序ourdev_630963QJTRF5.rar(文件大小:70K) (原文件名:文字处理.rar)

楼主,我用C#给你写了一个,你运行一下试试~上面你给的内容测试了一下,基本上没有什么问题,你运行一下试试吧,大的文件没有试过,源程序包括工程文件也在这个压缩文件里面,用VS2008弄的,如果不对的话你试着改一下吧,对应你上面的格式的,取每行处理,如果格式变的话就不好用了。。。建议你处理完后亲自检查一下数据,原理上应该没问题,但如果文件大了,我也不能保证~

ywl0409 发表于 2011-4-15 19:11:56

用“查找”,“替代”。

woodlynn 发表于 2011-4-15 19:50:50

回复【16楼】Yaksa解烟客
如果你会用vim:
1.删除类似: 的时间信息
:%s/\[.*\]: //
2.每个command上面添一空行(最后是大写字母o)
:g/command/norm o
3.暂时把command和下面的数据合并为一行
:g/command/norm j
4.把response和下面的数据都合并为一行
:g/^\d/-1 norm j
5.把command/response和后面的数据分开
:%s/: /:\r
......
-----------------------------------------------------------------------
第一次感受到vim的魅力。

cowboy 发表于 2011-4-16 01:53:11

一般的文本处理软件可以了吧,例如UE:

1 菜单-格式-删除尾部空格
2 查找“换行符”,全部替换为“空”
3 查找“Command:”,全部替换为“两个换行符”
4 查找“Response:”,全部替换为“一个换行符”

yuphone 发表于 2011-4-16 02:03:06

fscanf fprintf

glenovo 发表于 2011-4-30 20:15:53

一看就知道人家考得是你的耐心,本来这是个串口的收发数据。

两种可能性,一个是在分析别人的产品数据。

一种可能性就是看看你的耐心与动脑能力。
页: [1]
查看完整版本: 跪求各种高手帮忙,批处理一下介个 文本文件 ,救救小弟!