Board logo

标题: 怎样把文件按要求分行 [打印本页]

作者: zouzhxi     时间: 2007-1-21 11:31    标题: 怎样把文件按要求分行

怎么样把下面的字分成一字一行,在每一行前面加一个空格.

  Quote:
啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹


作者: pengfei     时间: 2007-1-21 11:58
@echo off

setlocal enabledelayedexpansion

for /f "tokens=*" %%i in (test.txt) do call :go %%i

start "" result.txt

exit

:go

set num=0

set x=%*

:_go

>>result.txt echo  !x:~%num%,1!

set /a num+=1

if not "!x:~%num%,1!"=="" goto :_go

goto :eof
作者: jmz573515     时间: 2007-1-21 12:04

set ws=createobject("wscript.shell")
set fso=createobject("scripting.filesystemobject")
set ws=createobject("wscript.shell")
set file=fso.opentextfile("a.txt",1)
i=56789
do while file.AtEndOfStream <> True
yz=file.read(1)
s=s & " "& yz &" "& i& vbcrlf
i=i+1
loop
file.close
set file=fso.createtextfile("OUT.txt",true)
file.write s
file.close
Ws.run "notepad.exe OUT.TXT"
[ Last edited by jmz573515 on 2007-1-29 at 07:15 PM ]
作者: dikex     时间: 2007-1-21 12:07
将你些文字复制到file.txt文件里面
setlocal ENABLEDELAYEDEXPANSION

for /f "delims=" %%a in (file.txt) do (
   set str1=%%a
   for /l %%i in (0,1,10000) do (
      if "!str1:~%%i,1!"=="" exit
      echo+ !str1:~%%i,1!>>aa.txt
   )
)
1改0

[ Last edited by dikex on 2007-1-22 at 07:53 PM ]
作者: namejm     时间: 2007-1-21 12:12
  不启用变量延迟功能,在不考虑特殊字符的情况下,可以使用如下代码:
@echo off
echo.
echo     正在处理数据,请耐心等待...
cd.>result.txt
set num=56789
for /f "delims=" %%i in (test.txt) do set str=%%i

:intercept
if not "%str%"=="" (
    >>result.txt call echo  %str:~0,1% %%num%%
    set /a num+=1
    set str=%str:~1%
    goto intercept
)

start result.txt
  呵呵,还要求每行前面有一个空格,补上。

[ Last edited by namejm on 2007-1-22 at 09:19 AM ]
作者: mulinsen     时间: 2007-1-21 12:40
4楼, 5楼很不错的代码...

4楼直接嵌套循环, 速度快代码简洁.  5楼name兄代码速度很快, 考虑的情况为所有字符都在一行, 另外, 如果文件内容过多, 可能一个环境变量无法容纳下所有字符, 未经测试, 呵~
作者: namejm     时间: 2007-1-21 12:55
  5楼的代码仅针对楼主所提供的文本。仔细观察那段字符,其实处于同一行上,所以就偷了一下懒。其实要处理多行内容也是可以的,添上一个 call 语句就可以了。最近不怎么喜欢启用变量延迟,换成call来处理,为的是避免把文件中含有的感叹号过滤掉。

  4楼的代码通过计数来做也挺不错的,把终止值设置为大大超过变量所能接收的范围的10000,避免了处理不彻底的bug。但是这个代码还有一个小bug:把第一个字符抛弃了。解决办法是:把for /l 的初值设置为0。

[ Last edited by namejm on 2007-1-20 at 11:58 PM ]
作者: zouzhxi     时间: 2007-1-21 13:18
其实我发的是GB2312里的一部份文字,它们都在同一行的。好,4楼5楼的代码实在是太好了。
作者: namejm     时间: 2007-1-21 13:21
  3楼的vbs代码才是最快的。
作者: dikex     时间: 2007-1-21 23:51


  Quote:
Originally posted by namejm at 2007-1-20 11:55 PM:
  4楼的代码通过计数来做也挺不错的,把终止值设置为大大超过变量所能接收的范围的10000,避免了处理不彻底的bug。但是这个代码还有一个小bug:把第一个字符抛弃了。解决办法是:把for /l 的初值设置为0。

太大意了了,道行不够啊

另外看来要学学VBS了
作者: zouzhxi     时间: 2007-1-22 21:33
可是我要的就是BAT的呀...
上回打错字了,不是加空格,而是加上序号在后面加上如
(空格)啊(空格)56789
(空格)阿(空格)56790
....
从56789开始
作者: namejm     时间: 2007-1-22 22:21
  5楼代码已经更新,添加了序号列。
作者: huzixuan     时间: 2007-1-22 23:21
@echo off
setlocal ENABLEDELAYEDEXPANSION
for /f "delims=*" %%i in ('type file.txt') do call :do "%%i"
:do
set a=0
set b="%1"
:test
if not "!b:~%a%,1!"=="" (echo  !b:~%a%,1!>>bb.txt
set /a a+=1
goto test
)




为什么这样写会出现 “” “” ???


"
"










作者: lxmxn     时间: 2007-1-23 07:13
  我也来灌灌水 ^_^
@echo off&Setlocal EnableDelayedExpansion
set file=%random%.txt
set/p=<nul>%file%
set b=15789
for /f "delims=" %%a in (note.txt) do (
        set str=%%a
        set a=0
        call :loop !str!
)
start %file%
goto :eof

:loop
set str1=%1
if "!str1:~%a%,1!"=="" (goto :eof) else (>>%file% echo= !str1:~%a%,1! %b%
        set/a a+=1&set/a b+=1
        goto loop)

作者: redtek     时间: 2007-1-31 06:49
欣赏~~