标题: [文本处理] [已解决]求助:批处理如何实现数据重排? [打印本页]
作者: lantern 时间: 2013-1-10 00:34 标题: [已解决]求助:批处理如何实现数据重排?
本帖最后由 lantern 于 2013-1-15 13:16 编辑
现有一列数据:A1~A30000(无规律),假如想分成10组(可自定),按如下格式重排,有什么快速的办法吗?
A1 A2 A3 A4 A5 A6 A7 A8 A9 A10
------------------->
A20 A19 A18 A17 A16 A15 A14 A13 A12 A11
<-------------------
A21 A22 A23 A24 A25 A26 A27 A28 A29 A30
------------------->
A40 A39 A38 A37 A36 A35 A34 A33 A32 A31
<-------------------
------------------->
<-------------------
------------------->
<-------------------
....
作者: lantern 时间: 2013-1-10 00:35
补充:每列数据输出到一个文件
作者: QIAOXINGXING 时间: 2013-1-10 13:29
- @echo off&SetLocal EnableDelayEdexpansion&cd /d "%~dp0"
- set "num=10"
- set "file=0"
- for /f "delims=" %%a in (11.txt) do (
- set /a n+=1
- if not defined flag (
- set "str=!str! %%a"
- if "!n!" == "!num!" set /a file+=1&(echo !str!)>"F_!file!.txt"&set "str="&set "n=0"&set "flag=1"
- ) else (
- set "str=%%a !str!"
- if "!n!" == "!num!" set /a file+=1&(echo !str!)>"F_!file!.txt"&set "str="&set "n=0"&set "flag="
- )
- )
- pause
复制代码
作者: ccdevil 时间: 2013-1-10 14:53
回复 3# QIAOXINGXING
if not defined flag (
set "str=!str! %%a"
if "!n!" == "!num!" set /a file+=1&(echo !str!)>"F_!file!.txt"&set "str="&set "n=0"&set "flag=1"
) else (
set "str=%%a !str!"
if "!n!" == "!num!" set /a file+=1&(echo !str!)>"F_!file!.txt"&set "str="&set "n=0"&set "flag="
)
)
不是很明白,能否解释一下
作者: xudaweb 时间: 2013-1-10 15:17
回复 3# QIAOXINGXING
能稍微注解一下吗?!
作者: lantern 时间: 2013-1-10 15:25
回复 3# QIAOXINGXING
谢谢,实现了:从左到右、从右到左、从左到右、从右到左。。。。
我之前表述有问题,现在代码是每行输出一个文件,我想每列输出一个文件,麻烦再改一下,谢谢
作者: QIAOXINGXING 时间: 2013-1-10 16:34
本帖最后由 QIAOXINGXING 于 2013-1-10 17:00 编辑
回复 QIAOXINGXING
谢谢,实现了:从左到右、从右到左、从左到右、从右到左。。。。
我之前表述有问题 ...
lantern 发表于 2013-1-10 15:25
你的意思是:
A1
A20
A21
A40
一个文件;
A2
A19
A22
A39
一个文件??- @echo off&SetLocal EnableDelayEdexpansion&cd /d "%~dp0"
- set "num=10"
- for /f "delims=" %%a in (11.txt) do (
- set /a n+=1
- if not defined flag (
- (echo;%%a)>>"F_!n!.txt"
- if "!n!" == "!num!" set "n=0"&set "flag=1"
- ) else (
- set /a m=num+1-n
- (echo;%%a)>>"F_!m!.txt"
- if "!n!" == "!num!" set "n=0"&set "flag="
- )
- )
- pause
复制代码
作者: QIAOXINGXING 时间: 2013-1-10 16:53
本帖最后由 QIAOXINGXING 于 2013-1-10 16:54 编辑
回复 5# xudaweb
若11.txt为:
执行代码:- for /f "delims=" %%a in (11.txt) do (
- set "str1=!str1! %%a"
- set "str2=%%a !str2!"
- )
复制代码
则str1 为“1 2 3 4”,str2 为“4 3 2 1”
if defined () else () 的作用的就是:1-10行存储为str1显示,11-20行存储到str2显示,21-30行在存储到str1显示,依次类推。。。。。。
作者: lantern 时间: 2013-1-10 17:00
你的意思是:
A1
A20
A21
A40
一个文件;
A2
A19
A22
A39
一个文件??
QIAOXINGXING 发表于 2013-1-10 16:34
谢谢大哥,万分感激,省了我不少工作时间
作者: ccdevil 时间: 2013-1-10 17:49
回复 8# QIAOXINGXING
如果需求是A1-A10为一列A20-A11是一列,以此类推,如何写呢
作者: QIAOXINGXING 时间: 2013-1-10 20:08
回复 10# ccdevil
可以同过把 echo !str! 替换为 for 语句实现:- @echo off&SetLocal EnableDelayEdexpansion&cd /d "%~dp0"
- set "num=10"
- set "file=0"
- for /f "delims=" %%a in (11.txt) do (
- set /a n+=1
- if not defined flag (
- set "str=!str! %%a"
- if "!n!" == "!num!" (set /a file+=1
- (for %%i in (!str!) do echo;%%i)
- set "str="&set "n=0"&set "flag=1"
- )
- ) else (
- set "str=%%a !str!"
- if "!n!" == "!num!" (set /a file+=1
- (for %%i in (!str!) do echo;%%i)
- set "str="&set "n=0"&set "flag="
- )
- )
- )
- pause
复制代码
作者: QIAOXINGXING 时间: 2013-1-10 20:11
谢谢大哥,万分感激,省了我不少工作时间
lantern 发表于 2013-1-10 17:00
不客气。。
不过版规规定:
问题解决后,请编辑顶楼帖子在标题前面注明[已解决]
作者: ccdevil 时间: 2013-1-11 09:40
回复 11# QIAOXINGXING
非常感谢,帮了我这个新手很大的忙
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |