回 帖 发 新 帖 刷新版面

主题:我正尝试着编一个TXT分割程序,受阻,附上有错的代码,求助!

程序目的是将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个回复)

沙发

1、通道1打开后没有关闭。
2、i、i+2、i+3这样大循环不对。
3、"小说名称"是变量还是常量?依据你得文字说明看应该“第**章”才是分隔符号。
4、通道号码不需要那么多,只要不是同时使用。

板凳

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 楼


1 最后那句CLOSE,关不了1吗?2 我用i循环是因为想不出怎么给新创文件命不同的名。3那个字符串是常量。原本是“*第*章*”,但编完运行时出了错,就尝试了别的汉字字符串(结果还是一样),刚才贴过来的时候忘记改了。4这点我倒没注意到。这么说两个文件号就够了啊,呵呵!

4 楼


哇,好详细,可惜机房已经关了,我现在没法试。(我用手机呢。)有个问题:“第*章”不一定在该章的排头,例如前面可能有个数字编号之类的。

5 楼

那你一定要寻找一个可靠的分隔标志,不论多么复杂都不怕。但不可靠就会出问题。

6 楼

我专门为你这个问题发了一个新贴,请参考“按关键字分割文本”

7 楼


假如分割点是类似这样的东西怎么办?:
(1)第三章 传说
各位的代码好像都不能很好的解决,还有,为什么用不了LIKE关键字呢?

8 楼

不行哪,我把要分割的文件修改了再用以下代码(当然是把分割点的行全改成第*章了.),还是只能分出一个文件,里头还夹了很多乱码.
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 楼


呵呵,原来可以上传哪,我上传了,大家都试一下吧,看看问题在哪.http://file.pfan.cn/upfile/200806280942405.rar

10 楼

……没人能帮我么?

我来回复

您尚未登录,请登录后再回复。点此登录或注册