Board logo

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

作者: 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

  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
复制代码

作者: 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
一个文件??
  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
复制代码

作者: QIAOXINGXING    时间: 2013-1-10 16:53

本帖最后由 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显示,依次类推。。。。。。
作者: 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 语句实现:
  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
复制代码

作者: 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