[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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 编辑 ]

温馨提示:

  跟刚刚发的:替换信息中n个空格为1个跳格一样,考set 的思路~
  弄得好,就不用一个个算了。
  所以也就没有特殊字符,单双字节字符混合 等的要求了~

如果出乎意料,那当然是~ 加满了!

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

TOP

batman发过了..不过俺没做过..做下看看

TOP

  1. @echo off&setlocal enabledelayedexpansion&for /f "delims=" %%i in (in.txt) do set p=                                                                                %%i&set p=!p:~-80!&echo !p:  = !
复制代码
1

评分人数

TOP

一次就中~ ^_^  
应该没有出乎意料的吧?

TOP

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

TOP

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

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

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

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

TOP

单字节 总一边多一格 ~

TOP


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

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

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

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

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

TOP

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

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

来个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&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

返回列表