中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-09 20:39
47,811 主题排行 / 349,897 发帖 / 今日 2 篇 / 48,255 会员排行
DOS批处理 & 脚本技术(批处理室) » 求一个在文本首行添加一行的批处理
可打印版本  1,383 / 12
第1楼 youaoyi 发表于 2008-09-18 22:36
初级用户 发帖 67 积分 154
求一个在文本首行添加一行的批处理
求一个可以根据文本中第一行的“|”个数,

在首行新增“0|0|0|0|0|0|” 一行的批处理。

SED CHANGE GAWK 之类的命令都可以,只求速度。

样本: a.txt

1|0757 | 合同 | 其它 | 殷晏 | 200837015029392 | 4000.0 |
2|0752 | 合同 | 经济原因 | 葛宝 | 200000026251 | 10232.35 |
3|2810 | 合同 | 经济原因 | 王传 | 2002810000013079 | 479.0 |

样本 a.txt 第一行有 7个“|”符,希望得到的结果如下:

0|0|0|0|0|0|0|
1|0757 | 合同 | 其它 | 殷晏 | 200837015029392 | 4000.0 |
2|0752 | 合同 | 经济原因 | 葛宝 | 200000026251 | 10232.35 |
3|2810 | 合同 | 经济原因 | 王传 | 2002810000013079 | 479.0 |
第2楼 dragonamd 发表于 2008-09-18 22:39
中级用户 发帖 100 积分 209
文本超过10MB的话还是GAWK快
第3楼 moniuming 发表于 2008-09-18 23:25
银牌会员 发帖 574 积分 1,335 来自 广西
其它的工具不会,试试这个?
第4楼 HAT 发表于 2008-09-18 23:26
版主 发帖 5,017 积分 9,023
第5楼 HAT 发表于 2008-09-18 23:31
版主 发帖 5,017 积分 9,023
只顾着和朋友聊天了,贴代码的速度比 moniuming 兄慢了1分钟,呵呵,思路很相似。
第6楼 youaoyi 发表于 2008-09-18 23:40
初级用户 发帖 67 积分 154
1、sed "1q" a.txt>new.txt
2、for /F "tokens=1,* delims=|" %i in (new.txt) do ????
3、copy new.txt + a.txt

第二步需要将这个new.txt中只有一行的文本,“|”之外的都替换成0就可以了,

可是我不会写 。。。。
第7楼 HAT 发表于 2008-09-18 23:44
版主 发帖 5,017 积分 9,023
取第一行,不必用sed,用set即可。
替换字符不是有人帮你写出来了么?3、4楼的代码能理解否?
第8楼 youaoyi 发表于 2008-09-18 23:53
初级用户 发帖 67 积分 154
嗯 明天睡醒再仔细想想 参悟一下 。。。

说实话,以我目前的水平,尚不能理解3、4楼的代码

我六楼的想法产生的原因是,如果样本是下面这样:

样本: B.txt (最后一位后面没有“|”分隔符)

1|0757 | 合同 | 其它 | 殷晏 | 200837015029392 | 4000.0
2|0752 | 合同 | 经济原因 | 葛宝 | 200000026251 | 10232.35
3|2810 | 合同 | 经济原因 | 王传 | 2002810000013079 | 479.0

也能够生成与之对应的行:

0|0|0|0|0|0|0
1|0757 | 合同 | 其它 | 殷晏 | 200837015029392 | 4000.0
2|0752 | 合同 | 经济原因 | 葛宝 | 200000026251 | 10232.35
3|2810 | 合同 | 经济原因 | 王传 | 2002810000013079 | 479.0
第9楼 pooronce 发表于 2008-09-19 00:05
中级用户 发帖 250 积分 484
第10楼 pooronce 发表于 2008-09-19 00:23
中级用户 发帖 250 积分 484
样本B的:
第11楼 HAT 发表于 2008-09-19 16:43
版主 发帖 5,017 积分 9,023
Re 4楼
关于统计|的个数,namejm 兄给出了另外一个思路(不必逐个判断字符):
第12楼 HAT 发表于 2008-09-19 17:35
版主 发帖 5,017 积分 9,023
Re 11楼
没有理解清楚 namejm 兄的完整本意,更改如下(不必使用两层if):
第13楼 moniuming 发表于 2008-09-20 17:10
银牌会员 发帖 574 积分 1,335 来自 广西
Originally posted by youaoyi at 2008-9-18 23:53:
我六楼的想法产生的原因是,如果样本是下面这样:

样本: B.txt (最后一位后面没有“|”分隔符)

1|0757 | 合同 | 其它 | 殷晏 | 200837015029392 | 4000.0
2|0752 | 合同 | 经济原因 | 葛宝 | 200000026251 | 10232.35
3|2810 | 合同 | 经济原因 | 王传 | 2002810000013079 | 479.0

也能够生成与之对应的行:

0|0|0|0|0|0|0
1|0757 | 合同 | 其它 | 殷晏 | 200837015029392 | 4000.0
2|0752 | 合同 | 经济原因 | 葛宝 | 200000026251 | 10232.35
3|2810 | 合同 | 经济原因 | 王传 | 2002810000013079 | 479.0

[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023