中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [出题][限新手]将连续空格替换为一个<tab>键
作者:
标题: [出题][限新手]将连续空格替换为一个<tab>键 上一主题 | 下一主题
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『楼 主』:  [出题][限新手]将连续空格替换为一个<tab>键

只限新手
    现在有一个文本"1.txt",文本中有多行多列,列数不同,各列中是以空格为分隔符的,空格的数目不相同.
    要求:把1.txt中各列间的所有空格用一个<tab>键代替,并写入2.txt中.
    效果如下:
1.txt
1      2     3       4        5     6
1         2        3         4      5     6        7      8
1        2         3        4         5       6
1      2        3        4       5        6      7
1      2        3         4       5       6        7
2.txt
1       2       3       4       5       6
1       2       3       4       5       6       7       8
1       2       3       4       5       6
1       2       3       4       5       6       7
1       2       3       4       5       6       7
1.txt可用下面的代码来生成:
@echo off
setlocal enabledelayedexpansion
for /l %%a in (1 1 10) do (set "kong=!kong! ")
for /l %%a in (1 1 5) do (
  set /a num=!random!%%5+5
  set "str="
  for /l %%a in (1 1 !num!) do (
    set /a var=!random!%%5+5
    call set "str=!str!%%a%%kong:~0,!var!%%"
  )
  echo.!str!
)>>1.txt


2009-3-13 09:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
BaseCoder
初级用户





积分 20
发帖 13
注册 2009-1-5
状态 离线
『第 2 楼』:  


@echo off&setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (1.txt) do (
call :kp "%%i"
>>2.txt echo !all!
set all=
)
pause
:kp
set x=%~1
:lp
set a=%x:~,1%
set "x=%x:~1%
if not  "%a%"==" " set "all=!all!%a%        "
if defined x (goto lp) else (goto :eof)


   此帖被 +7 点积分      点击查看详情   
评分人:【 moniuming 分数: +7  时间:2009-3-13 11:26


2009-3-13 11:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 3 楼』:  


@echo off
(for /f "tokens=*" %%a in (1.txt) do call :sub %%a)>2.txt
pause
goto :eof

:sub
if "%2"=="" echo.%1&goto :eof
set /p =%1[tab]<nul
shift
goto :sub
[ Last edited by netbenton on 2009-3-13 at 18:50 ]

   此帖被 +15 点积分         点击查看详情   
评分人:【 moniuming 分数: +15  时间:2009-3-13 11:26




精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-3-13 11:08
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 4 楼』:  


@echo off
setlocal enabledelayedexpansion
(for /f "delims=" %%a in (1.txt) do (
  set str=
  for %%i in (%%a) do set str=!str![tab]%%i
  echo !str:*[tab]=!
))>2.txt
[ Last edited by tireless on 2009-3-13 at 12:32 ]

   此帖被 +13 点积分        点击查看详情   
评分人:【 moniuming 分数: +13  时间:2009-3-16 00:03


2009-3-13 12:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
BaseCoder
初级用户





积分 20
发帖 13
注册 2009-1-5
状态 离线
『第 5 楼』:  


set fso=createobject("scripting.filesystemobject")
set fc=fso.createtextfile("2.txt")
set f=fso.opentextfile("1.txt")
while f.atendofstream <> true
stro=f.readline
for i=0 to len(stro)
if mid(stro,i+1,1)<>" " then s=s&mid(stro,i+1,1)&"        "
next
fc.writeline s
s=""
wend


2009-3-14 05:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 6 楼』:  

点评一下:
2楼的通用性不高.
3楼shift的用法很好,能加的分都加了.
4楼是最普遍的方法了.
5楼的不敢评价...
感慨一下:看来论坛里的是牛人居多啊,竟然没什么新手来试试,唉...
帖一个另类的代码吧,效率不高:
@echo off
setlocal enabledelayedexpansion
for %%a in (1 2) do (
  type nul>%%a.txt
)
for /l %%a in (1 1 10) do (set "kong=!kong! ")
(
for /l %%a in (1 1 5) do (
  set /a num=!random!%%5+5
  set "str="
  for /l %%a in (1 1 !num!) do (
    set /a var=!random!%%5+5
    call set "str=!str!%%a%%kong:~0,!var!%%"
  )
  echo.!str!
)
)>1.txt
(
for /f "delims=" %%a in (1.txt) do (
  set "str="
  call :lp "%%a"
  echo.!str!
)
)>2.txt
for %%a in (1 2) do (
  echo.%%a.txt
  type %%a.txt
)
pause&goto :eof
:lp
for /f "tokens=1,*" %%a in (%1) do (
  if not "%%b"=="" (
    set "str=!str!%%a        "
    call :lp "%%b"
  ) else (
    set "str=!str!%%a"
  )
)


2009-3-16 00:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
asnahu
初级用户





积分 99
发帖 53
注册 2006-8-18
状态 离线
『第 7 楼』:  

方法和tireless一样;)
@ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "TOKENS=*" %%I IN (1.TXT) DO (
     SET "FOO=%%I"
     FOR %%A IN (%%I) DO (
        SET FOO=!FOO:%%A=%%A#!
        SET FOO=!FOO: =!
        SET FOO=!FOO:#=[TAB]!
     )
     ECHO.!FOO!
)
PAUSE>NUL


2009-8-16 07:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: