找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 85720|回复: 20

[文本处理] [已解决]批处理如何将文本内容行倒排序?

[复制链接]
发表于 2011-4-26 20:52:04 | 显示全部楼层 |阅读模式
批处理如何将文本内容行倒排序?并输出到另外文本里

例如原文本内容:
2222
222v飞v
342
不同提供343

处理后:
不同提供343
342
222v飞v
2222

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-4-26 22:25:47 | 显示全部楼层
本帖最后由 zm900612 于 2011-4-26 23:45 编辑

小吹一下,我发现我貌似在算法方面小有天赋...
  1. @echo off&setlocal enabledelayedexpansion
  2. findstr /n .* 1.txt >2.txt
  3. set "str=[0-9][0-9][0-9][0-9]"
  4. (for /l %%a in (1 1 4) do (
  5.    for /f "tokens=1* delims=:" %%b in ('findstr "^^!str!:" 2.txt^|sort /r') do echo %%c
  6.    set str=!str:*]=!
  7. ))>b.txt
  8. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2011-4-26 23:28:36 | 显示全部楼层
sort这么好用吗?
打上编号,再倒过来就行了。
发表于 2011-4-26 23:46:14 | 显示全部楼层
修正了两处笔误。
发表于 2011-4-26 23:47:39 | 显示全部楼层

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (a.txt) do set "str="%%a" !str!"
  3. (for %%a in (!str!) do echo %%~a)>tem
  4. del /q a.txt&ren tem a.txt
  5. start a.txt
复制代码
 楼主| 发表于 2011-4-27 00:24:50 | 显示全部楼层
5# batman

版主您好,为什么这个批处理只能处理一半就退出了,不能完全处理,例如21.6KB的文本只能处理10.8KB,是不是需要修改一下代码?昨天我也发现另外一个批处理也是不能够完全处理,小文本可以处理,同样格式的大文本就无法执行处理了,不知道是代码咋回事
发表于 2011-4-27 00:34:18 | 显示全部楼层
因为变量长度有限。2楼代码已修正原先的两处笔误,试下有没有用
发表于 2011-4-27 00:36:07 | 显示全部楼层
本帖最后由 batman 于 2011-4-27 08:10 编辑

因为cmd中的变量名+值的字节数上限为8190,当文本足够大时,代码中的str变量就会发生溢出,修改如下:

  1. @echo off&setlocal enabledelayedexpansion
  2. set /a num=1
  3. for /f "delims=" %%a in (a.txt) do (
  4.      set /a n+=1,m=n%%100
  5.      if !m! equ 0 set /a num+=1
  6.      for %%b in (!num!) do set "str_%%b="%%a" !str_%%b!"
  7. )
  8. (for /l %%a in (%num%,-1,1) do (
  9.       for %%b in (!str_%%a!) do echo %%~b
  10. ))>tem
  11. del /q a.txt&ren tem a.txt
  12. start a.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-4-27 00:53:29 | 显示全部楼层
8# batman

好像还是不能正常处理
 楼主| 发表于 2011-4-27 00:56:26 | 显示全部楼层
2# zm900612

这个可以正常处理,很感谢大家的帮助
发表于 2011-4-27 01:01:01 | 显示全部楼层
1# wh1234567
  1. tac a.txt | more > b.txt
复制代码
http://bbs.bathome.net/thread-1114-1-1.html
发表于 2011-4-27 01:24:22 | 显示全部楼层
本帖最后由 batman 于 2011-4-27 01:25 编辑

9# wh1234567
代码中少写了一个do,笔误,已改正,应该能处理了。

你如果不是小白应该能够发现这个问题改正啊,晕。。。。
发表于 2011-4-27 06:42:04 | 显示全部楼层
12# batman


我以为只有我才常干这种事。。。
发表于 2011-4-27 11:22:34 | 显示全部楼层
我也凑凑热闹,好久没发贴子了,都快忘了,呵呵

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims=:" %%i in ('findstr /n .* 1.txt') do set

  3. str=%%i&&set _!str!=%%j&set /a n+=1
  4. :1
  5. echo !_%n%!
  6. set /a n-=1
  7. if %n% equ 0 (pause&goto :eof) else goto :1
复制代码
发表于 2011-4-27 12:30:06 | 显示全部楼层
14# wc726842270
处理超大文本不考虑效率是不行的,如果文本足够大,你这个代码估计最后没有结果出来。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 04:34 , Processed in 0.022088 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表