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

【练习-037】批处理去除文本行前后的空格

  因为论坛练习题系列中确实缺少37题(这是本人的过失),所以就
以本题来做为37题吧。有文本a.txt如下:
  1. amd cx qu      
  2.     k of woo is qmom                 
  3.       jm ko    ppp     oe    mie    tnnn           
  4.   sis              jb  
复制代码
  要求通过批处理去除文本行的前后空格(空格数是随机和末知的
,且都为半角空格),输出如下(行的前后请加上引号):
  1. "amd cx qu"
  2. "k of woo is qmom"
  3. "jm ko    ppp     oe    mie    tnnn"
  4. "sis              jb"
复制代码
  本题满分10分,原则上以思路为重,视情况加分。
       参考答案如下:
  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do set "a="&call :lp "$%%a$"
  3. pause>nul&goto :eof
  4. :lp
  5. for /f "tokens=1* delims= " %%a in ("%a%%~1") do set "str=%%b"&set "var="
  6. for %%a in (%str: = # %) do call,set "var=%%a%%var%%"
  7. if "%~1" neq "" (set "a=%var:#= %"&call :lp) else echo "%var:#= %"
复制代码


[ 本帖最后由 batman 于 2009-8-15 18:44 编辑 ]
***共同提高***

回复 2楼 的帖子

&&震撼!学习了。想不到变量扩展能强到如此地步,
但就是不明白其中的处理机制,希望有高人能明示
一二。
   另请大家不要局限于现有的解决方案,把思路充
分打开,“八仙过海各显神通”,这也是本人不断出
题的初衷了。
***共同提高***

TOP

回复 12楼 的帖子

逐字法效率一直是问题,这点是无法避免的。。。
***共同提高***

TOP

回复 5楼 的帖子

代码是否可以做如下修改(去掉两个for),但文本中如存在#字符这个代码就挂掉了:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=*" %%i in (a.txt) do (
  3.     set str=%%i
  4.     for %%a in (%%i) do set str1=%%a
  5.     call, set hh=%%str:!str1!=!str1!#%%
  6.     for /f "delims=#" %%x in ("!hh!") do echo "%%x"
  7. )
  8. pause
复制代码

[ 本帖最后由 batman 于 2009-8-15 20:42 编辑 ]
***共同提高***

TOP

&&修改下我顶楼的代码,顶楼原来是想通用一系列的技巧来简化代码,
结果是付出了效率上的代价,现提高代码运行效率如下:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (a.txt) do (
  3.     for /f "tokens=*" %%a in ("%%a") do set "str=%%a"&set "str=!str: = # !"&set "var="
  4.     for %%a in (!str!) do set "var=%%a!var!"
  5.     set "var=!var:#= !"
  6.     for /f "tokens=*" %%a in ("!var!") do set "str=%%a"&set "str=!str: = # !"&set "var="
  7.     for %%a in (!str!) do set "var=%%a!var!"
  8.     echo "!var:#= !"
  9. )
  10. pause>nul
复制代码
***共同提高***

TOP

返回列表