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
到这里看看吧

http://www.cn-dos.net/forum/view ... t=csplit&page=2
作者: 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

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

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