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

[文本处理] [已解决]求助:批处理如何实现数据重排?

[复制链接]
发表于 2013-1-10 00:34:22 | 显示全部楼层 |阅读模式
本帖最后由 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
<-------------------
------------------->
<-------------------
------------------->
<-------------------
....

评分

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

查看全部评分

 楼主| 发表于 2013-1-10 00:35:35 | 显示全部楼层
补充:每列数据输出到一个文件
发表于 2013-1-10 13:29:31 | 显示全部楼层

  1. @echo off&SetLocal EnableDelayEdexpansion&cd /d "%~dp0"
  2. set "num=10"
  3. set "file=0"
  4. for /f "delims=" %%a in (11.txt) do (
  5.   set /a n+=1
  6.   if not defined flag (
  7.     set "str=!str! %%a"
  8.     if "!n!" == "!num!" set /a file+=1&(echo !str!)>"F_!file!.txt"&set "str="&set "n=0"&set "flag=1"
  9.   ) else (
  10.     set "str=%%a !str!"
  11.     if "!n!" == "!num!" set /a file+=1&(echo !str!)>"F_!file!.txt"&set "str="&set "n=0"&set "flag="
  12.   )
  13. )
  14. pause
复制代码
发表于 2013-1-10 14:53:51 | 显示全部楼层
回复 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="

  )

)

不是很明白,能否解释一下
发表于 2013-1-10 15:17:14 | 显示全部楼层
回复 3# QIAOXINGXING


能稍微注解一下吗?!
 楼主| 发表于 2013-1-10 15:25:19 | 显示全部楼层
回复 3# QIAOXINGXING
谢谢,实现了:从左到右、从右到左、从左到右、从右到左。。。。

我之前表述有问题,现在代码是每行输出一个文件,我想每列输出一个文件,麻烦再改一下,谢谢
发表于 2013-1-10 16:34:06 | 显示全部楼层
本帖最后由 QIAOXINGXING 于 2013-1-10 17:00 编辑
回复  QIAOXINGXING
谢谢,实现了:从左到右、从右到左、从左到右、从右到左。。。。

我之前表述有问题 ...
lantern 发表于 2013-1-10 15:25

    你的意思是:
A1
A20
A21
A40
一个文件;
A2
A19
A22
A39
一个文件??
  1. @echo off&SetLocal EnableDelayEdexpansion&cd /d "%~dp0"
  2. set "num=10"
  3. for /f "delims=" %%a in (11.txt) do (
  4.   set /a n+=1
  5.   if not defined flag (
  6.     (echo;%%a)>>"F_!n!.txt"
  7.     if "!n!" == "!num!"  set "n=0"&set "flag=1"
  8.   ) else (
  9.     set /a m=num+1-n
  10.     (echo;%%a)>>"F_!m!.txt"
  11.     if "!n!" == "!num!" set "n=0"&set "flag="
  12.   )
  13. )
  14. pause
复制代码
发表于 2013-1-10 16:53:08 | 显示全部楼层
本帖最后由 QIAOXINGXING 于 2013-1-10 16:54 编辑

回复 5# xudaweb
若11.txt为:
1
2
3
4

执行代码:
  1. for /f "delims=" %%a in (11.txt) do (
  2.   set "str1=!str1! %%a"
  3.   set "str2=%%a !str2!"
  4. )
复制代码
则str1 为“1 2 3 4”,str2 为“4 3 2 1”

if defined () else () 的作用的就是:1-10行存储为str1显示,11-20行存储到str2显示,21-30行在存储到str1显示,依次类推。。。。。。
 楼主| 发表于 2013-1-10 17:00:24 | 显示全部楼层
你的意思是:
A1
A20
A21
A40
一个文件;
A2
A19
A22
A39
一个文件??
QIAOXINGXING 发表于 2013-1-10 16:34

谢谢大哥,万分感激,省了我不少工作时间
发表于 2013-1-10 17:49:41 | 显示全部楼层
回复 8# QIAOXINGXING


    如果需求是A1-A10为一列A20-A11是一列,以此类推,如何写呢
发表于 2013-1-10 20:08:51 | 显示全部楼层
回复 10# ccdevil


    可以同过把 echo !str! 替换为 for 语句实现:
  1. @echo off&SetLocal EnableDelayEdexpansion&cd /d "%~dp0"
  2. set "num=10"
  3. set "file=0"
  4. for /f "delims=" %%a in (11.txt) do (
  5.   set /a n+=1
  6.   if not defined flag (
  7.     set "str=!str! %%a"
  8.     if "!n!" == "!num!" (set /a file+=1
  9.       (for %%i in (!str!) do echo;%%i)
  10.       set "str="&set "n=0"&set "flag=1"
  11.     )
  12.   ) else (
  13.     set "str=%%a !str!"
  14.     if "!n!" == "!num!" (set /a file+=1
  15.       (for %%i in (!str!) do echo;%%i)
  16.       set "str="&set "n=0"&set "flag="
  17.     )
  18.   )
  19. )
  20. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
ccdevil + 1 厉害

查看全部评分

发表于 2013-1-10 20:11:33 | 显示全部楼层
谢谢大哥,万分感激,省了我不少工作时间
lantern 发表于 2013-1-10 17:00



    不客气。。
不过版规规定:
问题解决后,请编辑顶楼帖子在标题前面注明[已解决]
发表于 2013-1-11 09:40:50 | 显示全部楼层
回复 11# QIAOXINGXING


    非常感谢,帮了我这个新手很大的忙
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 00:37 , Processed in 0.023862 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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