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
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
有点小 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
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 我的效率会不会高点!为什么一定要一行一行的读数据?那样就会慢吧?
哈哈...回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
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
如果只要达到效果不一定要一行一行读入的话考虑以下方法 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
每读一行就 ReDim Preserve a(i)肯定不是‘高效’的算法…………
每读一行就 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
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
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
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
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
我的效率会不会高点!为什么一定要一行一行的读数据?那样就会慢吧?
Open "c:\111.txt" For Input As #1
aa = StrConv(InputB(LOF(1), 1), vbUnicode)
Close #1
End Sub
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
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
ReDim Preserve a(i)肯定不是‘高效’的算法…………
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
您这个代码有个BUG,在下面的文件中无法找到最小值,不过还是非常感谢14.573
13.273
20.
14.273
12.973
20.
13.973
12.673
20.
13.673
12.373
Line Input #felenumTmp, a(i)
If i = 0 Then
m = Val(Trim(a(i)))
n = Val(Trim(a(i)))
End If
昨天就看到,只不过下面有人给了,我就没改