WEB开发网
开发学院WEB开发综合 一些字符串操作的问题和回答 阅读

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

 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->

Tags:一些 字符串 操作

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接