[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
再把老古董翻出来晒晒吧 :-P

第一眼看到这个题目
下意识就想到用find+sort
后来发现everest79 已经有了类似的解题思路了
东施效颦的事我可不想做
本来就想放弃的

再后来我突然又想起了阔别很久的文物程序fc
也把它翻出来晒晒后
证实思路是可行的
  1. @(for /f "tokens=1* delims=: " %%a in ('fc /lb10000 /n ?.txt %SystemDrive%\io.sys^|find ": "^|sort') do @echo.%%b)>out2.txt
复制代码
比everest79的代码简单一些倒是其次
最关键的是这是一个新的创意

本以为万事大吉
可是再再后来又注意到netbenton与everest79 的对话
发现无论如何也不明白everest79的代码
怎么就避免了netbenton所说的错行问题

因为sort是按文本顺序排序的
而且无法指定排序起始点
不能指定排序停止点
那么文本的内容必然会影响到文本的顺序
试验证实也确实如此

关键糟糕的是
我的代码也存在同样的问题
而且它也把两个文本行首的空格给过滤掉了
于是只好再翻翻doshelp
终于找到解法

用findstr给文本行加个文件名前缀
让sort可以按照我们的规矩“正常排序”
而文本行首的空格也给保留了

虽然使用了临时文件
而且也多了两句代码
但这是没办法的事情
何况效率也没大影响
索性就这样结束了吧
  1. @echo off
  2. for %%f in (1.txt 2.txt) do findstr $ %%f? > %temp%\~%%~nf.%~n0
  3. (for /f "tokens=2* delims=:" %%a in ('fc /lb10000 /n %temp%\~*.%~n0 %SystemDrive%\io.sys^|find ": "^|sort') do echo.%%b)>out3.txt
  4. del %temp%\~*.%~n0
复制代码
2

评分人数

    • zqz0012005: 吃的盐多,过的桥多,老成精了技术 + 1
    • batman: 高手一出手就知有没有PB + 10

TOP

49楼的代码刚看过
改了一个findstr
少了一个find
代码和思路都有创新
不过限于算法思想
对于两个以上的文本就无法实现交替输出了

另外
find /n /v "" 2.txt|more>tmp2 +2
可以改用
find /n /v "" <2.txt>tmp2
更好些
天的白色影子

TOP

楼上说的是递归算法吗?
也就是先a,c交替得到ac
再b,d交替得到bd
再ac,bd交替得到abcd
这是需要文件数是二的乘方吧

另外这只是原型代码
真正实用还要考虑一些细节
比如文本的末行没有\r\n
天的白色影子

TOP

返回列表