首先读入C:\111.TXT111.TXT文件内容如下:-0.521
-2.65
-2.65
-1
0
5.6
12.5
-10.001
13.234
0.005
13.234
要求使用Line Input 逐行读入,每读一行就将该行的数值添加到数组X中,当读取完成后显示该数组的最大值与最小值,求一高效率的算法,谢谢

解决方案 »

  1.   

    Private Sub Command1_Click()
        Dim i As Long, m!, n!
        Dim a() As String
        
        Dim felenumTmp As Integer
        felenumTmp = FreeFile
            
        Open "C:\Documents and Settings\jinj\桌面\1.txt" For Input As #felenumTmp
        While EOF(felenumTmp) = False
            ReDim Preserve a(i)
            Line Input #felenumTmp, a(i)
            If Val(Trim(a(i))) < m Then m = Val(Trim(a(i)))
            If Val(Trim(a(i))) > n Then n = Val(Trim(a(i)))
            
            i = i + 1
        Wend
        Close #felenumTmp
        
        Debug.Print m, n
    End Sub
      

  2.   

    Option Explicit
    Dim i&, aa$, TmpStr#(), MinVal#, MaxVal#
    Private Sub Command1_Click()
       Open "c:\111.txt" For Input As #1
       i = 0: MinVal = 9999: MaxVal = 0
       While Not EOF(1)
          ReDim Preserve TmpStr#(i)
          Line Input #1, aa
          TmpStr(i) = CDbl(Val(aa))
          MinVal = IIf(TmpStr(i) <= MinVal, TmpStr(i), MinVal)
          MaxVal = IIf(TmpStr(i) >= MaxVal, TmpStr(i), MaxVal)
          i = i + 1
       Wend
       Close #1
       MsgBox "最小值:" & CStr(MinVal) & vbCrLf & "最大值:" & CStr(MaxVal)
    End Sub
      

  3.   

    有点小 Bug 更正Option Explicit
    Dim i&, aa$, TmpStr#(), MinVal#, MaxVal#
    Private Sub Command1_Click()
      Open "c:\111.txt" For Input As #1
      i = 0
      While Not EOF(1)
          ReDim Preserve TmpStr#(i)
          Line Input #1, aa
          TmpStr(i) = CDbl(Val(aa))
          If i = 0 Then MinVal = TmpStr(i): MaxVal = TmpStr(i)
          MinVal = IIf(TmpStr(i) <= MinVal, TmpStr(i), MinVal)
          MaxVal = IIf(TmpStr(i) >= MaxVal, TmpStr(i), MaxVal)
          i = i + 1
      Wend
      Close #1
      MsgBox "最小值:" & CStr(MinVal) & vbCrLf & "最大值:" & CStr(MaxVal)
    End Sub
      

  4.   

    Private Sub Command1_Click()
        Dim fso     As New FileSystemObject
        Dim srcIn   As TextStream
        Dim buf     As String
        Dim arry()  As String
        Set srcIn = fso.OpenTextFile("D:\111.txt", ForReading)
        buf = srcIn.ReadAll
        arry = Split(buf, vbCrLf)    Dim MinVal#
        Dim MaxVal#
        Dim i As Integer
        
        For i = 0 To UBound(arry())
          MinVal# = IIf(arry(i) <= MinVal#, arry(i), MinVal#)
          MaxVal# = IIf(arry(i) >= MaxVal#, arry(i), MaxVal#)
          i = i + 1
        Next
        MsgBox "最小:" & CStr(MinVal) & vbCrLf & "最大:" & CStr(MaxVal)
        srcIn.Close
        Set fso = Nothing
    End Sub
    我的效率会不会高点!为什么一定要一行一行的读数据?那样就会慢吧?
      

  5.   

    哈哈...回5F, 如果不是楼主要Line Input我会用下面方法打开文件,大文件的话,打开方式要比Line Input快N倍, 但因为要逐行比大小, 所以用这种方式或FSO打开文件都差不多.Private Sub Command1_Click()
       Open "c:\111.txt" For Input As #1
       aa = StrConv(InputB(LOF(1), 1), vbUnicode)
       Close #1
    End Sub
      

  6.   

    Private Sub Form_Load()
    Dim a()
    Dim i, vMax, vMin
    Dim s
    Open "c:\111.txt" For Input As #1
    While Not EOF(1)
    ReDim Preserve a(i)
    Line Input #1, a(i)
    If i = 0 Then
    vMax = Val(a(0))
    vMin = Val(a(0))
    Else
    If Val(a(i)) > vMax Then vMax = Val(a(i))
    If Val(a(i)) < vMin Then vMin = Val(a(i))
    Debug.Print vMax & Space(2) & vMin
    End If
    i = i + 1
    Wend
    MsgBox "最大值=" & vMax & "最小值=" & vMin
    End Sub
      

  7.   

    如果只要达到效果不一定要一行一行读入的话考虑以下方法
    Private Sub Command1_Click() 
      Open "c:\111.txt" For Input As #1 
      aa = StrConv(InputB(LOF(1), 1), vbUnicode) 
      Close #1 
      bb=split(aa,vbcrlf)'分割字符串为数组
      '懒的话就用两个FOR比较数组元素,或者找个算法,提高效率
    End Sub
      

  8.   

    每读一行就
    ReDim Preserve a(i)肯定不是‘高效’的算法…………
      

  9.   

    每读一行就 
    ReDim Preserve a(i) 
    肯定不是‘高效’的算法………… 完全同意下面代码如果是在大型文件中才能表现出效率
    Option Explicit
    Dim i&, aa$, TmpStr#(), MinVal#, MaxVal#, S
    Private Sub Command1_Click()
      Open "c:\111.txt" For Input As #1
      aa = StrConv(InputB(LOF(1), 1), vbUnicode)
      Close #1
      S = Split(aa, vbNewLine)
      ReDim Preserve TmpStr#(UBound(S))
      '**********************************
      Open "c:\111.txt" For Input As #1
      i = 0
      While Not EOF(1)
         Line Input #1, aa
         TmpStr(i) = CDbl(Val(aa))
         If i = 0 Then MinVal = TmpStr(i): MaxVal = TmpStr(i)
         MinVal = IIf(TmpStr(i) <= MinVal, TmpStr(i), MinVal)
         MaxVal = IIf(TmpStr(i) >= MaxVal, TmpStr(i), MaxVal)
         i = i + 1
      Wend
      Close #1
      MsgBox "最小值:" & CStr(MinVal) & vbCrLf & "最大值:" & CStr(MaxVal)
    End Sub
      

  10.   


    您这个代码有个BUG,在下面的文件中无法找到最小值,不过还是非常感谢14.573
    13.273
    20.
    14.273
    12.973
    20.
    13.973
    12.673
    20.
    13.673
    12.373
      

  11.   

    呵呵,是的,忘了赋初值
            Line Input #felenumTmp, a(i)
            If i = 0 Then
                m = Val(Trim(a(i)))
                n = Val(Trim(a(i)))
            End If
    昨天就看到,只不过下面有人给了,我就没改
      

  12.   

    感谢楼上几位,其实本帖求的算法只是我一个工程的一部分,本人是个门外汉,当初没有考虑到效率问题,所以那个工程就是用的Line Input逐行读入,然后再编辑的,没有什么特别的原因。感谢cbm666,让我学到了不少有用的知识