如何将文本文件中的数字、英文字串、汉字分开?
C盘根目录下有1.txt文件,内容是1245qlkd中有在大453上不要是fgll了经在人有入国47999933不国这的xvccvvbv立折佣火98657qf五折方产677889册地笔方jiuopou战略地位757898095456ze望尘莫及xkhkllll师范院校直开幕
怎样将其中的数字、英文字串、汉字分开后显示在列表框里?
[解决办法]
用正则表达式
Private Sub Form_Load()Open "C:\1.txt" For Input As #1 b = "" Do Until EOF(1) Line Input #1, nextline b = b & nextline Loop Close #1 Text1.Text = bEnd SubPrivate Sub Command1_Click()Dim re As RegExp Dim mh As Match Dim mhs As MatchCollection Dim inpStr As String Dim i As Integer inpStr = Text1.Text Set re = New RegExp re.Pattern = "[a-z]+" re.Global = True Set mhs = re.Execute(inpStr) For i = 0 To mhs.Count - 1 Set mh = mhs(i) List1.AddItem mh.Value Next re.Pattern = "\d+" re.Global = True Set mhs = re.Execute(inpStr) For i = 0 To mhs.Count - 1 Set mh = mhs(i) List1.AddItem mh.Value Next re.Pattern = "\W+" re.Global = True Set mhs = re.Execute(inpStr) For i = 0 To mhs.Count - 1 Set mh = mhs(i) List1.AddItem mh.Value NextEnd Sub
[解决办法]
Option ExplicitPrivate Sub Command1_Click() Dim Data As String Data = GetData("C:\1.txt") '改为你要的文件名. 'Data = "1245qlkd中有在大453上不要是fgll了经在人有入国47999933不国这的xvccvvbv立折佣火98657qf五折方产677889册地笔方jiuopou战略地位757898095456ze望尘莫及xkhkllll师范院校直开幕" Dim i As Long Dim Index As Long Index = -1 Dim Str As String For i = 1 To Len(Data) Select Case Asc(Mid(Data, i, 1)) Case 48 To 57 If Index = 1 Then Str = Str & Mid(Data, i, 1) Else If Len(Str) <> 0 Then List1.AddItem Str Str = Mid(Data, i, 1) Index = 1 End If Case Is < 0 If Index = 2 Then Str = Str & Mid(Data, i, 1) Else If Len(Str) <> 0 Then List1.AddItem Str Str = Mid(Data, i, 1) Index = 2 End If Case Else If Index = 3 Then Str = Str & Mid(Data, i, 1) Else If Len(Str) <> 0 Then List1.AddItem Str Str = Mid(Data, i, 1) Index = 3 End If End Select Next If Len(Str) <> 0 Then List1.AddItem StrEnd Sub ''''''''''''''''*********************以下是方法Private Function GetData(ByVal FileName As String) As String Dim Arr() As Byte ReDim Arr(FileLen(FileName)) As Byte Open FileName For Binary As #1 Get #1, 1, Arr Close #1 GetData = ByteArrayToString(Arr) End FunctionPublic Function ByteArrayToString(bytArray() As Byte) As StringDim sAns As StringsAns = StrConv(bytArray, vbUnicode)ByteArrayToString = sAnsEnd Function
[解决办法]
以下代码是从文件中读字符串
Private Sub Form_Load()
Dim i As Integer, iLen As Integer
Dim iType As Integer, iTypePrev As Integer
Dim strText As String, strCh As String, strSub As String
Open "c:\1.txt" For Binary As #1 '读文件
strText = Input(LOF(1), 1)
Close #1
iLen = Len(strText)
For i = 1 To iLen '逐字符处理
strCh = Mid(strText, i, 1)
If IsNumeric(strCh) Then '数字
iType = 0
ElseIf Abs(AscW(strCh)) > 255 Then '汉字
iType = 1
Else '英文字符
iType = 2
End If
If iType <> iTypePrev Or i = iLen Then
Me.List1(iTypePrev).AddItem strSub '显示结果
iTypePrev = iType
strSub = strCh
Else
strSub = strSub & strCh
End If
Next
End Sub
[解决办法]
方法多了,简单的就用like
Dim s As String
Dim strNum As String, strAlp As String, strChr As String
Dim i As Long
Dim tmp As String
Open "d:\test.txt" For Binary As #1
s = Space(LOF(1))
Get #1, , s
Close
For i = 1 To Len(s)
tmp = Mid(s, i, 1)
If tmp Like "[0-9]" Then
strNum = strNum & tmp
ElseIf tmp Like "[a-zA-Z]" Then
strAlp = strAlp & tmp
Else
strChr = strChr & tmp
End If
Next
Debug.Print strNum
Debug.Print strAlp
Debug.Print strChr