7,786
社区成员
发帖
与我相关
我的任务
分享
'先说一下此方法的理论.
'先设定此时数据是上升的(Flag=True 上升 Flag=False 下降).
'如果前一个数据与当前数相比,如果后一个数据比前一个数据大,那表示还在上升,接着读下一个数据.
'如果前一个数据与当前数相比,如果后一个数据比前一个数据小,那表示现在较入下降. flag=Flse,并且读出转入下降时的数据(即反转点)
Option Explicit
Private Sub Command1_Click()
Dim intMax As Integer, intMin As Integer, n As Integer
Dim strLine As String, strItems() As String
intMax = 0
intMin = 32767
Dim Flag As Boolean
Flag = True
Dim BakNumber As Double'保存已读出的前一个数据.用于与当前读出的数据进行比较
Open "c:\3.txt" For Input As #1
Line Input #1, strLine
strItems = Split(strLine, " ")
Me.Print strItems(1) '先读取第一个数据,将此数据写出.
BakNumber = strItems(1) '当前数据放入Baknumber中用于下一轮比较
Do Until EOF(1) '循环读取文本文件中的数据
Line Input #1, strLine
strItems = Split(strLine, " ")
If (Flag Xor CDbl((strItems(1)) > CDbl(BakNumber))) Then '此处为从第二个数据开始与前一个数据进行比较. 此处采用 xor 运算,表示如果 flag是True 而 当前数据与前一个数据比较是flase 或 flag是Flase而当前数据与前一个数据比较是True(即进行了反转)
Me.Print BakNumber ' 读出反转前的那个点,即反转点
BakNumber = strItems(1) '将当前数据放入 baknumber用于下一轮比较
Flag = Not Flag '上升下降标志进行 not 运算,表示数据进入相反运行通道
Else
BakNumber = strItems(1) '如果在上升或下降通道中,将当前数据放入Baknumber中用于下一轮比较
End If
Loop
Me.Print strItems(1) '读出最后一个数据
Close #1
End Sub
'将你的代码改了一下,这样输出的结果与你的结果不一致,这个应该是LZ想要的吧.
Option Explicit
Private Sub Command1_Click()
Dim intMax As Integer, intMin As Integer, n As Integer
Dim strLine As String, strItems() As String
intMax = 0
intMin = 32767
Dim Flag As Boolean
Flag = True
Dim BakNumber As Double
BakNumber = -1
Open "c:\3.txt" For Input As #1
Line Input #1, strLine
strItems = Split(strLine, " ")
Me.Print strItems(1)
Do Until EOF(1)
Line Input #1, strLine
strItems = Split(strLine, " ")
If (Flag Xor CDbl((strItems(1)) > CDbl(BakNumber))) Then
Me.Print BakNumber
Flag = Not Flag
Else
BakNumber = strItems(1)
End If
Loop
Me.Print strItems(1)
Close #1
End Sub
'这段代码是主要.
If (Flag Xor CDbl((strItems(1)) > CDbl(BakNumber))) Then
Me.Print BakNumber
Flag = Not Flag
Else
BakNumber = strItems(1)
End If
数据编号 最大值 最小值
1 531 531
2 545 531
3 545 321
4 545 211
5 545 122
6 545 10
7 545 10
8 545 9
9 545 9
10 1285 9
11 1285 1
当最大最小值改变时,打印改变的数值。
Option Explicit
Private Sub Command1_Click()
Dim intMax As Integer, intMin As Integer, n As Integer
Dim strLine As String, strItems() As String
intMax = 0
intMin = 32767
Open "c:\3.txt" For Input As #1
Do Until EOF(1)
Line Input #1, strLine
strItems = Split(strLine, " ")
If UBound(strItems) = 1 Then
n = Val(strItems(1))
If n > intMax Then
intMax = n
Debug.Print strLine
Else
If n < intMin Then
intMin = n
Debug.Print strLine
End If
End If
End If
Loop
Close #1
End Sub
结果:
1 531
2 545
3 321
4 211
5 121
6 10
8 9
10 1285
16 1