7,763
社区成员
发帖
与我相关
我的任务
分享
'引用Microsoft VBScript Regular Expressions 5.5
'窗体中两个textbox,一个按钮command1,text1存放原始数据,text2存放处理后的数据
Private Sub Command1_Click()
Dim re
Dim mc As MatchCollection
Dim m As Match
Dim i As Long
Dim sms As SubMatches
Dim j As Integer
Dim n As Integer
j = 0
Set re = New RegExp
re.Global = True
re.Pattern = "[\d]{8}([\d]{2})[\d]{2}.*\n.*" & SetPattern("", 60)
Set mc = re.Execute(Text1.Text)
Text2.Text = ""
For Each m In mc
'MsgBox m.Value
Set sms = m.SubMatches
If CInt(sms.Item(0)) >= j Then
If CInt(sms.Item(0)) <> j Then
For i = j To CInt(sms.Item(0)) - 1
Me.Caption = "正在处理" & i & "点的数据。"
DoEvents
For n = 1 To 60
Text2.Text = Text2.Text & "999999" & vbCrLf
Next n
Next i
End If
Me.Caption = "正在处理" & CInt(sms.Item(0)) & "点的数据。"
DoEvents
For i = 1 To sms.Count - 1
Text2.Text = Text2.Text & sms.Item(i) & vbCrLf
Next i
j = CInt(sms.Item(0)) + 1
End If
Set sms = Nothing
Next m
If j < 24 Then
For i = j To 23
Me.Caption = "正在处理" & i & "点的数据。"
DoEvents
For n = 1 To 60
Text2.Text = Text2.Text & "999999" & vbCrLf
Next n
Next i
End If
MsgBox "处理完毕!", vbInformation, "提示"
End Sub
Function SetPattern(Pattern As String, num As Integer) As String
If num = 1 Then SetPattern = Pattern & "\n[\d]{6} ([\d]{6}).*" Else SetPattern = Pattern & "\n[\d]{6} ([\d]{6}).*" & SetPattern(Pattern, num - 1)
End Function
Private Sub Command1_Click()
Dim ss$(), s1$(), s$, StrSS$, i&, j&, s2$, n&
ss = Split(Form1.RichTextBox1.Text, vbCrLf)
For i = 0 To UBound(ss)
If InStr(ss(i), " 02 60") = InStrRev(ss(i), " 02 60") And InStr(ss(i), " 02 60") > 0 Then
If 0 = InStr(s, ss(i)) Then
If s2 = "" Then
s2 = Format(Left(ss(i), 10) & "0101", "0000-00-00 00:00:00")
Else
n = DateDiff("h", s2, Format(Left(ss(i), 10) & "0101", "0000-00-00 00:00:00")) - 1
If n > 0 Then
For i1 = 1 To n * 60
StrSS = StrSS & "999999" & vbCrLf
Next i1
End If
s2 = Format(Left(ss(i), 10) & "0101", "0000-00-00 00:00:00")
End If
s = s & ss(i) & vbCrLf
i = i + 1
For j = i To UBound(ss)
If Len(ss(j)) > 7 Then
If InStr(ss(j), " 02 60") = InStrRev(ss(j), " 02 60") And InStr(ss(j), " 02 60") > 0 Then
i = j - 1: Exit For
Else
s1 = Split(ss(j), " ")
StrSS = StrSS & s1(1) & vbCrLf
End If
End If
Next j
End If
End If
Next i
'MsgBox StrSS
Open "d:\test.txt" For Output As #1: Print #1, StrSS: Close #1'路径自己按需修改
End Sub
Dim hFile As Long
Dim sFile As String
Dim tmp As String
Dim arrResult() As String
Dim x As Long, y As Long
Dim n As Long
Const LENGTH = 23 * 60 + 60 - 1 '0 to 1440-1
'初始化结果数组
ReDim arrResult(LENGTH)
For x = 0 To LENGTH
arrResult(x) = "999999"
Next x
'一次读取文本内容
hFile = FreeFile
Open "E:\test.txt" For Binary As hFile
sFile = Space(LOF(hFile))
Get #hFile, , sFile
Close
x = InStr(sFile, vbCrLf)
Do While x > 0
tmp = Trim(Mid(sFile, y + 1, x - y - 1)) '截取一断以vbcrlf分割的内容
If Len(tmp) > 0 Then '空字符串跳过
'如果前8个字符可以转换为日期
If IsDate(Format(Left(tmp, 8), "####-##-##")) Then
'取时间部分为结果数组的起始下标
n = Mid(tmp, 9, 2) * 60 '按示例60个一组
'下面这个判断是按示例做的,如果实际不同就自己找规律改
ElseIf tmp Like "###### ######" Then
arrResult(n) = Mid(tmp, InStr(tmp, Chr(32)) + 1) '取空格后面的字符
n = n + 1
End If
End If
y = x + 1
x = InStr(x + 1, sFile, vbCrLf)
Loop
'写入新文本
hFile = FreeFile
Open "E:\res.txt" For Output As hFile
Print #hFile, Join(arrResult, vbCrLf)
Close
Private Sub Command1_Click()
Dim ss$(), s1$(), s$, StrSS$, i&, j&, s2$, n&
ss = Split(Form1.RichTextBox1.Text, vbCrLf)
For i = 0 To UBound(ss)
If InStr(ss(i), " 02 60") = InStrRev(ss(i), " 02 60") And InStr(ss(i), " 02 60") > 0 Then
If 0 = InStr(s, ss(i)) Then
If s2 = "" Then
s2 = Format(Left(ss(i), 10) & "0101", "0000-00-00 00:00:00")
Else
n = DateDiff("h", s2, Format(Left(ss(i), 10) & "0101", "0000-00-00 00:00:00")) - 1
If n > 0 Then
For i1 = 1 To n * 60
StrSS = StrSS & "999999" & vbCrLf
Next i1
End If
s2 = Format(Left(ss(i), 10) & "0101", "0000-00-00 00:00:00")
End If
s = s & ss(i) & vbCrLf
i = i + 1
For j = i To UBound(ss)
If Len(ss(j)) > 7 Then
If InStr(ss(j), " 02 60") = InStrRev(ss(j), " 02 60") And InStr(ss(j), " 02 60") > 0 Then
i = j - 1: Exit For
Else
s1 = Split(ss(j), " ")
StrSS = StrSS & s1(1) & vbCrLf
End If
End If
Next j
End If
End If
Next i
MsgBox StrSS
End Sub
Private Sub Command1_Click()
Dim ss$(), s1$(), s$, StrSS$, i&, j&, s2$, n&
ss = Split(Form1.RichTextBox1.Text, vbCrLf)
For i = 0 To UBound(ss)
If InStr(ss(i), " 02 60") = InStrRev(ss(i), " 02 60") And InStr(ss(i), " 02 60") > 0 Then
If 0 = InStr(s, ss(i)) Then
If s2 = "" Then
s2 = Format(Left(ss(i), 10) & "0101", "0000-00-00 00:00:00")
Else
n = DateDiff("h", s2, Format(Left(ss(i), 10) & "0101", "0000-00-00 00:00:00"))
If n > 1 Then
For i1 = 1 To n * 60
StrSS = StrSS & "999999" & vbCrLf
Next i1
End If
s2 = Format(Left(ss(i), 10) & "0101", "0000-00-00 00:00:00")
End If
s = s & ss(i) & vbCrLf
i = i + 1
For j = i To UBound(ss)
If Len(ss(j)) > 7 Then
If InStr(ss(j), " 02 60") = InStrRev(ss(j), " 02 60") And InStr(ss(j), " 02 60") > 0 Then
i = j - 1: Exit For
Else
s1 = Split(ss(j), " ")
StrSS = StrSS & s1(1) & vbCrLf
End If
End If
Next j
End If
End If
Next i
MsgBox StrSS
End Sub
Private Sub Command1_Click()
Dim ss$(), s1$(), s$, StrSS$, i&, j&, s2$, n&
ss = Split(Form1.RichTextBox1.Text, vbCrLf)
For i = 0 To UBound(ss)
If InStr(ss(i), " 02 60") = InStrRev(ss(i), " 02 60") And InStr(ss(i), " 02 60") > 0 Then
If 0 = InStr(s, ss(i)) Then
If s2 = "" Then
s2 = Format(Left(ss(i), 10) & "0101", "0000-00-00 00:00:00")
Else
n = DateDiff("h", s2, Format(Left(ss(i), 10) & "0101", "0000-00-00 00:00:00"))
If n > 1 Then
For i1 = 1 To n
StrSS = StrSS & "999999" & vbCrLf
Next i1
End If
s2 = Format(Left(ss(i), 10) & "0101", "0000-00-00 00:00:00")
End If
s = s & ss(i) & vbCrLf
i = i + 1
For j = i To UBound(ss)
If Len(ss(j)) > 7 Then
If InStr(ss(j), " 02 60") = InStrRev(ss(j), " 02 60") And InStr(ss(j), " 02 60") > 0 Then
i = j - 1: Exit For
Else
s1 = Split(ss(j), " ")
StrSS = StrSS & s1(1) & vbCrLf
End If
End If
Next j
End If
End If
Next i
MsgBox StrSS
End Sub