[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理如何实现文本中字母排列组?

输入 24

输出以下结果到文本 1.txt中

A1  A2  A3  A4
B1  B2  B3  B4

A1A2   A2A3   A3A4  
B1B2   B2B3   B3B4

A1B1   A2B2   A3B3  A4B4

这个结果看起来很有规律,感觉可以用 FOR /L 来解决,但是想了很久没做出来,
求各位帮忙,先行谢过!

输入35,会怎样?

TOP

回复 2# DAIC
输出 :
A1  A2  A3  A4  A5
B1  B2  B3  B4  B5
C1 C2  C3  C4  C5

A1A2   A2A3   A3A4  A4A5
B1B2   B2B3   B3B4  B4B5
C1C2  C2C3   C3C4  C4C5

A1B1   A2B2   A3B3  A4B4 A5B5
B1C1   B2C2  B3C3  B4C4 B5C5

        1     2     3     4      5
A    --|-----|----|-----|------|---
        |       |     |       |       |
B    --|-----|----|-----|------|---
        |       |     |       |       |
C    --|-----|----|-----|------|---
最终结果就是得到如图中的相交点和线. 输入 的数值代表横轴 A B C D E F ,纵轴 1 2 3 4 5 6 7 8 9 10
随着输入数值的改变而改变得到的 相交点和线.

TOP

本帖最后由 wankoilz 于 2015-10-10 22:19 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set/p row=row:
  3. set/p col=col:
  4. set rowChar=$ABCDEF
  5. for /l %%a in (1,1,%row%) do (
  6.     for /l %%b in (1,1,%col%) do (
  7. set row%%a=!row%%a!!rowChar:~%%a,1!%%b
  8. set col%%b=!col%%b!!rowChar:~%%a,1!%%b
  9.     )
  10. )
  11. for /l %%a in (1,1,%row%) do echo !row%%a!
  12. for /l %%a in (1,1,%row%) do (
  13. set last=
  14. for %%b in (!row%%a!) do (
  15.     if not "!last!"=="" set/p=!last!%%b <nul
  16.     set last=%%b
  17. )
  18. echo;
  19. )
  20. for /l %%a in (2,1,%row%) do (
  21. for /l %%b in (1,1,%col%) do (
  22.     set last=&set n=
  23.     for %%c in (!col%%b!) do (
  24. set/a n+=1
  25.         if !n! equ %%a set/p=!last!%%c <nul
  26. set last=%%c
  27.     )
  28. )
  29. echo;
  30. )
  31. pause
复制代码
再来个awk的:
  1. #&cls&@echo off&setlocal enabledelayedexpansion
  2. #&cls&set/p row=row:&set/p col=col:&set rowChar=$ABCDEF
  3. #&cls&(for /l %%a in (1,1,%row%) do (for /l %%b in (1,1,%col%) do set/p=!rowChar:~%%a,1!%%b <nul)&echo;)>a.txt
  4. #&cls&@gawk -f %0 a.txt>con&pause>nul&exit
  5. {for(i=1;i<=NF;i++){row[NR][i]=$i};print $0}
  6. END {
  7.     for(i=1;i<=NR;i++){
  8.     for(j=1;j<NF;j++){
  9.         printf row[i][j]row[i][j+1]" "
  10.     }
  11.     print "\r"
  12.     }
  13.     for(i=1;i<NR;i++){
  14.     for(j=1;j<=NF;j++){
  15.         printf row[i][j]row[i+1][j]" "
  16.     }
  17.     print "\r"
  18.     }
  19. }
复制代码
1

评分人数

TOP

本帖最后由 shenlong 于 2015-10-11 13:25 编辑

回复 4# wankoilz


    非常感谢,问题已解决。

TOP

第一个FOR里处理完 后面输出
  1. @echo off&setlocal enabledelayedexpansion
  2. set row=3
  3. set col=5
  4. set str=$ABCDEF
  5. for /l %%a in (1,1,%row%) do (
  6.     set a=&set "s="
  7.     for /l %%b in (1,1,%col%) do (
  8.         set "a%%a=!a%%a! !a!!str:~%%a,1!%%b"
  9.         set "a=!str:~%%a,1!%%b"
  10. set "s=!s! !a!"
  11.         set “c%%a=!c%%a! !b%%b!!a!“
  12.         set ”b%%b=!a!“
  13.     )
  14.     echo!s!
  15. )
  16. for /l %%a in (1,1,%row%) do echo!a%%a:~3!
  17. for /l %%a in (2,1,%row%) do echo!c%%a!
  18. pause
复制代码

TOP

本帖最后由 wankoilz 于 2015-10-12 10:06 编辑

回复 6# terse
对terse兄的思路相当佩服!
  1. set “c%%a=!c%%a! !b%%b!!a!“
  2. set ”b%%b=!a!“
复制代码
这两句很妙!

TOP

返回列表