AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VB编程

一些字符串操作的问题和回答

51自学网 http://www.wanshiok.com
提问:
假设我从Excel表格中复制了一些数据到剪贴板中,比如是这样一些信息:
Allen 12
Anderson 13
Douglas 12
Ohio 49

我怎样才能把这些名字和数字读进一个数组或者一个Grid框中呢?用Clipboard.GetText(vbCFText)只能一下子读入所有数据,而我希望一个一个地读。

回答:
新建一个项目,在窗体上放两个label和一个command。以下是代码:
Private Sub Command1_Click()
   Dim vTekst$

   vTekst$ = "Allen 12 "
   vTekst$ = vTekst$ & "Anderson 13 "
   vTekst$ = vTekst$ & "Bernard 14 "
   vTekst$ = vTekst$ & "Constance 15 "
   Label1.Caption = vTekst$

   Select Case Command1.Caption
   Case "Copy Clipboard"
     Clipboard.Clear
     Clipboard.SetText Label1.Caption
     Command1.Caption = "Put into Label"
   Case "Put into Label"
     Label2.Caption = GetPartofString(Clipboard.GetText, 1)
     Command1.Caption = "Copy Clipboard"

     'read in array
     Dim vText(7) As String
     Dim c%

     For c% = 0 To 7
       vText(c%) = GetPartofString(Clipboard.GetText, c% + 1)
     Next c%

     'show result
     For c% = 0 To 7
       MsgBox vText(c%)
     Next c%

End Sub

Private Function GetPartofString(source$, part%) As String
   Dim p%, c%, tmp$

   tmp$ = source$
   c% = 0
   Do
     p% = InStr(tmp, Chr(32))
     If p% <> 0 Then
       GetPartofString = Left(tmp, p% - 1)
       c% = c% + 1
       tmp = Right(tmp, Len(tmp) - p%)
     End If
   Loop While c% <> part%

End Function
--1-------------------------------------------------------------

提问:
我如何才能数出一个字符串中的字母数?举例来说:我想在用户按下OK时计算在Text1.Text中的字母数。

回答:
使用LEN(Text1.text)命令如何?你就可以得到长度……包括空格和其它非字母的字符。所以如果你希望去掉它们的话,必须要一个小函数来检查Text1.Text中的字符是否为真正的字母:

Public Function CountCharacters(source$) As Integer
   Dim counter%, t%
   Const Characters$ = "abcdefghijklmnopqrstuvwxyz"

   For t% = 1 To Len(source$)
     If InStr(Characters, LCase$(Mid$(source$, t%, 1))) <> 0 Then
       counter% = counter% + 1
     End If
   Next t%
   CountCharacters = counter%
End Function

使用时就象这样:
vString$ = "Testing .... about what?"
MsgBox CountCharacters(vString$)

--2-------------------------------------------------------------

提问:
有没有人知道怎样来做这样一个特殊的循环?我需要把一个字符串,比如“Hey how are you”,中的每个字母放到不同的变量中。例如对上面这句话,H放在A1中,e放在A2中,以此类推。谢谢你的帮助。

回答:
Dim vChar() as String

Sub PlaceInArray(source$)

Dim p%

For p% = 1 To Len(source$)
Redim Preserve vChar(p%)
vChar(p%) = Mid$(source$,p%,1)
Next p%
End Sub
在数组vChar的每一项中就分别是给出字符串的所有字母。

--3-------------------------------------------------------------

提问:
你怎样把一个文本文件中的单词一个一个读入字符串变量中?文件中每个单词都被空格分隔。

回答:
Dim vWords() as String

Sub SplitStringintoWords(bron$)
Dim c%, p%, t%, vCheck%
Dim TempBron$, tmp$

'把一行输入分成单词
   t% = 0
   TempBron$ = bron$
   For c% = 1 To Len(bron$)
     p% = InStr(TempBron$, Chr(32))
     If p% <> 0 Then
     ReDim Preserve vWords(t%)
       tmp = Left$(TempBron$, p% - 1)
       vWords(t%) = StripString(tmp)
       TempBron$ = Right$(TempBron$, Len(TempBron$) - p)
       t% = t% + 1
       c% = c% + p%
     End If
   Next c%
   ReDim Preserve vWords(t%)
   vWords(t%) = StripString(TempBron)

End Sub

首先你必须先读入一行文本,然后使用以上这个过程。在数组vWords中就是文本文件中的所有单词。如果你在读文件方面也需要帮助,告诉我。
--4-------------------------------------------------------------

提问:
我需要替换窗体上所有文本框中的某一个单词,应该怎么做?先说声谢谢了。

回答:
试试这个……

'在新窗体上放一个command和三个textbox,然后加入以下代码
'按F5运行,注意先把Command的caption改成"&Replace somebody with me"

Private Sub Command1_Click()
   Const vString$ = "testing for somebody on the net"
   Select Case Command1.Caption
   Case "&Replace text in all textboxes"
     Text1.Text = vString
     Text2.Text = vString
     Text3.Text = vString
     Command1.Caption = "&Replace somebody with me"
   Case "&Replace somebody with me"
     Call ChangeText
     Command1.Caption = "&Replace text in all textboxes"
   End Select

End Sub

