|
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)
|
|
2009-3-13 11:02 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
|
2009-3-13 11:08 |
|
|
tireless
银牌会员
积分 2025
发帖 1122
注册 2007-9-5
状态 离线
|
|
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 |
|