首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

怎么将文本文件中的数字、英文字串、汉字分开

2012-03-01 
如何将文本文件中的数字、英文字串、汉字分开?C盘根目录下有1.txt文件,内容是1245qlkd中有在大453上不要是fg

如何将文本文件中的数字、英文字串、汉字分开?
C盘根目录下有1.txt文件,内容是1245qlkd中有在大453上不要是fgll了经在人有入国47999933不国这的xvccvvbv立折佣火98657qf五折方产677889册地笔方jiuopou战略地位757898095456ze望尘莫及xkhkllll师范院校直开幕
怎样将其中的数字、英文字串、汉字分开后显示在列表框里?

[解决办法]
用正则表达式

VB code
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
[解决办法]
VB code
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

热点排行
Bad Request.