我现在有一个txt文件,在持续采集传感器数据过程中,存储达到指定值前10000个数据。
我希望可以持续写入数据,达到10000个后,每采集一个就删除最早的一个,保持10000个数据,最后达到指定值时,停止采集并停止写入,留存最后那10000个数据。
若采集的过程不会太长,可考虑先在内存做完,再一次写入txt文件。
用Queue可以简单达成你的需求,下面是sample code,请参考。
Private Sub LogLatestNValue(Optional ByVal N As Integer = 10000)
Dim ResultSet As New Queue(Of Decimal)
Dim dValue As Decimal = 0D
Do While True
dValue = GetSensorValue()
If ResultSet.Count = 10000 Then
ResultSet.Dequeue()
End If
ResultSet.Enqueue(dValue)
If dValue >= dTargetValue Then
Exit Do
End If
Loop
WriteRsultSet2Txt(ResultSet)
End Sub
Private Sub WriteRsultSet2Txt(ByVal ResultSet As Queue(Of Decimal))
Dim sResult As String = ""
Try
Do While True
If ResultSet.Count = 0 Then
Exit Do
End If
sResult += ResultSet.Dequeue().ToString() + Environment.NewLine
Loop
IO.File.WriteAllText(sTargetFileName, sResult)
Catch ex As Exception
End Try
End Sub
出于性能的考虑,建议你这么做。
定义一个10000长度的数组,以及一个叫做top的变量,初始的时候,它指向当前写入新数据的下标,top=0
先是正常插入数据,top每次+1,当top=9999之后,就让top=0,继续从数组开头写起,覆盖掉之前的值。
最后留存数据的时候,就从top~9999,再从0~top-1循环遍历数组。