![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-07 23:29 |
共 48,041 主题排行 / 350,128 发帖 / 今日 3 篇 / 48,252 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 还是两个文本输出的问题:按列合并两个文本文件 |
| 可打印版本 2,354 / 16 |
| 第1楼 bat-zw | 发表于 2008-04-02 17:12 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
还是两个文本输出的问题:按列合并两个文本文件 a.txt
b.txt 通过批处理输出内容如下: 要求: 1 不生成任何临时文件 2 尽量简洁代码 3 a.txt和b.txt可互换 4 效率高 =================================== 到目前最完美的方案(17楼): ───────────────── 版务记录 ───────────────── 执行:HAT 操作:在帖子标题中增加搜索关键字 说明:原标题"还是两个文本输出的问题:"不利于论坛搜索 ───────────────── 版务记录 ───────────────── [ Last edited by HAT on 2008-10-4 at 13:48 ] |
|
| 第2楼 bat-zw | 发表于 2008-04-02 17:20 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
没人来试试吗? 我自己来抛砖引玉了,如下:
这个代码最大的问题就是效率的问题。 |
|
| 第3楼 Climbing | 发表于 2008-04-02 17:20 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
试试ruby吧,应该是很简单的事儿。
|
|
| 第4楼 bat-zw | 发表于 2008-04-02 18:36 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
简洁2楼代码并提高效率如下: [ Last edited by zw19750516 on 2008-4-2 at 06:40 PM ] |
|
| 第5楼 huahua0919 | 发表于 2008-04-02 18:39 |
| 银牌会员 发帖 780 积分 1,608 | |
|
!a:~2,50!
这样做是不是通用性就降低了 |
|
| 第6楼 bat-zw | 发表于 2008-04-02 18:54 |
| 金牌会员 发帖 1,276 积分 3,105 | |
增加通用性:Originally posted by huahua0919 at 2008-4-2 18:39: |
|
| 第7楼 zh159 | 发表于 2008-04-02 19:49 |
| 金牌会员 发帖 1,467 积分 3,687 | |
| 第8楼 terse | 发表于 2008-04-02 20:43 |
| 银牌会员 发帖 946 积分 2,404 | |
|
a和b文件行数不一样怎么办啊
@echo off for /f "tokens=1,2" %%i in (a.txt) do call :loop %%i %%j for /f "%n% tokens=1,2" %%i in (b.txt) do echo/%%j&echo/%%i for /f "%n% tokens=1,2" %%i in (a.txt) do echo/%%i&echo/%%j pause goto :eof :loop for /f "%n% tokens=1-3 delims=: " %%i in ('findstr /n .* "b.txt"') do ( set n=skip=%%i&set str=%%j if defined str (call set/p=%1 %%k<nul&echo.&call set/p=%2 %%str%%<nul&echo.) else call set/p=%1<nul&echo.&call set/p=%2<nul&echo. goto :eof ) 楼主回复 :行数不一样,就不存在用这种输出方式了 这样也可以: @echo off for /f "tokens=1,2" %%i in (a.txt) do set/p=%%i <nul&call :loop %%i %%j pause goto :eof :loop for /f "%n% tokens=1-3 delims=: " %%i in ('findstr /n .* "b.txt"') do ( set n=skip=%%i&set str=%%j&set/p=%%k<nul&echo. if defined str (call set/p=%2 %%str%%<nul&echo.) else call set/p=%2 %1<nul&echo. goto :eof ) [ Last edited by terse on 2008-4-2 at 09:04 PM ] |
|
| 第9楼 bat-zw | 发表于 2008-04-02 20:43 |
| 金牌会员 发帖 1,276 积分 3,105 | |
Originally posted by zh159 at 2008-4-2 19:49: |
|
| 第10楼 bat-zw | 发表于 2008-04-02 20:47 |
| 金牌会员 发帖 1,276 积分 3,105 | |
Originally posted by terse at 2008-4-2 20:43: 行数不一样,就不存在用这种输出方式了。 |
|
| 第11楼 bat-zw | 发表于 2008-04-02 23:53 |
| 金牌会员 发帖 1,276 积分 3,105 | |
|
继续提效: @echo off
|
|
| 第12楼 zh159 | 发表于 2008-04-03 00:10 |
| 金牌会员 发帖 1,467 积分 3,687 | |
Originally posted by zw19750516 at 2008-4-2 20:43: 不知道你试过了没有...... 你6楼代码测试: 开始时间:22:47:10.00 你11楼代码测试: 开始时间:22:52:40.00 我7 楼的代码测试 开始时间:22:47:20.00 测试方式: @echo off |
|
| 第13楼 bat-zw | 发表于 2008-04-03 00:31 |
| 金牌会员 发帖 1,276 积分 3,105 | |
Originally posted by zh159 at 2008-4-3 00:10: 是findstr的问题吗? |
|
| 第14楼 terse | 发表于 2008-04-03 02:18 |
| 银牌会员 发帖 946 积分 2,404 | |
|
就效率方面 应该是zh159兄的更胜一筹
|
|
| 第15楼 jvive | 发表于 2008-04-03 10:22 |
| 初级用户 发帖 17 积分 122 | |
|
本人测试过100000次if 否定判断用时1.63秒, 执行效率61349次/秒
call 空语句 10000次 用时10.907秒,执行效率917.496次/秒 findstr .* test.txt>nul 100次 用时3.55秒, 执行效率28.169次/秒 (test为 一个10行文字的文本文件) 附图: ![]() [ Last edited by jvive on 2008-4-13 at 01:02 PM ] |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |