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

[文本处理] [已解决]批处理是如何实现把文本内容的版式改变的呢?横版变竖版

  1. ::寒夜孤星写的
  2. @echo off&setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in (a.txt) do call:han "%%a"
  4. for /l %%a in (1,1,%Ye%) do set Xing= !Xing!
  5. for /f "delims=" %%a in (a.txt) do (
  6.         set Han=%%a%Xing%
  7.         for /l %%b in (0,1,%Ye%) do set #%%b=^|!Han:~%%b,1!!#%%b!
  8. )
  9. set/a Ye-=1
  10. (for /l %%a in (0,1,%Ye%) do echo !#%%a!)>b.txt
  11. exit
  12. :han
  13. set Han=%~1
  14. if defined Ye (set Gu=%Ye%) else set Gu=0
  15. :ye
  16. if "!Han:~%Gu%,1!"=="" (
  17.         if "%Ye%"=="" set Ye=%Gu%
  18.         if %Gu% gtr %Ye% set Ye=%Gu%
  19.         goto:eof
  20. )
  21. set/a Gu+=1
  22. goto:ye
  23. rem  用┇分割每行效果好
复制代码
以下是a 文本内容:
  将进酒—李白
君不见,黄河之水天上来,奔流到海不复回。
君不见,高堂明镜悲白发,朝如青丝暮成雪。
人生得意须尽欢,莫使金樽空对月。
天生我材必有用,千金散尽还复来。
烹羊宰牛且为乐,会须一饮三百杯。
岑夫子,丹丘生,将进酒,杯莫停。
与君歌一曲,请君为我侧耳听:
钟鼓馔玉不足贵,但愿长醉不复醒。
古来圣贤皆寂寞,唯有饮者留其名。
陈王昔时宴平乐,斗酒十千恣欢谑。
主人何为言少钱,径须沽取对君酌。
五花马,千金裘,呼儿将出换美酒,
与尔同销万古愁。
以下是处理后b文本的内容:
|与|五|主|陈|古|钟|与|岑|烹|天|人|君|君|
|尔|花|人|王|来|鼓|君|夫|羊|生|生|不|不|
|同|马|何|昔|圣|馔|歌|子|宰|我|得|见|见|将
|销|,|为|时|贤|玉|一|,|牛|材|意|,|,|进
|万|千|言|宴|皆|不|曲|丹|且|必|须|高|黄|酒
|古|金|少|平|寂|足|,|丘|为|有|尽|堂|河|—
|愁|裘|钱|乐|寞|贵|请|生|乐|用|欢|明|之|李
|。|,|,|,|,|,|君|,|,|,|,|镜|水|白
| |呼|径|斗|唯|但|为|将|会|千|莫|悲|天| 
| |儿|须|酒|有|愿|我|进|须|金|使|白|上| 
| |将|沽|十|饮|长|侧|酒|一|散|金|发|来| 
| |出|取|千|者|醉|耳|,|饮|尽|樽|,|,| 
| |换|对|恣|留|不|听|杯|三|还|空|朝|奔| 
| |美|君|欢|其|复|:|莫|百|复|对|如|流| 
| |酒|酌|谑|名|醒| |停|杯|来|月|青|到| 
| |,|。|。|。|。| |。|。|。|。|丝|海| 
| | | | | | | | | | | |暮|不| 
| | | | | | | | | | | |成|复| 
| | | | | | | | | | | |雪|回| 
| | | | | | | | | | | |。|。| 
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

你要想它是如何精确到每个字的,然后你就会明白它怎么横变竖
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

回复 2# ivor


    不懂……不懂……

TOP

本帖最后由 hanyeguxing 于 2012-4-27 14:05 编辑
  1. @echo off&setlocal enabledelayedexpansion&set Ye=0
  2. for /f "delims=" %%a in (a.txt) do set Han=%%a&call:Xing
  3. for /l %%a in (1,1,%Ye%) do set Gu= !Gu!
  4. for /f "delims=" %%a in (a.txt) do (
  5.         set Han=%%a%Gu%
  6.         for /l %%b in (0,1,%Ye%) do set #%%b=^|!Han:~%%b,1!!#%%b!
  7. )
  8. set/a Ye-=1
  9. (for /l %%a in (0,1,%Ye%) do echo;!#%%a!)>b.txt
  10. exit
  11. :Xing
  12. 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用来输出#变量组
说明:转换是通过追加与输出的顺序来实现的
1

评分人数

寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

回复 4# hanyeguxing
……
寒夜大大!您是我的偶像啊!
我第一次接触批处理就是因为看了您写的模仿进度条的代码,以前我以为dos没什么了不起。是您改变了我的看法,所以我现在在很努力的自学批处理。唉……
呜呜……我很菜……
我大概知道了您说的意思,不过我表示我还是好晕啊……批处理里里面也有变量组的吗?我去查查#号的作用……

TOP

回复 5# lijinpengying


    如果你说的变量组是指数组,那么没有。不过你可以自己写算法来模拟数组。

TOP

回复 5# lijinpengying


    批处理中本没有变量组这个概念,这里是指成批生成,具有类似的特征的一组变量。对这样的一组变量:
1,只要理解其中一个就可以了
2,一般具有相同变量名前缀,这样可以使用 set 变量名前缀 来返回查看等操作
3,生成比较简单,常用for /l来完成
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

把横板文字TXT拖入批,直接显示出来
  1. @echo off
  2. setlocal enableDelayedExpansion
  3. set "InTxt=%~s1"
  4. for /f "delims=" %%i in ('type "%InTxt%"')do (
  5.  set/aRow+=1,C=0
  6.  set "Str=%%i"
  7.  set "Str=!Str: = !"
  8.  set "Str=!Str:—= !"
  9.  CALL :XY Str !Row!
  10. )
  11. for /l %%r in (1 1 %Col%)do (
  12.  for /l %%c in (1 1 %Row%)do (
  13.   if not defined S%%c_%%r set "S%%c_%%r= "
  14.   set "SL%%r=!S%%c_%%r! !SL%%r!"
  15.  )
  16.  echo\!SL%%r!
  17. )
  18. pause
  19. goto :eof
  20. :XY Str %Row%
  21. if "!%1:~%C%,1!" neq "" (
  22.  set/aC+=1
  23.   if !C!0 gtr %Col%0 set/aCol=C
  24.  set "S%2_!C!=!%1:~%C%,1!"
  25.  goto :XY
  26. )
复制代码
1

评分人数

TOP

返回列表