![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-11 15:50 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [已结]批处理字符重排 |
| 可打印版本 1,071 / 14 |
| 第1楼 sady2009 | 发表于 2009-04-09 04:21 |
| 初级用户 发帖 60 积分 58 | |
|
[已结]批处理字符重排 有一文本文件a.txt 内容如下:
1,6,11 2,7,12 3,8,13 4,9,14 5,10,15 16,18,22 17,20,23 18,21,24 25,28,31 26,29,32 27,30,33 每一段行数不定,段与段中间有空行分割. 1,2,3不一定是数,这里只是代表一下. 要求处理后.输出 1 2 3 4 5 6 . (省略) 33 可以做到吗? [ Last edited by sady2009 on 2009-4-9 at 11:26 ] |
|
| 第2楼 26933062 | 发表于 2009-04-09 05:00 |
| 银牌会员 发帖 879 积分 2,268 | |
|
没看懂。
1,2,3不一定是数 那是什么? 每一段行数不定,段与段中间有空行分割,你的输出与段有什么关系? |
|
| 第3楼 dwj61909 | 发表于 2009-04-09 07:20 |
| 新手上路 发帖 10 积分 18 | |
|
写了一个 不知道行不行
xxxx.txt 就是输出结果
|
|
| 第4楼 freeants001 | 发表于 2009-04-09 07:58 |
| 中级用户 发帖 244 积分 330 来自 湖北 | |
| 第5楼 netbenton | 发表于 2009-04-09 08:06 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
@echo off
(for /f "tokens=1* delims=, " %%a in (a.txt) do echo %%a)>b.txt |
|
| 第6楼 sady2009 | 发表于 2009-04-09 09:34 |
| 初级用户 发帖 60 积分 58 | |
|
谢谢各位,问题还没能解决。
这个问题比较复杂. 我的思路是, 先将每一段分割开来(如何分割还没想到)。比如第一段分出来暂存为a1.txt 1,6,11 2,7,12 3,8,13 4,9,14 5,10,15 对这一段: @echo off&setlocal enabledelayedexpansion for /l %%m in (1,1,4) do ( set var=%%m for /f "tokens=1-3 delims=," %%x in (a1.txt) do (if !var! equ 1 (echo %%x>>b.txt) else if !var! equ 2 (echo %%y>>b.txt) else if !var! equ 3 (echo %%z>>b.txt)) ) 然后再对 第2,3,~n 段处理 最终形成 1 2 3 . 第个段行数是不确定的。 此处的1 2 3代表一段字符串,为了使问题简单化,才用数字暂代的。 处理后的结果必须按照顺序输出。楼上想的太简单了 3楼的朋友用数字是可行的。用字符串不合要求(可能是我的字串中含有:的关系)。 4楼的朋友运行出错,我也不太懂其他脚本语言。 不管怎样,非常感谢! [ Last edited by sady2009 on 2009-4-9 at 10:04 ] |
|
| 第7楼 freeants001 | 发表于 2009-04-09 09:56 |
| 中级用户 发帖 244 积分 330 来自 湖北 | |
| 第8楼 sady2009 | 发表于 2009-04-09 10:19 |
| 初级用户 发帖 60 积分 58 | |
|
呵,这里真是高手如云啊。
谢谢楼上的朋友。其本上达到目的,不过我的文本中某些字串中含有时间的. 比如 08:00 QETRWQET,09:00 tyiutyiti, 等,结果出来时间中间的":" 变没了。不过这个我可以自己做批处理加上。 另外再求更加优化的代码。生成的 临时文件太多了 ![]() [ Last edited by sady2009 on 2009-4-9 at 10:22 ] |
|
| 第9楼 26933062 | 发表于 2009-04-09 10:50 |
| 银牌会员 发帖 879 积分 2,268 | |
|
如果你的文本中有冒号有英文字母,应该给出一部分样本文件,再给出相应的成品文件,别人才好写代码。
|
|
| 第10楼 netbenton | 发表于 2009-04-09 12:27 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
不生成临时文件,不丢失冒号 [ Last edited by netbenton on 2009-4-9 at 10:59 ] |
|
| 第11楼 sady2009 | 发表于 2009-04-09 12:59 |
| 初级用户 发帖 60 积分 58 | |
|
非常谢谢。楼上的代码 完全符合我的要求。太棒了!
|
|
| 第12楼 26933062 | 发表于 2009-04-09 13:42 |
| 银牌会员 发帖 879 积分 2,268 | |
|
居然和10楼思路完全一样
[ Last edited by 26933062 on 2009-4-9 at 14:26 ] |
|
| 第13楼 netbenton | 发表于 2009-04-09 14:35 |
| 银牌会员 发帖 752 积分 1,916 来自 广西 | |
|
学习楼上的方法,再度精简 楼上让我学会了for /f "tokens=1-3 delims=," %%f in ("%%b") do ( 的用法,速度快了好多,谢谢 [ Last edited by netbenton on 2009-4-9 at 12:50 ] |
|
| 第14楼 26933062 | 发表于 2009-04-09 14:53 |
| 银牌会员 发帖 879 积分 2,268 | |
|
最好写成 findstr /n .* a.txt^&echo.^&echo.0: 以防止源文件最后一行不是空行。
'findstr /n .* a.txt^&echo.0: 比我的好多了,我的绕弯路了。。。 [ Last edited by 26933062 on 2009-4-9 at 15:04 ] |
|
| 第15楼 sady2009 | 发表于 2009-04-09 21:22 |
| 初级用户 发帖 60 积分 58 | |
Originally posted by netbenton at 2009-4-9 14:35: |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |