分享
 
 
 

一些关于VB中字符串操作的问题和回答

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

提问:

假设我从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

--7-------------------------------------------------------------

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有