一些字符串操作的问题和回答
2006-02-27 11:41:41 来源:WEB开发网核心提示:提问:假设我从Excel表格中复制了一些数据到剪贴板中,比如是这样一些信息:Allen12Anderson13Douglas12Ohio49我怎样才能把这些名字和数字读进一个数组或者一个Grid框中呢?用Clipboard.GetText(vbCFText)只能一下子读入所有数据,一些字符串操作的问题和回答,而我希望一
提问:
假设我从Excel表格中复制了一些数据到剪贴板中,比如是这样一些信息:
Allen12
Anderson13
Douglas12
Ohio49
我怎样才能把这些名字和数字读进一个数组或者一个Grid框中呢?用Clipboard.GetText(vbCFText)只能一下子读入所有数据,而我希望一个一个地读。
回答:
新建一个项目,在窗体上放两个label和一个command。以下是代码:
PRivateSubCommand1_Click()
DimvTekst$
vTekst$="Allen12"
vTekst$=vTekst$&"Anderson13"
vTekst$=vTekst$&"Bernard14"
vTekst$=vTekst$&"Constance15"
Label1.Caption=vTekst$
SelectCaseCommand1.Caption
Case"CopyClipboard"
Clipboard.Clear
Clipboard.SetTextLabel1.Caption
Command1.Caption="PutintoLabel"
Case"PutintoLabel"
Label2.Caption=GetPartofString(Clipboard.GetText,1)
Command1.Caption="CopyClipboard"
'readinarray
DimvText(7)AsString
Dimc
Forc=0To7
vText(c)=GetPartofString(Clipboard.GetText,c 1)
Nextc
'showresult
Forc=0To7
MsgBoxvText(c)
Nextc
EndSub
PrivateFunctionGetPartofString(source$,part)AsString
Dimp,c,tmp$
tmp$=source$
c=0
Do
p=InStr(tmp,Chr(32))
Ifp<>0Then
GetPartofString=Left(tmp,p-1)
c=c 1
tmp=Right(tmp,Len(tmp)-p)
EndIf
LoopWhilec<>part
EndFunction
--1-------------------------------------------------------------
提问:
我如何才能数出一个字符串中的字母数?举例来说:我想在用户按下OK时计算在Text1.Text中的字母数。
回答:
使用LEN(Text1.text)命令如何?你就可以得到长度……包括空格和其它非字母的字符。所以如果你希望去掉它们的话,必须要一个小函数来检查Text1.Text中的字符是否为真正的字母:
PublicFunctionCountCharacters(source$)AsInteger
Dimcounter,t
ConstCharacters$="abcdefghijklmnopqrstuvwxyz"
Fort=1ToLen(source$)
IfInStr(Characters,LCase$(Mid$(source$,t,1)))<>0Then
counter=counter 1
EndIf
Nextt
CountCharacters=counter
EndFunction
使用时就象这样:
vString$="Testing....aboutwhat?"
MsgBoxCountCharacters(vString$)
--2-------------------------------------------------------------
提问:
有没有人知道怎样来做这样一个特殊的循环?我需要把一个字符串,比如“Heyhowareyou”,中的每个字母放到不同的变量中。例如对上面这句话,H放在A1中,e放在A2中,以此类推。谢谢你的帮助。
回答:
DimvChar()asString
SubPlaceInArray(source$)
Dimp
Forp=1ToLen(source$)
RedimPreservevChar(p)
vChar(p)=Mid$(source$,p,1)
Nextp
EndSub
在数组vChar的每一项中就分别是给出字符串的所有字母。
--3-------------------------------------------------------------
提问:
你怎样把一个文本文件中的单词一个一个读入字符串变量中?文件中每个单词都被空格分隔。
回答:
DimvWords()asString
SubSplitStringintoWords(bron$)
Dimc,p,t,vCheck
DimTempBron$,tmp$
'把一行输入分成单词
t=0
TempBron$=bron$
Forc=1ToLen(bron$)
p=InStr(TempBron$,Chr(32))
Ifp<>0Then
ReDimPreservevWords(t)
tmp=Left$(TempBron$,p-1)
vWords(t)=StripString(tmp)
TempBron$=Right$(TempBron$,Len(TempBron$)-p)
t=t 1
c=c p
EndIf
Nextc
ReDimPreservevWords(t)
vWords(t)=StripString(TempBron)
EndSub
首先你必须先读入一行文本,然后使用以上这个过程。在数组vWords中就是文本文件中的所有单词。如果你在读文件方面也需要帮助,告诉我。
--4-------------------------------------------------------------
提问:
我需要替换窗体上所有文本框中的某一个单词,应该怎么做?先说声谢谢了。
回答:
试试这个……
'在新窗体上放一个command和三个textbox,然后加入以下代码
'按F5运行,注意先把Command的caption改成"&Replacesomebodywithme"
PrivateSubCommand1_Click()
ConstvString$="testingforsomebodyonthenet"
SelectCaseCommand1.Caption
Case"&Replacetextinalltextboxes"
Text1.Text=vString
Text2.Text=vString
Text3.Text=vString
Command1.Caption="&Replacesomebodywithme"
Case"&Replacesomebodywithme"
CallChangeText
Command1.Caption="&Replacetextinalltextboxes"
EndSelect
EndSub
FunctionsReplace(SearchLineAsString,SearchForAsString,ReplaceWithAsString)
DimvSearchLineAsString,foundAsInteger
found=InStr(SearchLine,SearchFor):vSearchLine=SearchLine
Iffound<>0Then
vSearchLine=""
Iffound>1ThenvSearchLine=Left(SearchLine,found-1)
vSearchLine=vSearchLine ReplaceWith
Iffound Len(SearchFor)-1<Len(SearchLine)Then_
vSearchLine=vSearchLine Right$(SearchLine,_
Len(SearchLine)-found-Len(SearchFor) 1)
EndIf
sReplace=vSearchLine
EndFunction
PrivateSubChangeText()
DimControl
ForEachControlInForm1.Controls
IfTypeOfControlIsTextBoxThen
Control.Text=sReplace(Control.Text,"somebody","me")
EndIf
NextControl
EndSub
--5-------------------------------------------------------------
提问:
现在我有一个文本框来输入字符串。另外有60个文本框的控件数组,它们包含了我的一个字典。我设法检查字符串中的每一个单词,看它是否符合控件数组中的也就是字典中的单词。我在检验前不得不把标点全部去掉。如果整个句子都拼写对了,我发出一个消息,如果拼错了,发出另一个消息。
感谢所有对此提出的任何建议和想法。
回答:
假定你有一个文本框来输入单词,然后你对照一个数组来检查它们……你可以使用以下代码作为你的起点……但是请考虑把你的字典转换成一个数据库,因为当它成为一个真正的字典时,数据库工作起来快得多。
'onthegeneralsection
DimvWords()
DimMax
DimvCheckWord()
PrivateForm1_Load()
Text1.SetFocus
Text1.Text="livinginamericabutnotreally"
Max=10
'makearray
'youcanuseanasciifiletogetthewords
RedimvCheckWord(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"
EndSub
SubSplitStringintoWords(bron$)
Dimc,p,t,vCheck
DimTempBron$,tmp$
DimvOkeAsBoolean
'splittingtheinputintowords
t=0
TempBron$=bron$
Forc=1ToLen(bron$)
p=InStr(TempBron$,Chr(32))
Ifp<>0Then
ReDimPreservevWords(t)
tmp=Left$(TempBron$,p-1)
vWords(t)=StripString(tmp)
TempBron$=Right$(TempBron$,Len(TempBron$)-p)
t=t 1
c=c p
EndIf
Nextc
ReDimPreservevWords(t)
vWords(t)=StripString(TempBron)
'checkingagainstspellingschecker
vOke=False
Forc=0Tot
ForvCheck=0ToMax
IfvCheckWord(vCheck)<>vWords(c)Then
vOke=False
Else
vOke=True
vCheck=Max
EndIf
NextvCheck
IfNotvOkeThenMsgBoxvWords(c)
vOke=False
Nextc
EndSub
PrivateSubText1_KeyPress(KeyAsciiAsInteger)
IfKeyAscii=13Then
'splitstringintowords
CallSplitStringintoWords(Text1.Text)
EndIf
EndSub
FunctionStripString(sourceAsString)AsString
ConstLetters$="abcdefghijklmnopqrstuvwxyz"
Dimp,tmp$
tmp=source$
Forp=1ToLen(source$)
IfInStr(Letters,LCase(Mid$(source$,p,1)))=0Then
SelectCasep
Case1
tmp=Right$(source$,Len(source$)-p)
CaseLen(source$)
tmp=Left$(source$,Len(source$)-1)
CaseElse
tmp=Left$(source$,p)&Right$(source$,Len(source$)-p)
EndSelect
EndIf
Nextp
StripString=tmp
EndFunction
--6-------------------------------------------------------------
提问:
我需要帮助,如何判断一个文件名是否有后缀名,然后剥除这个后缀。原本我是想获得文件名,然后用另一个后缀名来把它存为一个备份文件。有没有一个方便的方法,不用搜索整个路径字符串中的“\”。
回答:
从路径字符串的后面向前查找第一个“\”,用Right$命令,这样你就可以得到文件名。
如果你要删掉后缀名,也这么做,只是查找第一个“.”而已。注意在W95中,文件名可以包括一个以上的“.”
可以使用这样的代码:
Dimp
FunctionGetFileName(PathString$)AsString
GetFileName=PathString
Forp=Len(PathString)To0Step-1
IfMid$(PathString,p,1)="\"then
GetFileName=Right$(PathString,p)
ExitFunction
EndIf
Nextp
EndFunction->
假设我从Excel表格中复制了一些数据到剪贴板中,比如是这样一些信息:
Allen12
Anderson13
Douglas12
Ohio49
我怎样才能把这些名字和数字读进一个数组或者一个Grid框中呢?用Clipboard.GetText(vbCFText)只能一下子读入所有数据,而我希望一个一个地读。
回答:
新建一个项目,在窗体上放两个label和一个command。以下是代码:
PRivateSubCommand1_Click()
DimvTekst$
vTekst$="Allen12"
vTekst$=vTekst$&"Anderson13"
vTekst$=vTekst$&"Bernard14"
vTekst$=vTekst$&"Constance15"
Label1.Caption=vTekst$
SelectCaseCommand1.Caption
Case"CopyClipboard"
Clipboard.Clear
Clipboard.SetTextLabel1.Caption
Command1.Caption="PutintoLabel"
Case"PutintoLabel"
Label2.Caption=GetPartofString(Clipboard.GetText,1)
Command1.Caption="CopyClipboard"
'readinarray
DimvText(7)AsString
Dimc
Forc=0To7
vText(c)=GetPartofString(Clipboard.GetText,c 1)
Nextc
'showresult
Forc=0To7
MsgBoxvText(c)
Nextc
EndSub
PrivateFunctionGetPartofString(source$,part)AsString
Dimp,c,tmp$
tmp$=source$
c=0
Do
p=InStr(tmp,Chr(32))
Ifp<>0Then
GetPartofString=Left(tmp,p-1)
c=c 1
tmp=Right(tmp,Len(tmp)-p)
EndIf
LoopWhilec<>part
EndFunction
--1-------------------------------------------------------------
提问:
我如何才能数出一个字符串中的字母数?举例来说:我想在用户按下OK时计算在Text1.Text中的字母数。
回答:
使用LEN(Text1.text)命令如何?你就可以得到长度……包括空格和其它非字母的字符。所以如果你希望去掉它们的话,必须要一个小函数来检查Text1.Text中的字符是否为真正的字母:
PublicFunctionCountCharacters(source$)AsInteger
Dimcounter,t
ConstCharacters$="abcdefghijklmnopqrstuvwxyz"
Fort=1ToLen(source$)
IfInStr(Characters,LCase$(Mid$(source$,t,1)))<>0Then
counter=counter 1
EndIf
Nextt
CountCharacters=counter
EndFunction
使用时就象这样:
vString$="Testing....aboutwhat?"
MsgBoxCountCharacters(vString$)
--2-------------------------------------------------------------
提问:
有没有人知道怎样来做这样一个特殊的循环?我需要把一个字符串,比如“Heyhowareyou”,中的每个字母放到不同的变量中。例如对上面这句话,H放在A1中,e放在A2中,以此类推。谢谢你的帮助。
回答:
DimvChar()asString
SubPlaceInArray(source$)
Dimp
Forp=1ToLen(source$)
RedimPreservevChar(p)
vChar(p)=Mid$(source$,p,1)
Nextp
EndSub
在数组vChar的每一项中就分别是给出字符串的所有字母。
--3-------------------------------------------------------------
提问:
你怎样把一个文本文件中的单词一个一个读入字符串变量中?文件中每个单词都被空格分隔。
回答:
DimvWords()asString
SubSplitStringintoWords(bron$)
Dimc,p,t,vCheck
DimTempBron$,tmp$
'把一行输入分成单词
t=0
TempBron$=bron$
Forc=1ToLen(bron$)
p=InStr(TempBron$,Chr(32))
Ifp<>0Then
ReDimPreservevWords(t)
tmp=Left$(TempBron$,p-1)
vWords(t)=StripString(tmp)
TempBron$=Right$(TempBron$,Len(TempBron$)-p)
t=t 1
c=c p
EndIf
Nextc
ReDimPreservevWords(t)
vWords(t)=StripString(TempBron)
EndSub
首先你必须先读入一行文本,然后使用以上这个过程。在数组vWords中就是文本文件中的所有单词。如果你在读文件方面也需要帮助,告诉我。
--4-------------------------------------------------------------
提问:
我需要替换窗体上所有文本框中的某一个单词,应该怎么做?先说声谢谢了。
回答:
试试这个……
'在新窗体上放一个command和三个textbox,然后加入以下代码
'按F5运行,注意先把Command的caption改成"&Replacesomebodywithme"
PrivateSubCommand1_Click()
ConstvString$="testingforsomebodyonthenet"
SelectCaseCommand1.Caption
Case"&Replacetextinalltextboxes"
Text1.Text=vString
Text2.Text=vString
Text3.Text=vString
Command1.Caption="&Replacesomebodywithme"
Case"&Replacesomebodywithme"
CallChangeText
Command1.Caption="&Replacetextinalltextboxes"
EndSelect
EndSub
FunctionsReplace(SearchLineAsString,SearchForAsString,ReplaceWithAsString)
DimvSearchLineAsString,foundAsInteger
found=InStr(SearchLine,SearchFor):vSearchLine=SearchLine
Iffound<>0Then
vSearchLine=""
Iffound>1ThenvSearchLine=Left(SearchLine,found-1)
vSearchLine=vSearchLine ReplaceWith
Iffound Len(SearchFor)-1<Len(SearchLine)Then_
vSearchLine=vSearchLine Right$(SearchLine,_
Len(SearchLine)-found-Len(SearchFor) 1)
EndIf
sReplace=vSearchLine
EndFunction
PrivateSubChangeText()
DimControl
ForEachControlInForm1.Controls
IfTypeOfControlIsTextBoxThen
Control.Text=sReplace(Control.Text,"somebody","me")
EndIf
NextControl
EndSub
--5-------------------------------------------------------------
提问:
现在我有一个文本框来输入字符串。另外有60个文本框的控件数组,它们包含了我的一个字典。我设法检查字符串中的每一个单词,看它是否符合控件数组中的也就是字典中的单词。我在检验前不得不把标点全部去掉。如果整个句子都拼写对了,我发出一个消息,如果拼错了,发出另一个消息。
感谢所有对此提出的任何建议和想法。
回答:
假定你有一个文本框来输入单词,然后你对照一个数组来检查它们……你可以使用以下代码作为你的起点……但是请考虑把你的字典转换成一个数据库,因为当它成为一个真正的字典时,数据库工作起来快得多。
'onthegeneralsection
DimvWords()
DimMax
DimvCheckWord()
PrivateForm1_Load()
Text1.SetFocus
Text1.Text="livinginamericabutnotreally"
Max=10
'makearray
'youcanuseanasciifiletogetthewords
RedimvCheckWord(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"
EndSub
SubSplitStringintoWords(bron$)
Dimc,p,t,vCheck
DimTempBron$,tmp$
DimvOkeAsBoolean
'splittingtheinputintowords
t=0
TempBron$=bron$
Forc=1ToLen(bron$)
p=InStr(TempBron$,Chr(32))
Ifp<>0Then
ReDimPreservevWords(t)
tmp=Left$(TempBron$,p-1)
vWords(t)=StripString(tmp)
TempBron$=Right$(TempBron$,Len(TempBron$)-p)
t=t 1
c=c p
EndIf
Nextc
ReDimPreservevWords(t)
vWords(t)=StripString(TempBron)
'checkingagainstspellingschecker
vOke=False
Forc=0Tot
ForvCheck=0ToMax
IfvCheckWord(vCheck)<>vWords(c)Then
vOke=False
Else
vOke=True
vCheck=Max
EndIf
NextvCheck
IfNotvOkeThenMsgBoxvWords(c)
vOke=False
Nextc
EndSub
PrivateSubText1_KeyPress(KeyAsciiAsInteger)
IfKeyAscii=13Then
'splitstringintowords
CallSplitStringintoWords(Text1.Text)
EndIf
EndSub
FunctionStripString(sourceAsString)AsString
ConstLetters$="abcdefghijklmnopqrstuvwxyz"
Dimp,tmp$
tmp=source$
Forp=1ToLen(source$)
IfInStr(Letters,LCase(Mid$(source$,p,1)))=0Then
SelectCasep
Case1
tmp=Right$(source$,Len(source$)-p)
CaseLen(source$)
tmp=Left$(source$,Len(source$)-1)
CaseElse
tmp=Left$(source$,p)&Right$(source$,Len(source$)-p)
EndSelect
EndIf
Nextp
StripString=tmp
EndFunction
--6-------------------------------------------------------------
提问:
我需要帮助,如何判断一个文件名是否有后缀名,然后剥除这个后缀。原本我是想获得文件名,然后用另一个后缀名来把它存为一个备份文件。有没有一个方便的方法,不用搜索整个路径字符串中的“\”。
回答:
从路径字符串的后面向前查找第一个“\”,用Right$命令,这样你就可以得到文件名。
如果你要删掉后缀名,也这么做,只是查找第一个“.”而已。注意在W95中,文件名可以包括一个以上的“.”
可以使用这样的代码:
Dimp
FunctionGetFileName(PathString$)AsString
GetFileName=PathString
Forp=Len(PathString)To0Step-1
IfMid$(PathString,p,1)="\"then
GetFileName=Right$(PathString,p)
ExitFunction
EndIf
Nextp
EndFunction->
更多精彩
赞助商链接