标题: 求助!! 怎么样把一个文本内的多行拼接成一行
[打印本页]
作者: qinqong
时间: 2006-7-19 13:58
标题: 求助!! 怎么样把一个文本内的多行拼接成一行
问题是这样的,有一个文本文件,里而的内容如下
/lib/AdaptiveMQ.jar
/lib/AdaptiveMQ.jar
/lib/FIX.jar
我怎么才能把它放到另外一个文件中,其内容为:
/lib/AdaptiveMQ.jar ;/lib/AdaptiveMQ.jar ;/lib/FIX.jar
作者: zh159
时间: 2006-7-19 14:12
这几天也在编一些批处理,学习了一些简单的
Quote: |
@echo off
setlocal EnableDelayedExpansion
set N=1
for /f %%a in (原文本.txt) do (set New!N!=%%a
set /a N=!N! + 1)
echo %New1% ;%New2% ;%New3%>新文本.txt |
|
其中的 %New1%~%NewN% 根据行数增加递增
作者: qinqong
时间: 2006-7-19 14:15
如果我不知道原文本有多少行呢?怎么做急用,谢了
作者: bagpipe
时间: 2006-7-19 14:56
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in (原文件.txt) do (
if not defined a (set a=%%a) else (set a=!a!;%%a)
)
echo %a%>生成文件.txt
可以确定的是,如果文件长度过于太大绝对不成,因为cmd中SET设置变量是有一定要求的,也请高人想想这个批处理怎么写.....................楼主可以试试上面的代码,如果不成就说明文件长度过大
作者: qinqong
时间: 2006-7-19 15:01
好的谢谢了
作者: bagpipe
时间: 2006-7-19 15:05
测试完了告诉我一下结果
[
Last edited by bagpipe on 2006-7-19 at 15:07 ]
作者: namejm
时间: 2006-7-19 15:05
呵呵,bagpipe又出手了。
if not defined a (set a=%%a) else (set a=!a!;%%a)这句中的defined是什么意思?头一次看到这种用法,能不能把这条代码解释一下?
作者: qinqong
时间: 2006-7-19 15:21
恩,搞定了,好久没用过dos了,都忘的差不多了,多谢 bagpipe的帮忙
作者: doscc
时间: 2006-7-19 16:37
Quote: |
Originally posted by namejm at 2006-7-19 15:05:
呵呵,bagpipe又出手了。
if not defined a (set a=%%a) else (set a=!a!;%%a)这句中的defined是什么意思?头一次看到这种用法,能不能把这条代码解释一䠮.. |
|
意思就是说. 如果没有定议 a 就 执行 set a=%%a
如果定议了就 执行 else 后的语句!
作者: zh159
时间: 2006-7-19 18:17
Quote: |
@echo off
setlocal EnableDelayedExpansion
set N=1
for /f "delims=" %%a in (原文件.txt) do (set New!N!=%%a
set /a N=!N! + 1)
set /a N=%N%-1
echo echo %%New1%%>Temp.bat
if %N% LEQ 1 goto End
set M=2
:len
for /f "delims=" %%a in (Temp.bat) do set X=%%a
echo %X% ;%%New%M%%%^>新文件.txt>Temp.bat
set /a M=%M%+1
if %M% GTR %N% goto End
goto len
:End
call Temp.bat
del Temp.bat |
|
试过400行的没问题,500行就出错了,好像是for不下去了
,根本未执行到Temp.bat,效率比bagpipe的差,不过SET设置变量没有bagpipe的大
[
Last edited by zxcv on 2006-7-19 at 18:54 ]
作者: 3742668
时间: 2006-7-19 22:39
在批处理的实际应用中,建议不要使用太多的变量。
for /f "delims=" %i in (源文件.txt) do @set /p "var=%i;" <nul >>目标文件.txt
在命令提示符下运行。若要写到脚本中,更改%i为%%i。对于文本中出现引号的情况没有做出错处理。
作者: zh159
时间: 2006-7-19 22:52
还是3742668版主的厉害,我和bagpipe的500行就挂了,3742668版主的1200行还没问题
作者: bagpipe
时间: 2006-7-20 09:05
没想到SET /P还能够连续对接文本内容,自愧不如..............
作者: amao
时间: 2007-2-3 14:17
@sed -e :a -e "N;$!ba;s/ *\n/ ;/g;s/[ ;]*$//" test.txt
参考了无奈何斑竹的有关代码加以修改,3600行以上也可以。
[
Last edited by amao on 2007-2-3 at 02:58 PM ]
作者: jmz573515
时间: 2007-2-4 01:18
set fso=createobject("scripting.filesystemobject")
set file=fso.opentextfile("a.txt")
do while file.atendofstream<>true
s=s & file.readline & " ;"
loop
file.close
set file=fso.createtextfile("b.txt")
file.write left(s,len(s)-1)
file.close
msgbox "操作成功",4096
作者: dy2003310
时间: 2007-2-4 02:09
标题: 请教楼上各位兄弟
合并了1000或更多行以后,怎样将它们变成原来一行行的样子??
for /f "delims=;????" %i in (合并后.txt) do echo ????? >新的.txt
?????
作者: jmz573515
时间: 2007-2-4 03:35
16楼的兄弟,用VBS写的,请确保源文件中没有“;”符号。
set fso=createobject("scripting.filesystemobject")
set file=fso.opentextfile("b.txt")
s=file.readall
file.close
set file=fso.createtextfile("c.txt")
file.write replace(s,";",vbcrlf)
file.close
msgbox "还原成功",4096
作者: dy2003310
时间: 2007-2-4 08:34
标题: 谢谢jmz573515
先谢谢兄弟了
可痛苦的是我按上面各路高手合并后得到的恰恰有";"
作者: dy2003310
时间: 2007-2-4 08:51
标题: 噢,我搞错了,jmz573515兄,我刚才有点误解了你的意思
噢,
我搞错了,
jmz573515兄,
我刚才有点误解了你的意思
现在我按你的做法收到了如意的效果
再次谢谢
作者: amao
时间: 2007-2-4 17:33
sed "s/ ;/\n/g" 合并成一行的.txt> 输出结果单行的.txt
作者: vkill
时间: 2007-2-4 18:02
Quote: |
Originally posted by amao at 2007-2-4 17:33:
sed "s/ ;/\n/g" 合并成一行的.txt> 输出结果单行的.txt |
|
看不出是怎么实现的
作者: amao
时间: 2007-2-4 21:58
Quote: |
Originally posted by vkill at 2007-2-4 18:02:
看不出是怎么实现的 |
|
你把我前面合并的和这个拆分的执行一下就知道了。
作者: dy2003310
时间: 2007-2-5 00:59
标题: amao兄
Quote: |
Originally posted by amao at 2007-2-4 04:33 AM:
sed "s/ ;/\n/g" 合并成一行的.txt> 输出结果单行的.txt |
|
amao兄,怎么我的cmd说"sed"不是内外部命令呀??
暂时看不到希望的结果
请问amao兄的语句是保存成什么文件来执行的??
作者: amao
时间: 2007-2-5 02:24
RE dy2003310
sed 不是xp的内部命令
请搜索相关帖子,关键字sed
把语句保存成.bat批处理即可执行,当然要把 “合并成一行的.txt, 输出结果单行的.txt ”等改成相应的名字
作者: lbqldos
时间: 2007-2-5 03:41
Quote: |
Originally posted by 3742668 at 2006-7-19 09:39 AM:
在批处理的实际应用中,建议不要使用太多的变量。
[code]
for /f "delims=" %i in (源文件.txt) do @set /p "var=%i;" <nul >>目标文件.txt
[/co ... |
|
用 set/p “变量=显示内容”<nul 代替echo 显示内容,输出不自动换行,精彩,想不到set还可以这样用:D
[
Last edited by lbqldos on 2007-2-4 at 02:43 PM ]
作者: dy2003310
时间: 2007-2-7 07:12
标题: 谢谢 amao兄
谢谢 amao兄
正在学习