标题: [文本处理] [已解决]批处理是如何实现把文本内容的版式改变的呢?横版变竖版 [打印本页]
作者: lijinpengying 时间: 2012-4-27 09:42 标题: [已解决]批处理是如何实现把文本内容的版式改变的呢?横版变竖版
- ::寒夜孤星写的
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in (a.txt) do call:han "%%a"
- for /l %%a in (1,1,%Ye%) do set Xing= !Xing!
- for /f "delims=" %%a in (a.txt) do (
- set Han=%%a%Xing%
- for /l %%b in (0,1,%Ye%) do set #%%b=^|!Han:~%%b,1!!#%%b!
-
- )
- set/a Ye-=1
- (for /l %%a in (0,1,%Ye%) do echo !#%%a!)>b.txt
- exit
- :han
- set Han=%~1
- if defined Ye (set Gu=%Ye%) else set Gu=0
- :ye
- if "!Han:~%Gu%,1!"=="" (
- if "%Ye%"=="" set Ye=%Gu%
- if %Gu% gtr %Ye% set Ye=%Gu%
- goto:eof
- )
- set/a Gu+=1
- goto:ye
- rem 用┇分割每行效果好
复制代码
以下是a 文本内容:
将进酒—李白
君不见,黄河之水天上来,奔流到海不复回。
君不见,高堂明镜悲白发,朝如青丝暮成雪。
人生得意须尽欢,莫使金樽空对月。
天生我材必有用,千金散尽还复来。
烹羊宰牛且为乐,会须一饮三百杯。
岑夫子,丹丘生,将进酒,杯莫停。
与君歌一曲,请君为我侧耳听:
钟鼓馔玉不足贵,但愿长醉不复醒。
古来圣贤皆寂寞,唯有饮者留其名。
陈王昔时宴平乐,斗酒十千恣欢谑。
主人何为言少钱,径须沽取对君酌。
五花马,千金裘,呼儿将出换美酒,
与尔同销万古愁。
以下是处理后b文本的内容:
|与|五|主|陈|古|钟|与|岑|烹|天|人|君|君|
|尔|花|人|王|来|鼓|君|夫|羊|生|生|不|不|
|同|马|何|昔|圣|馔|歌|子|宰|我|得|见|见|将
|销|,|为|时|贤|玉|一|,|牛|材|意|,|,|进
|万|千|言|宴|皆|不|曲|丹|且|必|须|高|黄|酒
|古|金|少|平|寂|足|,|丘|为|有|尽|堂|河|—
|愁|裘|钱|乐|寞|贵|请|生|乐|用|欢|明|之|李
|。|,|,|,|,|,|君|,|,|,|,|镜|水|白
| |呼|径|斗|唯|但|为|将|会|千|莫|悲|天|
| |儿|须|酒|有|愿|我|进|须|金|使|白|上|
| |将|沽|十|饮|长|侧|酒|一|散|金|发|来|
| |出|取|千|者|醉|耳|,|饮|尽|樽|,|,|
| |换|对|恣|留|不|听|杯|三|还|空|朝|奔|
| |美|君|欢|其|复|:|莫|百|复|对|如|流|
| |酒|酌|谑|名|醒| |停|杯|来|月|青|到|
| |,|。|。|。|。| |。|。|。|。|丝|海|
| | | | | | | | | | | |暮|不|
| | | | | | | | | | | |成|复|
| | | | | | | | | | | |雪|回|
| | | | | | | | | | | |。|。|
作者: ivor 时间: 2012-4-27 12:02
你要想它是如何精确到每个字的,然后你就会明白它怎么横变竖
作者: lijinpengying 时间: 2012-4-27 12:07
回复 2# ivor
不懂……不懂……
作者: hanyeguxing 时间: 2012-4-27 13:58
本帖最后由 hanyeguxing 于 2012-4-27 14:05 编辑
- @echo off&setlocal enabledelayedexpansion&set Ye=0
- for /f "delims=" %%a in (a.txt) do set Han=%%a&call:Xing
- for /l %%a in (1,1,%Ye%) do set Gu= !Gu!
- for /f "delims=" %%a in (a.txt) do (
- set Han=%%a%Gu%
- for /l %%b in (0,1,%Ye%) do set #%%b=^|!Han:~%%b,1!!#%%b!
- )
- set/a Ye-=1
- (for /l %%a in (0,1,%Ye%) do echo;!#%%a!)>b.txt
- exit
- :Xing
- if not "!Han:~%Ye%,1!"=="" set/a Ye+=1&goto:Xing
复制代码
第一个for用来获取文本每行的字符数量,并使变量%Ye%为其最大值
第二个for用来生成同样数量连续的空白字符作为变量%Gu%
第三个for中:
set Han=%%a%Gu%使用%Gu%来补全每行
set #%%b=^|!Han:~%%b,1!!#%%b!依次截取每个字符追加入#变量组中
第四个for用来输出#变量组
说明:转换是通过追加与输出的顺序来实现的
作者: lijinpengying 时间: 2012-4-27 16:27
回复 4# hanyeguxing
……
寒夜大大!您是我的偶像啊!
我第一次接触批处理就是因为看了您写的模仿进度条的代码,以前我以为dos没什么了不起。是您改变了我的看法,所以我现在在很努力的自学批处理。唉……
呜呜……我很菜……
我大概知道了您说的意思,不过我表示我还是好晕啊……批处理里里面也有变量组的吗?我去查查#号的作用……
作者: gawk 时间: 2012-4-27 16:53
回复 5# lijinpengying
如果你说的变量组是指数组,那么没有。不过你可以自己写算法来模拟数组。
作者: hanyeguxing 时间: 2012-4-27 19:17
回复 5# lijinpengying
批处理中本没有变量组这个概念,这里是指成批生成,具有类似的特征的一组变量。对这样的一组变量:
1,只要理解其中一个就可以了
2,一般具有相同变量名前缀,这样可以使用 set 变量名前缀 来返回查看等操作
3,生成比较简单,常用for /l来完成
作者: cutebe 时间: 2012-4-27 23:34
把横板文字TXT拖入批,直接显示出来- @echo off
- setlocal enableDelayedExpansion
- set "InTxt=%~s1"
- for /f "delims=" %%i in ('type "%InTxt%"')do (
- set/aRow+=1,C=0
- set "Str=%%i"
- set "Str=!Str: = !"
- set "Str=!Str:—= !"
- CALL :XY Str !Row!
- )
- for /l %%r in (1 1 %Col%)do (
- for /l %%c in (1 1 %Row%)do (
- if not defined S%%c_%%r set "S%%c_%%r= "
- set "SL%%r=!S%%c_%%r! !SL%%r!"
- )
- echo\!SL%%r!
- )
- pause
- goto :eof
-
- :XY Str %Row%
- if "!%1:~%C%,1!" neq "" (
- set/aC+=1
- if !C!0 gtr %Col%0 set/aCol=C
- set "S%2_!C!=!%1:~%C%,1!"
- goto :XY
- )
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |