| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 764 人关注过本帖
标题:请各位看看代码错在哪里?
只看楼主 加入收藏
xinshous
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2010-2-22
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
请各位看看代码错在哪里?
改自网上下载的一段代码
资质太差,还请不要见怪
要求:打开一数据文本
然后在打开一条件文本
根据条件文本数值,输出不同的文本文件
总是出错,短期内能力又无法快速提升
所以请大家帮一下忙,谢谢了  

Open fin For Input Access Read As #1
    Do While Not EOF(1)
        FileNumber = FreeFile       '获取一下可用的文件号
        Line Input #1, curLine      '读取一行
       ' fout = savePath + Mid$(curLine, CInt(txtVar.Text), CInt(txtVaren.Text) - CInt(txtVar.Text) + 1) + ".txt" '设置用于输出数据的文件名称
        yid = Val(Mid(curLine, CInt(txtVar.Text), CInt(txtVaren.Text) - CInt(txtVar.Text) + 1))
        
        Do While Not EOF(2)
         Open App.Path & "\" & "tj.txt" For Input As #2
            'OpFile.Text,打开的文件名。
           ' Do While Not EOF(1)
                Input #2, sid, a, b
                    '读入数据。
                    sIdNum = Val(Mid(yid, CInt(txtVaren.Text) - CInt(txtVar.Text) + 1)) '取出的ID值,如1046等。
        
        
         If sIdNum >= a And sIdNum <= b Then
        
        Open savePath + sid & ".txt" For Append Access Write As #FileNumber
                                                
            
        
       ' Open fout For Append Access Write As #FileNumber            '打开输出文件
        Print #FileNumber, curLine      '写入当前行
        Close #FileNumber               '关闭文件
   

   
     End If
   
    Loop
    Loop
     Close #1
     
    Close #2
    Set fso = Nothing
   
    MsgBox "文件处理完成。", vbInformation + vbOKOnly, "信息"
    Exit Sub
PROCESS_ERROR:
    MsgBox "发生了一个运行时错误: " + vbCrLf + Err.Description, vbOKOnly + vbExclamation, "错误"
End Sub
搜索更多相关主题的帖子: 代码 
2010-02-25 08:46
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
需要工程.

没有工程,这程序也没办法看.

测试用的数据.

授人于鱼,不如授人于渔
早已停用QQ了
2010-02-25 09:11
xinshous
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2010-2-22
收藏
得分:0 
文本数据分离.rar (15.88 KB)

程序原执行结果是将数据文件根据名称不同分解出多个文本文件
我加了个按钮,想要根据条件文本输出不同的汇总类型的文本
希望高手重新来做
2010-02-25 09:21
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
1\程序有点混乱,有点看不下去了.


    Open fin For Input Access Read As #1                    '有文件号1打开文件
    Do While Not EOF(1)
        FileNumber = FreeFile       '获取一下可用的文件号
        Line Input #1, curLine      '读取一行
       ' fout = savePath + Mid$(curLine, CInt(txtVar.Text), CInt(txtVaren.Text) - CInt(txtVar.Text) + 1) + ".txt" '设置用于输出数据的文件名称
        yid = Val(Mid(curLine, CInt(txtVar.Text), CInt(txtVaren.Text) - CInt(txtVar.Text) + 1))
        
        Do While Not EOF(2)            '没有在文件号2中打开文件,怎么就去判断文件号2 是否结束了呢?
         Open App.Path & "\" & "tj.txt" For Input As #2                '前面取过了未使用的文件号,这里强行指定文件号,会造成 文件号冲突,也就造成前面取文件号命令无效
            'OpFile.Text,打开的文件名。
           ' Do While Not EOF(1)
                Input #2, sid, a, b
                    '读入数据。
                    sIdNum = Val(Mid(yid, CInt(txtVaren.Text) - CInt(txtVar.Text) + 1)) '取出的ID值,如1046等。
        
        
         If sIdNum >= a And sIdNum <= b Then
        
        Open savePath + sid & ".txt" For Append Access Write As #FileNumber
                                                
            
        
       ' Open fout For Append Access Write As #FileNumber            '打开输出文件
        Print #FileNumber, curLine      '写入当前行
        Close #FileNumber               '关闭文件
   

   
     End If
   
    Loop
    Loop
     Close #1
     
    Close #2        '文件号2是在循环中打开的,那么关闭也必须要每个循环结束后关闭

-----------------------------------------------
你参考一下 https://bbs.bccn.net/thread-297903-1-1.html  最大值,最小值问题,盼望解决(结贴。。)
这个贴子



[ 本帖最后由 风吹过b 于 2010-2-25 09:59 编辑 ]

授人于鱼,不如授人于渔
早已停用QQ了
2010-02-25 09:54
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
我给个我的程序架构

1\判断输入的数据问题.这部分你有.
2\所用到的条件都读出来,放到数组里去.用动态数组来保存.这样执行速度会快一点.

3\打开数据文件. 每次读一行,然后取关键数据与 条件内容相比较,符合某一条,写入文件,然后再继续下一条.

4\结束.

如果你没有保存数据,那么每次需要与条件相比较时,就重读一下文件,那就是你现在这种的结构.

判断文件或目录存在,可以用 VB 内置函数 dir() ,不需要去抄着使用 FSO 对象.


(更高级的优化)
你读文件时,需要考虑文件中是否有空行,是否有与你所期望的数据不同的行?





收到的鲜花
  • xinshous2010-02-25 11:55 送鲜花  3朵   附言:谢谢,深受教诲

授人于鱼,不如授人于渔
早已停用QQ了
2010-02-25 10:05
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:20 
Private Sub Command1_Click()
On Error GoTo PROCESS_ERROR
    Dim FileNumber As Integer '可用的文件号
    Dim fin As String       '用于读取的数据文件
    Dim fout As String      '用于输出的文件
    Dim savePath As String  '文件保存路径
    Dim curLine As String   '当前读取的行
    Dim fso
   Dim yid As Double
     Dim a As Double
     Dim b As Double
    Dim sIdNum As Double
    Dim sid As String
   
    Set fso = CreateObject("Scripting.FileSystemObject")
   
    fin = Trim$(txtFile.Text)
    savePath = Trim$(txtPath.Text)
   
    If fso.FileExists(fin) = False Then
        MsgBox "您选择的数据文件无效,请重新选择!", vbExclamation, "信息"
        txtFile.SetFocus
        Exit Sub
    End If
   
    If Val(txtVar.Text) < 1 Then
        MsgBox "请输入有效的变量位数!", vbExclamation, "信息"
        txtVar.SetFocus
        Exit Sub
    End If
   
    If Len(savePath) = 0 And fso.FolderExists(savePath) = False Then
        MsgBox "你选择的文件保存路径无效,请重新选择!", vbExclamation, "信息"
        txtPath.SetFocus
        Exit Sub
    End If
   
    If Right$(savePath, 1) <> "\" Then savePath = savePath + "\"
   
    Open fin For Input Access Read As #1                        '打开数据文件

    Do While Not EOF(1)
        'FileNumber = FreeFile       '获取一下可用的文件号      '向下移到打开条件文件后再执行
        Line Input #1, curLine      '读取一行
       ' fout = savePath + Mid$(curLine, CInt(txtVar.Text), CInt(txtVaren.Text) - CInt(txtVar.Text) + 1) + ".txt" '设置用于输出数据的文件名称
        yid = Val(Mid(curLine, CInt(txtVar.Text), CInt(txtVaren.Text) - CInt(txtVar.Text) + 1))         '这里已处理
        Open App.Path & "\" & "tj.txt" For Input As #2
        FileNumber = FreeFile       '获取一下可用的文件号
            Do While Not EOF(2)
            
                'OpFile.Text,打开的文件名。
               ' Do While Not EOF(1)
                    Input #2, sid, a, b
                        '读入数据。
                        'sIdNum = Val(Mid(yid, CInt(txtVaren.Text) - CInt(txtVar.Text) + 1)) '取出的ID值,如1046等。    '无效处理,还导致下面一行错误
            
             'If sIdNum >= a And sIdNum <= b Then           '判断用的数据无效
            If yid >= a And yid <= b Then
                Open savePath + sid & ".txt" For Append Access Write As #FileNumber
                ' Open fout For Append Access Write As #FileNumber            '打开输出文件
                 Print #FileNumber, curLine      '写入当前行
                 Close #FileNumber               '关闭文件
            End If
        
            Loop
        Close #2
    Loop
   
    Close #1
    'Close #2           '移到循环内
    Set fso = Nothing
   
    MsgBox "文件处理完成。", vbInformation + vbOKOnly, "信息"
    Exit Sub
PROCESS_ERROR:
    MsgBox "发生了一个运行时错误: " + vbCrLf + Err.Description, vbOKOnly + vbExclamation, "错误"
    Close #1                        '如果出错,则关闭所有的文件,否则会导致下一次的再次出错
    Close #2
    Close #FileNumber

End Sub



授人于鱼,不如授人于渔
早已停用QQ了
2010-02-25 10:21
xinshous
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2010-2-22
收藏
得分:0 
很好,谢谢了,
发现0947未挑出来
是因为过程中0被忽略了么?
2010-02-25 11:53
m461945983
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-2-19
收藏
得分:0 
请问这些数据是在哪里使用的, 我是个菜鸟,麻烦大家交交啊!!!
2010-03-02 18:54
快速回复:请各位看看代码错在哪里?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032429 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved