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

[文本处理] 【练习】批处理实现英文歌词居中

[Promise don't come easy]
I should have known all along.
There was something wrong.
I just never read between the lines.
Then I woke up one day and found you on your way.
Leaving nothing but my heart behind.
What can I do to make it up to you.
Promises don't come easy.
But tell me if there's a way to bring you back home to stay.
Well I'd promises anything to you.
I've been walkin' around with my head hanging down.
Wondrin' what I'm gonna do.
'Cause when you walked out that door.


歌词内容如上,要求:

以cmd界面默认的80字符为一行,对歌词的每一样进行居中显示。
(batman以前给俺出的题,不知道他发过没?)

[ 本帖最后由 523066680 于 2009-10-7 17:35 编辑 ]

哈哈 我太天真了 有个@

TOP

re 17楼

你试过了吗?

TOP

1.从6楼的以前的帖看到了netbenton 用两边添加空格到80位为止的办法。学习了。
2.netbenton此次给的set 截取办法,没有考虑字符串内部的空格可能被替换。

[ 本帖最后由 523066680 于 2009-10-13 08:12 编辑 ]

TOP

汗,发帖才看到和 netbenton 的思路一样的 ^_^
技术问题请到论坛发帖求助!

TOP

:不用判断字符数
:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (1 1 20) do set "k=    !k!"
  3. for /f "tokens=* delims= " %%a in (a.txt) do (
  4.    set "str=%%a%k%"
  5.    set "str=!str:~0,79!"
  6.    set "str=!str:*%%a=!"
  7.    if "!str:~0,1!"==" " (set str=!str:  = !) else set "str="
  8.    echo !str!%%a
  9. )
  10. pause
复制代码
技术问题请到论坛发帖求助!

TOP

来个VBS的:
  1. '给本VBS取名为test.vbs
  2. '运行此VBS的方式:
  3. '在CMD下输入:cscript //nologo test.vbs
  4. Set objFSO = CreateObject("Scripting.FileSystemObject")
  5. Set objTextFile = objFSO.OpenTextFile("a.txt", 1)
  6. DO Until objTextFile.AtEndOfStream
  7.     strLine = objTextFile.ReadLine
  8.     intCha = (80 - Len(strLine))\2
  9.     strSpace = Space(intCha)
  10.     WSH.StdOut.WriteLine strSpace & strLine
  11. Loop
复制代码
(*^_^*)

TOP

  1. @echo off
  2. set "sp=                                                                                        " 80个空格
  3. for /f "delims=" %%a in (abc.txt) do (
  4.         set p=%sp%@#%%a
  5.         setlocal enabledelayedexpansion
  6.         set p=!p:~-81!
  7.         for /f "tokens=1 delims=@" %%b in ("!p:  = !") do endlocal&echo;%%b%%a
  8. )
  9. ::可以处理for /f 能读取到的任何半角字符
复制代码

[ 本帖最后由 netbenton 于 2009-10-12 21:21 编辑 ]

TOP

这只是一种想法 只要把标志符提前就好了
或者把-80 改为更大的 然后 用set的时候多截取空格就可以了
o(∩_∩)o...~~~
空间:http://hi.baidu.com/fair_jm
喜欢批处理的没事的话去逛逛哦~~

TOP

原帖由 基拉freedom 于 2009-10-7 20:13 发表

如果添加的空格前有一个字符
比如set p=t                                                                   %%a&set p=!p:~-80!
set p=!p:t  = !判断是不是会简单一点 没试过

不会吧...!p:~-80!截取时t不是爆炸了么...那么!p:t  = !怎么被替换?

TOP

建议大家时不时地就去复习一下“代码咨询&讨论版块批处理出题帖汇总整理”
http://bbs.bathome.net/thread-5417-1-1.html

温故而知新
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP


如果添加的空格前有一个字符
比如
  1. set p=t                                                                   %%a&set p=!p:~-80!
  2. set p=!p:t  = !
复制代码
判断是不是会简单一点 没试过
o(∩_∩)o...~~~
空间:http://hi.baidu.com/fair_jm
喜欢批处理的没事的话去逛逛哦~~

TOP

单字节 总一边多一格 ~

TOP

哦 刚刚我还没细看~  差一些~
以前做的时候是

strx+80空格
选前80个字符
把strx替换掉,剩下的是后面的空格
echo,%剩下的空格/2%%strx%

看到了netbenton那个,意料之外~

[ 本帖最后由 523066680 于 2009-10-7 18:32 编辑 ]

TOP

哈哈,不过不能有两个空格...我想想有没更好的办法
http://bbs.bathome.net/viewthrea ... hlight=%BE%D3%D6%D0
sed高手..findstr高手..

TOP

返回列表