主题:我正尝试着编一个TXT分割程序,受阻,附上有错的代码,求助!
xzcyr
[专家分:0] 发布于 2008-06-27 17:19:00
程序目的是将TXT在含特定字符的行分割。例如一部小说,将它在“第×章”处分开。
我的想法是使用LINE INPUT逐行将原文件读入,再写入预先创建的空文件里。使用LIKE检查是否含有指定的字(编程时为了方便,直接写在了代码里,没有使用文本框输入),若有,则另开文件,继续写入。可实际运行时,只能生成一个文件,且其中多出了很多乱码,这是怎么回事?鄙人只学了一学期VB,肯请指教!
我写的错误代码:
Private mubiao As String, chuan As String, haoma As Integer
Private Sub Command1_Click()
Dim i As Integer
haoma = 2
Open "D:\" & i + 2 & ".txt" For Append As #haoma
Do While Not EOF(1)
Line Input #1, chuan
If chuan Like "小说名称" Then
Close #haoma
haoma = haoma + 1
Open "D:\" & i + 3 & ".txt" For Append As #haoma
Print #haoma, chuan
Else
Print #haoma, chuan
End If
i = i + 1
Loop
Close
End Sub
Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub
Private Sub drive1_change()
Dir1.Path = Drive1.Drive
End Sub
Private Sub File1_Click()
mubiao = File1.Path & "\" & File1.FileName
Open mubiao For Input As #1
End Sub
回复列表 (共18个回复)
沙发
老大徒伤悲 [专家分:29120] 发布于 2008-06-27 17:55:00
1、通道1打开后没有关闭。
2、i、i+2、i+3这样大循环不对。
3、"小说名称"是变量还是常量?依据你得文字说明看应该“第**章”才是分隔符号。
4、通道号码不需要那么多,只要不是同时使用。
板凳
老大徒伤悲 [专家分:29120] 发布于 2008-06-27 18:12:00
Private mubiao As String
Private Sub Command1_Click()
Dim i As Integer, chuan As String 'chuan不在别的过程使用范围尽量搞小点
i = 1
Open mubiao For Input As #1
Open Left(mubiao, Len(mubiao) - 4) & i & ".txt" For Output As #2
'不是追加,追加是关闭后再次打开补写
'反正是关闭一章,在开新一章,不需要其他通道。
'原文件名称如果是“从零开始.txt”,另存的名称则为“从零开始1.txt”、“从零开始2.txt”……
Do While Not EOF(1)
Line Input #1, chuan
chuan = Trim(chuan)
If Left(chuan, 1) = "第" And Right(chuan, 1) = "章" Then
Close #2 '关闭原章节
i = i + 1
Open Left(mubiao, Len(mubiao) - 4) & i & ".txt" For Output As #2 '再开新章节
Print #2, chuan '写入第一行
Else
Print #2, chuan
End If
Loop
Close #2
Close #1
End Sub
Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub
Private Sub drive1_change()
Dir1.Path = Drive1.Drive
End Sub
Private Sub File1_Click()
mubiao = File1.Path & "\" & File1.FileName
End Sub
Private Sub Form_Load()
Command1.Enabled = False '没有选好文件前不准使用该按钮。
Command1.Caption = "分章另存"
End Sub
你试试看,路经我仍放到原来的文件架下了,没有像你那样放到d盘的根目录下。
3 楼
xzcyr [专家分:0] 发布于 2008-06-27 18:19:00
1 最后那句CLOSE,关不了1吗?2 我用i循环是因为想不出怎么给新创文件命不同的名。3那个字符串是常量。原本是“*第*章*”,但编完运行时出了错,就尝试了别的汉字字符串(结果还是一样),刚才贴过来的时候忘记改了。4这点我倒没注意到。这么说两个文件号就够了啊,呵呵!
4 楼
xzcyr [专家分:0] 发布于 2008-06-27 18:33:00
哇,好详细,可惜机房已经关了,我现在没法试。(我用手机呢。)有个问题:“第*章”不一定在该章的排头,例如前面可能有个数字编号之类的。
5 楼
老大徒伤悲 [专家分:29120] 发布于 2008-06-27 23:50:00
那你一定要寻找一个可靠的分隔标志,不论多么复杂都不怕。但不可靠就会出问题。
6 楼
一江秋水 [专家分:9680] 发布于 2008-06-28 07:44:00
我专门为你这个问题发了一个新贴,请参考“按关键字分割文本”
7 楼
xzcyr [专家分:0] 发布于 2008-06-28 08:57:00
假如分割点是类似这样的东西怎么办?:
(1)第三章 传说
各位的代码好像都不能很好的解决,还有,为什么用不了LIKE关键字呢?
8 楼
xzcyr [专家分:0] 发布于 2008-06-28 09:16:00
不行哪,我把要分割的文件修改了再用以下代码(当然是把分割点的行全改成第*章了.),还是只能分出一个文件,里头还夹了很多乱码.
Private mubiao As String
Private Sub Command1_Click()
Dim i As Integer, chuan As String
i = 1
Open mubiao For Input As #1
Open Left(mubiao, Len(mubiao) - 4) & i & ".txt" For Output As #2
Do While Not EOF(1)
Line Input #1, chuan
chuan = Trim(chuan)
If Left(chuan, 1) = "第" And Right(chuan, 1) = "章" Then
Close #2 '关闭原章节
i = i + 1
Open Left(mubiao, Len(mubiao) - 4) & i & ".txt" For Output As #2 '再开新章节
Print #2, chuan '写入第一行
Else
Print #2, chuan
End If
Loop
Close #2
Close #1
End Sub
Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub
Private Sub drive1_change()
Dir1.Path = Drive1.Drive
End Sub
Private Sub File1_Click()
mubiao = File1.Path & "\" & File1.FileName
End Sub
9 楼
xzcyr [专家分:0] 发布于 2008-06-28 09:45:00
呵呵,原来可以上传哪,我上传了,大家都试一下吧,看看问题在哪.http://file.pfan.cn/upfile/200806280942405.rar
10 楼
xzcyr [专家分:0] 发布于 2008-07-19 20:48:00
……没人能帮我么?
我来回复