Function sReplace(SearchLine As String, SearchFor As String, ReplaceWith As String)
   Dim vSearchLine As String, found As Integer

   found = InStr(SearchLine, SearchFor): vSearchLine = SearchLine
   If found <> 0 Then
     vSearchLine = ""
     If found > 1 Then vSearchLine = Left(SearchLine, found - 1)
     vSearchLine = vSearchLine + ReplaceWith
     If found + Len(SearchFor) - 1 < Len(SearchLine) Then _
       vSearchLine = vSearchLine + Right$(SearchLine, _
   Len(SearchLine) - found - Len(SearchFor) + 1)
   End If
   sReplace = vSearchLine

End Function

Private Sub ChangeText()
   Dim Control

   For Each Control In Form1.Controls
     If TypeOf Control Is TextBox Then
       Control.Text = sReplace(Control.Text, "somebody", "me")
     End If
   Next Control

End Sub
--5-------------------------------------------------------------

提问:
现在我有一个文本框来输入字符串。另外有60个文本框的控件数组,它们包含了我的一个字典。我设法检查字符串中的每一个单词,看它是否符合控件数组中的也就是字典中的单词。我在检验前不得不把标点全部去掉。如果整个句子都拼写对了,我发出一个消息,如果拼错了,发出另一个消息。
感谢所有对此提出的任何建议和想法。

回答:
假定你有一个文本框来输入单词,然后你对照一个数组来检查它们……你可以使用以下代码作为你的起点……但是请考虑把你的字典转换成一个数据库,因为当它成为一个真正的字典时,数据库工作起来快得多。

'on the general section
Dim vWords()
Dim Max%
Dim vCheckWord()

Private Form1_Load()
   Text1.SetFocus
   Text1.Text = "living in america but not really"
   Max% = 10

   'make array
   'you can use an ascii file to get the words
   Redim vCheckWord(Max)
   vCheckWord(0) = "walther"
   vCheckWord(1) = "musch"
   vCheckWord(2) = "america"
   vCheckWord(3) = "tilburg"
   vCheckWord(4) = "hallo"
   vCheckWord(5) = "testen"
   vCheckWord(6) = "testing"
   vCheckWord(7) = "really"
   vCheckWord(8) = "visual"
   vCheckWord(9) = "basic"

End Sub

Sub SplitStringintoWords(bron$)
Dim c%, p%, t%, vCheck%
Dim TempBron$, tmp$
Dim vOke As Boolean

'splitting the input into words
   t% = 0
   TempBron$ = bron$
   For c% = 1 To Len(bron$)
     p% = InStr(TempBron$, Chr(32))
     If p% <> 0 Then
     ReDim Preserve vWords(t%)
       tmp = Left$(TempBron$, p% - 1)
       vWords(t%) = StripString(tmp)
       TempBron$ = Right$(TempBron$, Len(TempBron$) - p)
       t% = t% + 1
       c% = c% + p%
     End If
   Next c%
   ReDim Preserve vWords(t%)
   vWords(t%) = StripString(TempBron)

'checking against spellingschecker
   vOke = False
   For c% = 0 To t%
     For vCheck% = 0 To Max
       If vCheckWord(vCheck%) <> vWords(c%) Then
         vOke = False
       Else
         vOke = True
         vCheck% = Max%
       End If
     Next vCheck%
     If Not vOke Then MsgBox vWords(c%)
     vOke = False
   Next c%

End Sub


Private Sub Text1_KeyPress(KeyAscii As Integer)
   If KeyAscii = 13 Then
     'split string into words
     Call SplitStringintoWords(Text1.Text)
   End If

End Sub

Function StripString(source As String) As String
Const Letters$ = "abcdefghijklmnopqrstuvwxyz"
Dim p%, tmp$

   tmp = source$
   For p% = 1 To Len(source$)
     If InStr(Letters, LCase(Mid$(source$, p%, 1))) = 0 Then
       Select Case p%
       Case 1
         tmp = Right$(source$, Len(source$) - p%)
       Case Len(source$)
         tmp = Left$(source$, Len(source$) - 1)
       Case Else
         tmp = Left$(source$, p%) & Right$(source$, Len(source$) - p%)
       End Select
     End If
   Next p%
   StripString = tmp

End Function

--6-------------------------------------------------------------

提问:
我需要帮助,如何判断一个文件名是否有后缀名,然后剥除这个后缀。原本我是想获得文件名,然后用另一个后缀名来把它存为一个备份文件。有没有一个方便的方法,不用搜索整个路径字符串中的“/”。

回答:
从路径字符串的后面向前查找第一个“/”,用Right$命令,这样你就可以得到文件名。
如果你要删掉后缀名,也这么做,只是查找第一个“.”而已。注意在W95中,文件名可以包括一个以上的“.”

可以使用这样的代码:
Dim p%

Function GetFileName(PathString$) As String

GetFileName = PathString
For p% = Len(PathString) To 0 Step -1
If Mid$(PathString,p%,1) = "/" then
GetFileName = Right$(PathString,p%)
Exit Function
End If
Next p%
End Function

 

 

 
上一篇:如何VB转换C代码中的高字和低字  下一篇:怎样把VC++代码转换成VB代码