Board logo

标题: 如何从一个文本文件拆分为多个文本文件? [打印本页]

作者: zhaoxf     时间: 2007-1-5 10:49    标题: 如何从一个文本文件拆分为多个文本文件?
原文件(test.txt):
**BEGIN FILE1 (注释:**BENGIN为标志,表示要从此处拆分;FILE1为拆分文件名)
aaaaaaaa ccc
bbbbbbbb cvcv
cccccccc cvcv
dddddddd tytyty
**END
**BEGIN FILE2(注释:**BENGIN为标志,表示要从此处拆分;FILE2为拆分文件名)
ggggggggggg gggg
hhhhhhhhh yyyyy
iiiiiiiiii tyty
**END
**BEGIN FILE3(注释:**BENGIN为标志,表示要从此处拆分;FILE3为要分文件名)
kdsfhkasdfh tyu
dfsdfsdfsdf tyu utyu
sdfsdfsdfadf 667676
**END

此时,需要根据**BEGIN来拆分为多个文本文件,**BENIN后面的FILE1/FILE2/FILE3等为文件名:

文件FILE1:
**BEGIN FILE1
aaaaaaaa ccc
bbbbbbbb cvcv
cccccccc cvcv
dddddddd tytyty
**END

文件FILE2:
**BEGIN FILE2
ggggggggggg gggg
hhhhhhhhh yyyyy
iiiiiiiiii tyty
**END

文件3:
**BEGIN FILE3
kdsfhkasdfh tyu
dfsdfsdfsdf tyu utyu
sdfsdfsdfadf 667676
**END

Last edited by zhaoxf on 2007-1-5 at 11:38 AM ]

作者: namejm     时间: 2007-1-5 10:56
  带星号的那些行是原文件里本来就有的吗?你所举的例子太过抽象,如果不介意,请发一段真正内容出来,并在适当的地方加上注释,说明意图,以便于构思代码。

作者: zhaoxf     时间: 2007-1-5 10:58
原文件(test.txt):
**BEGIN FILE1 (注释:**BENGIN为标志,表示要从此处拆分;FILE1为要拆分出的文件名)
aaaaaaaa ccc
bbbbbbbb cvcv
cccccccc cvcv
dddddddd tytyty
**END
**BEGIN FILE2(注释:**BENGIN为标志,表示要从此处拆分;FILE2为要拆分出的文件名)
ggggggggggg gggg
hhhhhhhhh yyyyy
iiiiiiiiii tyty
**END
**BEGIN FILE3(注释:**BENGIN为标志,表示要从此处拆分;FILE3为要拆分出的文件名)
kdsfhkasdfh tyu
dfsdfsdfsdf tyu utyu
sdfsdfsdfadf 667676
**END


感谢斑竹.

Last edited by zhaoxf on 2007-1-5 at 11:36 AM ]

作者: zhaoxf     时间: 2007-1-5 10:59
**BEGIN和**END 在原文件都有.

作者: zhaoxf     时间: 2007-1-5 11:02
付上我写的bat文件,可是有个很严重的问题,就是只能产生FILE1/FILE2/FILE3等文件,可是里面没有内容:

for /f "tokens=1, 2, 3, 4 delims=** " %%j in (test.txt) do (
if "%%j" == "BEGIN" ( >> "%%k" echo
)
)

作者: zhaoxf     时间: 2007-1-5 11:05
付上原文件和我写的BAT:
附件 1: test.zip (2007-1-5 11:05, 397 bytes, 下载附件所需积分 1点 ,下载次数: 34)

作者: 无奈何     时间: 2007-1-5 11:54
这样试试:

@echo off
setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%i in (spil.txt) do (
set tmp=%%i
if "!tmp:~0,7!" == "**BEGIN" (
set file=!tmp:*BEGIN =!
echo %%i>!file!
) else (
echo %%i>>!file!
)
)

作者: qzwqzw     时间: 2007-1-5 12:29
作者: tigerpower     时间: 2007-1-5 13:18
如文件名形如 !FILE1! ,!FILE2!,!FILE3!,则7楼代码需要打补丁:)

作者: zhaoxf     时间: 2007-1-5 20:53
感谢各位热心高人的指点。
感谢"无奈何"的源码提供。跑出来的结果完全成功!

感谢中国DOS联盟提供这样的热情论坛!

作者: 9527     时间: 2007-1-5 23:00
顺便提供另外一种方法,纯属灌水

@echo off&setlocal
for /f "tokens=1*" %%a in (fi.txt) do call :pp "%%a" "%%b"
goto :eof
:pp
if /i %1 equ "**BEGIN" (
>>%~2.txt echo %~1 %~2&set a=%~2.txt
) else (
>>%a% echo %~1 %~2
)
goto :eof

作者: jmz573515     时间: 2007-1-5 23:56
我也来灌水

set fso=createobject("scripting.filesystemobject")
set file=fso.opentextfile("a.txt",1)
do while file.AtEndOfStream <> True
m=file.readline
if left(m,12)="**BEGIN FILE" then
set cfile=fso.createtextfile(right(m,5),true)
end if
cfile.writeline m
loop
file.close

作者: ccwan     时间: 2007-1-6 00:56
作为对无奈何、9527、jmz573515三人灌水的惩罚,每人加5分。

作者: vkill     时间: 2007-1-6 01:50
sed 解决还是不错的

作者: lycai007     时间: 2007-5-2 15:22    标题: 如何从一个文本文件拆分为多个文本文件?
给可以发个例子和。BAT文件给我,谢谢了,ljchenghui@163.com

作者: fhtest     时间: 2007-11-21 16:52    标题: hao
好帖,谢谢楼主

作者: hongshi18     时间: 2009-1-29 11:00    标题: 标题: 如何从一个文本文件拆分为多个文本文件?
感谢中国DOS联盟

作者: cuihao1986     时间: 2009-7-6 20:38
不错!

作者: cuihao1986     时间: 2009-7-6 23:39
你好,我运行你写的程序
set fso=createobject("scripting.filesystemobject")
set file=fso.opentextfile ("a.txt",1)
do while file.AtEndOfStream <> True
m=file.readline
if left(m,12)="**BEGIN FILE" then
set cfile=fso.createtextfile(right(m,5),true)
end if
cfile.writeline m
loop
file.close

为什么会提示“此时不应有(”

不好意思,请教一下原因。谢谢。