标题: [文本处理] [已解决]批处理如何实现文本中字母排列组? [打印本页]
作者: shenlong 时间: 2015-10-8 21:15 标题: [已解决]批处理如何实现文本中字母排列组?
输入 24
输出以下结果到文本 1.txt中
A1 A2 A3 A4
B1 B2 B3 B4
A1A2 A2A3 A3A4
B1B2 B2B3 B3B4
A1B1 A2B2 A3B3 A4B4
这个结果看起来很有规律,感觉可以用 FOR /L 来解决,但是想了很久没做出来,
求各位帮忙,先行谢过!
作者: DAIC 时间: 2015-10-8 22:09
输入35,会怎样?
作者: shenlong 时间: 2015-10-9 14:35
回复 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
随着输入数值的改变而改变得到的 相交点和线.
作者: wankoilz 时间: 2015-10-10 17:24
本帖最后由 wankoilz 于 2015-10-10 22:19 编辑
- @echo off&setlocal enabledelayedexpansion
- set/p row=row:
- set/p col=col:
- set rowChar=$ABCDEF
- for /l %%a in (1,1,%row%) do (
- for /l %%b in (1,1,%col%) do (
- set row%%a=!row%%a!!rowChar:~%%a,1!%%b
- set col%%b=!col%%b!!rowChar:~%%a,1!%%b
- )
- )
- for /l %%a in (1,1,%row%) do echo !row%%a!
- for /l %%a in (1,1,%row%) do (
- set last=
- for %%b in (!row%%a!) do (
- if not "!last!"=="" set/p=!last!%%b <nul
- set last=%%b
- )
- echo;
- )
- for /l %%a in (2,1,%row%) do (
- for /l %%b in (1,1,%col%) do (
- set last=&set n=
- for %%c in (!col%%b!) do (
- set/a n+=1
- if !n! equ %%a set/p=!last!%%c <nul
- set last=%%c
- )
- )
- echo;
- )
- pause
复制代码
再来个awk的:- #&cls&@echo off&setlocal enabledelayedexpansion
- #&cls&set/p row=row:&set/p col=col:&set rowChar=$ABCDEF
- #&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
- #&cls&@gawk -f %0 a.txt>con&pause>nul&exit
-
- {for(i=1;i<=NF;i++){row[NR][i]=$i};print $0}
- END {
- for(i=1;i<=NR;i++){
- for(j=1;j<NF;j++){
- printf row[i][j]row[i][j+1]" "
- }
- print "\r"
- }
- for(i=1;i<NR;i++){
- for(j=1;j<=NF;j++){
- printf row[i][j]row[i+1][j]" "
- }
- print "\r"
- }
- }
复制代码
作者: shenlong 时间: 2015-10-11 13:22
本帖最后由 shenlong 于 2015-10-11 13:25 编辑
回复 4# wankoilz
非常感谢,问题已解决。
作者: terse 时间: 2015-10-12 01:23
第一个FOR里处理完 后面输出- @echo off&setlocal enabledelayedexpansion
- set row=3
- set col=5
- set str=$ABCDEF
- for /l %%a in (1,1,%row%) do (
- set a=&set "s="
- for /l %%b in (1,1,%col%) do (
- set "a%%a=!a%%a! !a!!str:~%%a,1!%%b"
- set "a=!str:~%%a,1!%%b"
- set "s=!s! !a!"
- set “c%%a=!c%%a! !b%%b!!a!“
- set ”b%%b=!a!“
- )
- echo!s!
- )
- for /l %%a in (1,1,%row%) do echo!a%%a:~3!
- for /l %%a in (2,1,%row%) do echo!c%%a!
- pause
复制代码
作者: wankoilz 时间: 2015-10-12 10:03
本帖最后由 wankoilz 于 2015-10-12 10:06 编辑
回复 6# terse
对terse兄的思路相当佩服!- set “c%%a=!c%%a! !b%%b!!a!“
- set ”b%%b=!a!“
复制代码
这两句很妙!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |