7,764
社区成员
发帖
与我相关
我的任务
分享
Private DataArr(1000) As String '保存每一行的数据
Private SubArr(100) As String '保存第一行分离后的每一列数据
Private ParaCount As Long '保存段落总数
Private RowCount(100) As Long '保存每一段落的行数
Private RowData2(100, 100) '保存每一段第二列的数据
'*************************************
'目的:按某个分隔符将文本分离成数组
'输入: Text 要分离的字符串
' Sige 分隔符
' Arr 数组 分离后的字符以此数组返回
'返回: 成功 True
' 失败 False
'*************************************
Public Function strApart(ByVal Text As String, ByVal Sige As String, Arr) As Boolean
On Error GoTo strApartErr
Dim strBegin
Dim Count As Long
strApart = True
strBegin = 1
Count = 0
For i = 1 To Len(Text)
If Mid(Text, i, Len(Sige)) = Sige Then
Count = Count + 1
Arr(Count) = Mid(Text, strBegin, i - strBegin)
strBegin = i + 1
End If
Next
If Len(Text) <> strBegin - 1 Then
Count = Count + 1
Arr(Count) = Mid(Text, strBegin)
End If
Arr(0) = Count
Exit Function
strApartErr:
Err.Clear
strApart = False
End Function
Private Function Merger(ByVal Text As String, ByVal Sige As String) As String
Dim isBol As Boolean
For i = 1 To Len(Text)
If Mid(Text, i, Len(Sige)) <> Sige Then
Merger = Merger & Mid(Text, i, Len(Sige))
isBol = False
Else
If isBol = False Then
Merger = Merger & Mid(Text, i, Len(Sige))
End If
isBol = True
End If
Next
End Function
Private Sub Command1_Click()
strApart Text1.Text, Chr(13), DataArr
For i = 1 To DataArr(0)
strApart Merger(DataArr(i), " "), " ", SubArr '对每一行进行分离
If SubArr(2) = "cm" And SubArr(3) = "BT" Then '找到每一段的起始行
ParaCount = ParaCount + 1 '保存段落数
RowCount(ParaCount) = SubArr(1) '保存每一段落的行数
If i + RowCount(ParaCount) > DataArr(0) Then
MsgBox "数据不全! 最后一段应该有" & SubArr(1) & "行,实际只有" & DataArr(0) - i & "行.对最后一段数据将进行调整."
RowCount(ParaCount) = DataArr(0) - i
End If
For j = i + 1 To i + RowCount(ParaCount)
strApart Merger(DataArr(j), " "), " ", SubArr
RowData2(ParaCount, j - i) = SubArr(3)
Next
End If
Next
For i = 1 To ParaCount '这里面就是列出所有第二列的数据
For j = 1 To RowCount(i)
MsgBox RowData2(i, j)
Next
Next
End Sub
Dim DataArr(1000) '设置一个数组,分别保存每一行的数据
'*************************************
'目的:按某个分隔符将文本分离成数组
'输入: Text 要分离的字符串
' Sige 分隔符
' Arr 数组 分离后的字符以此数组返回
'返回: 成功 True
' 失败 False
'*************************************
Public Function strApart(ByVal Text As String, ByVal Sige As String, Arr) As Boolean
On Error GoTo strApartErr
Dim strBegin
Dim Count As Long
strApart = True
strBegin = 1
Count = 0
For i = 1 To Len(Text)
If Mid(Text, i, Len(Sige)) = Sige Then
Count = Count + 1
Arr(Count) = Mid(Text, strBegin, i - strBegin)
strBegin = i + 1
End If
Next
If Len(Text) <> strBegin - 1 Then
Count = Count + 1
Arr(Count) = Mid(Text, strBegin)
End If
Arr(0) = Count
Exit Function
strApartErr:
Err.Clear
strApart = False
End Function
Private Sub Command1_Click()
strApart Text1.Text, Chr(13), DataArr '调用方法
'Data(0) 他的值是你的文本的总行数
'Data(1) 他的值是你的文本第一行的数据
'Data(2) 他的值是你的文本第二行的数据
'......
'Data(n) 他的值是你的文本第N行的数据
End Sub
'因为你的数据有时一个数一个数之间是一个空格,有的是二个空格,有的是三个空格,有的是四个空格.
'所以我用 strApart Text1.Text, "",DataArr 没有办法分离了.因为 "", " "," "\都不一样.
Option Explicit
'Const BUFFERSIZE = 100 '你的段落数量能够估计个上限吗,这里我偷个懒用固定数组了。
'Dim arrMax(1 To BUFFERSIZE) As Single '存放各段落中的最大值,所有段落中的最大值麻烦你自己写程序从这个数组中取出
Public Sub Main()
'Dim I As Integer
Call GetField
'For I = 1 To BUFFERSIZE
' Debug.Print arrMax(I)
'Next I
End Sub
Public Sub GetField()
Dim strLine As String
Dim intRowCount As Integer
Dim intRow As Integer
Dim sngFieldValue As Single
Dim sngMax As Single
Dim arrFields() As String
Dim I As Integer
Dim intFieldCount As Integer
Dim intParagraph As Integer
Open App.Path & "\DATA.TXT" For Input As #1
Open App.Path & "\RESULT.TXT" For Output As #2
Do Until EOF(1)
For I = 1 To 6 '读取六行,但只保留最后一行
Line Input #1, strLine
Next I
'发现段落开始
'If InStr(strLine, "cm") Then
intParagraph = intParagraph + 1 '给段落编个号
intRowCount = Val(Split(strLine, , 1)(0)) '取出本段落总行数
For intRow = 1 To intRowCount '依次读各行
Line Input #1, strLine
'将一行分割放入数组中
arrFields = Split(strLine)
'找出第二列的值
intFieldCount = 0
For I = 0 To UBound(arrFields)
If arrFields(I) <> "" Then
intFieldCount = intFieldCount + 1
If intFieldCount = 2 Then '哈,第二列,we got it!
sngFieldValue = Val(arrFields(I))
Exit For
End If
End If
Next I
'将本段落的最大值存入数组中
If intRow = 1 Then
sngMax = sngFieldValue
ElseIf sngMax < sngFieldValue Then
sngMax = sngFieldValue
End If
Next intRow
Write #2, sngMax
'End If
Loop
Close #1
Close #2
End Sub