美好的一天!我在visual basic 6.0中遇到了问题 目标是计算多少单词和字符。
例如:
电风扇
单词:2 人物:11
我已经完成了这个词的代码。
但我不知道如何计算角色。 谢谢!
无论如何,这是我的计算单词的代码:
Dim Counter As Integer
Dim StartPos As Integer
If Trim(Text1) = "" Then
NumOfWords = 0
Exit Sub
End If
Text1 = Trim(Text1) ' Remove All Spaces
NumOfWords = 1
For Counter = 1 To Len(Text1)
If Mid(Text1, Counter, 1) = " " Then
NumOfWords = NumOfWords + 1
End If
Next Counter
Text2.Text = NumOfWords
Text3.Text = Index
答案 0 :(得分:2)
在您的示例中,您只使用空格作为单词之间的分隔,因此您可以使用以下代码:
'1 form with:
' 1 textbox: name=Text1
' 2 command buttons: name=Command1 name=Command2
Option Explicit
Private Sub Command1_Click()
Dim lngWord As Long
Dim lngWords As Long, lngChars As Long
Dim strWord() As String
'split your text over each space
strWord = Split(Text1.Text, " ")
'count the words
lngWords = UBound(strWord)
'loop over all words and count the chars
lngChars = 0
For lngWord = 0 To lngWords
lngChars = lngChars + Len(strWord(lngWord))
Next lngWord
'show the results
ShowResults lngWords + 1, lngChars
End Sub
Private Sub Command2_Click()
Dim lngWords As Long, lngChars As Long
Dim strText As String
strText = Text1.Text
'count spaces
lngWords = Len(strText) - Len(Replace(strText, " ", ""))
'count all except spaces
lngChars = Len(strText) - lngWords
'show the results
ShowResults lngWords + 1, lngChars
End Sub
Private Sub Form_Load()
Text1.Text = "Electric Fan"
End Sub
Private Sub ShowResults(lngWords As Long, lngChars As Long)
MsgBox "Words: " & CStr(lngWords) & vbCrLf & "Chars: " & CStr(lngChars), vbInformation, "Count"
End Sub
Command1和Command2应该给出相同的结果。
Command1可能更容易理解,并为您提供一个包含所有单词的数组。 Command2代码较少:)
一些评论:
如果你想考虑其他角色,那么你可能必须编写自己的split()或者自己的replace()函数
答案 1 :(得分:1)
这是执行此操作的功能。按照我的预期编写它并不是那么明显。在这里,我假设你只想数字。但情况可能并非如此。有关ASCII字符代码的信息,请参阅http://www.vb6.us/tutorials/vb6-string-functions,并根据单词"字符"的含义修改代码。
Private Function countLetters(str As String) As Integer
Dim i As Long
Dim symbol As String
countLetters = 0
For i = 1 To Len(str)
symbol = Mid(str, i, 1)
If isLetter(symbol) Then
countLetters = countLetters + 1
End If
Next
End Function
Private Function isLetter(symbol As String) As Boolean
isLetter = (Asc(symbol) >= 65 And Asc(symbol) <= 90) Or (Asc(symbol) >= 97 And Asc(symbol) <= 122) Or Asc(symbol) >= 161
End Function
答案 2 :(得分:1)
您可以使用正则表达式非常接近MS Word的计数器,例如
lNumOfWords = CountWords(TextToCount)
Private Function CountWords(Text As String, Optional Pattern As String = "\S+") As Long
With CreateObject("VBScript.RegExp")
.Global = True
.MultiLine = True
.Pattern = Pattern
CountWords = .Execute(Text).Count
End With
End Function
要计算字符数(无空格),请使用
lNumOfChars = CountWords(TextToCount, "\S")
对于大字符串,可能是一种更高效的字数统计方法,就像这样
lNumOfWords = CountWords(TextToCount, "\b") \ 2
因为在分割边界(\b
模式)时,返回的匹配集合将仅包含空字符串。
有关VBScript正则表达式支持模式的更多信息here。