![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-06 10:33 |
共 48,039 主题排行 / 350,124 发帖 / 今日 0 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [求助]文本比較替換,難度高問的很心虛(附圖內文简体) |
| 可打印版本 1,939 / 21 |
| 第1楼 leo1984 | 发表于 2007-11-01 15:43 |
| 初级用户 发帖 43 积分 96 | |
|
[求助]文本比較替換,難度高問的很心虛(附圖內文简体) 大哥们请体谅小弟架设网站要处理太多文本数据的问题,又是初学者,才刚学会一些基本的批次输出输入,但要处理需要比较文本的问题,完全难倒新手啊
小弟学习的东西太多太杂,批次处理弄的一个头两个大>< 请老大哥们发慈悲心帮小老弟看再看一下 如下图,请按箭头的数字顺序 ![]() 看完图不明白让小弟解说一下 话说从前从前有一个文本叫index1.log的母亲 它在外头生了很多个dat的文本孩子 这些dat孩子在外地赚了很多钱 于是要比对母亲第一个‖分隔符之前的帐户,和dat孩子的档名 如果相同,dat孩子就可以把自己文本内容的:之前的金钱数额,汇到母亲第一个‖分隔符的帐户之后 这样母亲就很开心啦 所以简单的说: 处理前: index1.log文本里,每行以第一个‖之前的数字和同目录里的dat档的档名作比较 14724‖‖Windows XP 布景主题精选51 In 1 ‖3‖天武帝‖20071012 181007‖TATATA‖1‖1192178479‖ 比较和14724相同的14724.dat档后,打开14724.dat文本内的:之前的数字 87:61.224.135.39 而这个数字便直接再汇入index1.log的第一个‖之后 处理后:
这难度实在太高了,小弟问的真的心很虚啊,但不问又不知道如何处理上万篇的文本>< 十分麻烦老大哥帮忙谢谢 [ Last edited by leo1984 on 2007-11-1 at 03:57 PM ] |
|
| 第2楼 abcd | 发表于 2007-11-01 16:19 |
| 银牌会员 发帖 739 积分 1,436 | |
|
这个意思?? [ Last edited by abcd on 2007-11-1 at 04:22 PM ] |
|
| 第3楼 lxmxn | 发表于 2007-11-01 18:06 |
| 版主 发帖 4,938 积分 11,386 | |
|
故事讲得很搞笑哦~~ ^_^
|
|
| 第4楼 leo1984 | 发表于 2007-11-01 21:11 |
| 初级用户 发帖 43 积分 96 | |
Originally posted by abcd at 2007-11-1 04:19 PM: |
|
| 第5楼 leo1984 | 发表于 2007-11-01 21:15 |
| 初级用户 发帖 43 积分 96 | |
Originally posted by lxmxn at 2007-11-1 06:06 PM: 我这么认真在说一个母亲的辛劳与孩子的孝顺 怎么变庵搞笑来的勒?! @@? |
|
| 第6楼 terse | 发表于 2007-11-01 22:06 |
| 银牌会员 发帖 946 积分 2,404 | |
|
改上面的试一下也一样
不过没有%%i.dat文件就不行了哦 呵呵 学习了 @echo off for /f "tokens=1* delims=‖" %%i in (index1.log) do ( for /f "delims=:" %%a in (%%i.dat) do echo %%i‖%%a‖%%j>>index.log ) pause [ Last edited by terse on 2007-11-1 at 10:22 PM ] |
|
| 第7楼 leo1984 | 发表于 2007-11-02 04:01 |
| 初级用户 发帖 43 积分 96 | |
|
@echo off
for /f "tokens=1* delims=∥" %%i in (index2.log) do ( for /f "tokens=5 delims=∥" %%a in (%%i.txt) do echo %%i∥%%a∥%%j>>index.log ) 我要抓取第五個∥字符 但是 for /f "tokens=5 delims=∥" %%a in (%%i.txt) do echo %%i∥%%a∥%% 這段tokens=5會把第五個字串抓出來,但是迴圈會繼續下去,因此連文本後面的的一起輸出來到index.log裡 請問為何同樣的寫法,tokens=5設為1時,就只會偵對第一行抓取 但設為5時,迴圈為何會繼續抓下去呢? 可以下載的的附件測試看,小老弟看的很困惑這是什麼魔法? [ Last edited by leo1984 on 2007-11-2 at 04:02 AM ] 附件 14536.txt (2.69 KiB) |
|
| 第8楼 leo1984 | 发表于 2007-11-02 06:41 |
| 初级用户 发帖 43 积分 96 | |
|
完了
研究整個晚上指令 只有skip只能指定跳過開頭幾行 沒有辦法直接指定第一行0.0" (心頭一陣寒風吹過~~~~) |
|
| 第9楼 abcd | 发表于 2007-11-02 10:45 |
| 银牌会员 发帖 739 积分 1,436 | |
|
在楼主给的附件中根本就没有∥这个分隔符的。
不知道什么意思,还是用图说话吧 |
|
| 第10楼 terse | 发表于 2007-11-02 10:48 |
| 银牌会员 发帖 946 积分 2,404 | |
|
是不是这个意思呢?
附件下来我这里是乱码,没测试! |
|
| 第11楼 leo1984 | 发表于 2007-11-02 12:02 |
| 初级用户 发帖 43 积分 96 | |
|
给abcd大哥
这个很难用图片来说明@@" 我来简单说明一下好了,我原本提供的图里,知道了dat里头只要取出87放到index1.log即可 http://img155.imageshack.us/img155/5489/snap085dz5.jpg 所以您给的 for /f "delims=:" %%a in (%%i.dat) do echo %%i‖%%a‖%%j>>index2.log 找到:这个分隔符后,因为bat文本里头只有一行 所以这段回圈也只能执行一次 但是小老弟我这次要从txt文本里取出第五个以‖为分隔符的字串,然后一样放到index2.log里 所以我修改成 for /f "tokens=5 delims=‖" %%a in (%%i.dat) do echo %%i‖%%a‖%%j>>index2.log 但是我们都知道回圈会不停不停的执行 而这次txt的文本里不只有一行 他是这样子 JAN‖1‖SlySoft All In One 2007-09-10-小绵羊套餐‖绵羊狐狸又来了@1@,这是一定要收下的啦,谢啦<br>‖220.132.11.106‖2007/09/18/ 11:10:02‖jan@yahoo.com‖ ........... ..........以此类推可能有好几行 因此txt文本里头有几行,它就取出多少行的字串到index2.log里 原本小弟需要的index2.log一行比较dat只有一行后取出一个字串放到index2.log里,是可行的 而这次index2.log一行比较txt有许多行后取出许多字串放到index2.log里,就不符合一比一的取字串的需求了 因此我说如何能让回圈指定只取txt第一行,就停止再取超过第一行的字串,但因为找不到指令而小弟很心寒 而感谢terse提供的指令,小老弟平常接触的都是变数和回圈等等网站程式,没想到原来DOS可以口语话的进行比较 if not defined line set "line=%%a" 只要和line一样的才能进行回圈 同时也宣告line=%%a 但重点来啦~没有排出阵列,只取出%%a进行比较后输出 因此 处理前,txt文本里的确实取出220.132.11.106这字串了 JAN‖1‖SlySoft All In One 2007-09-10-小绵羊套餐‖绵羊狐狸又来了@1@,这是一定要收下的啦,谢啦<br>‖220.132.11.106‖2007/09/18/ 11:10:02‖jan@yahoo.com‖ 但放到index2.log原本需要的是这样 处理后: 3041‖220.132.11.106‖1489‖‖【2-25】Nelson 软 体 作 品(全是繁体中文的喔)‖2‖琉璃★幻童‖20070914 061000‖琉璃★幻童 ‖1‖1185452828‖ 但是因为输出只有宣告 echo,%line%>>indexa.log 所以变成只留下 220.132.11.106 其他原本应有的字串变成被220.132.11.106取代掉了 所以小弟的苦恼是terse大哥确实宣告一定要比较过%%a才能取出字串,但是不能排出阵列啊@@ 请老大哥再帮忙小老弟 (超高难度的,不是小老弟不认真学,只是搜索整个论坛,也找不到for能够指定第一行执行一次就停止的指令,这老弟还在研究中啊@@) [ Last edited by leo1984 on 2007-11-2 at 12:18 PM ] |
|
| 第12楼 leo1984 | 发表于 2007-11-02 12:10 |
| 初级用户 发帖 43 积分 96 | |
|
看得懂小弟的意思吗?
小弟想不出要拍什么图来解释@@ |
|
| 第13楼 abcd | 发表于 2007-11-02 12:18 |
| 银牌会员 发帖 739 积分 1,436 | |
|
如果用sed的话,方便很多,速度也快很多
發現臺灣把變量叫做變數,循環叫做逥圈 |
|
| 第14楼 abcd | 发表于 2007-11-02 12:19 |
| 银牌会员 发帖 739 积分 1,436 | |
|
樓主的意思是只去對應文本的第一行里的第五個‖后的字符
是吧?? |
|
| 第15楼 junchen2 | 发表于 2007-11-02 12:22 |
| 高级用户 发帖 219 积分 537 来自 杭州--半山 | |
|
for /f "tokens=5 delims=‖" %%a in ('sed -n 1p %%i.dat') do echo %%i‖%%a‖%%j>>index2.log
|
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |