这可是我现给你写的呀,回去看看是不是好用。Private Sub Form_Load()
  Dim tAStr As String
  tAStr = "幸福中是个大坏蛋!幸福中是个坏孩子!幸福中是个淘气包!"
  Text1.Text = StringInstrSwap(tAStr, "幸福中", "小狗")
End SubFunction StringInstrSwap(ByVal pString As String, ByVal pSwapSurStr As String, ByVal pSwapDesStr As String) As String
  'StringInstrSwap函数
  '语法:[tOutStr]=StringInstrSwap(pString, pSwapSurStr, pSwapDesStr)
  '功能:将字符串中所有指定字符串替换成另一字符串。
  '参数:pString     必要参数,被替换的字符串。假如为空则返回原字符串(空字符串)。
  '      pSwapSurStr 必要参数,替换部分的原字符串。假如为空字符则不进行任何替换。
  '      pSwapDesStr 必要参数,替换部分的新字符串。假如为空字符则进行删除原字符串操作。
  '返回:tOutStr     替换完成的字符串。
  Dim tOutStr As String
  
  Dim tStrLen As Long
  
  Dim tTempStrForth As String
  Dim tTempStrForthLen As Long
  
  Dim tTempStrBack As String
  Dim tTempStrBackEnd As Long
  
  Dim tSwapSurStrLen As Long
  Dim tSwapSurStrOn As Long
  
  Dim tLoop As Long
  Dim tExitLoop As Boolean
  
  tOutStr = pString
  tStrLen = Len(tOutStr)
  tSwapSurStrLen = Len(pSwapSurStr)
  
  If Not CBool(tStrLen) Then Exit Function
  
  For tLoop = 1 To tStrLen
    tSwapSurStrOn = InStr(tOutStr, pSwapSurStr)
    
    tExitLoop = (tLoop > Len(tOutStr)) Or (Not CBool(tSwapSurStrOn)) Or Not CBool(tSwapSurStrLen)
    If tExitLoop Then Exit For
    
    tTempStrForthLen = tSwapSurStrOn - 1
    
    If CBool(tTempStrForthLen) Then
        tTempStrForth = Left(tOutStr, tTempStrForthLen)
      Else
        tTempStrForth = ""
    End If
    
    tTempStrBackEnd = tSwapSurStrOn + tSwapSurStrLen
    
    If tTempStrBackEnd < tStrLen Then
        tTempStrBack = Mid(tOutStr, tTempStrBackEnd)
      Else
        tTempStrBack = ""
    End If
    
    tOutStr = tTempStrForth & pSwapDesStr & tTempStrBack
  Next
  
  StringInstrSwap = tOutStr
End Function

解决方案 »

  1.   

    你可能对文件操作还不是很熟练。:(在文件中,只能创建、删除(整个文件),和添加。就你所说的替换,是不能在文件本实现的。但你可以把文件的内容读出来,给一个变量,用 KiteGirl(小仙妹) --好久不见你了,进步好大,我一点进步都没有:(--给出的函数就行,然后把这个字符串(变量)写入你刚才的文件就可以了。原理就这样了。我有点忙,所以就不给你代码了。
      

  2.   

    我的函数是全部替换,你把循环改成1次或者去掉就是替换第一个。其实我这个函数写的过于整体化不大好,本来应该分两个部分写的。我捎后将分解成两个部分。把文件每行用这个函数“筛”一次,或者把文件整个读成一个字符串“筛”一次(不推荐你这样,容易失去响应)。下面是大概的程序,真正能运行的我还要具体去编写。tFileName=原文件
    tTempFileName=替换操作后的文件。
    tSurStr=要替换的字符。
    tDesStr=替换的字符。tFileNumberSave=FreeFile
    Open tFileName For Output As #tFileNumberSave
    tFileNumberLoad=FreeFile
    Open tTempFileName For Input As #tFileNumberLoadDo
      Line Input #tFileNumberLoad,tLoadStr
      tSaveStr=StringInstrSwap(tLoadStr,tSurStr,tDesStr) 
      Print #tFileNumberSave,tSaveStr
      [DoEvents] '如果文件很大就加这句。或者下面这个样子尖括号部分为自动响应程序。tStepTime是规定的响应时间。
      <If tAddTime-Timer>tStepTime Then >
      <  tAddTime=Timer>
      <  DoEvents>
      <End If>
      
    Loop Until Eof(tFileNumberLoad)Close #FileNumberLoad
    Close #FileNumberSave
      

  3.   

    之前给你的程序有严重的Bug,当你想把“小仙妹”替换成“混蛋小仙妹”的时候将产生死锁。新的函数解决了这个Bug。以下包括替换操作的完整函数以及示例,有三部分:    1、完整的函数代码。
        2、示例程序。
        3、测试文本SY03.TXT的内容。
    第一部分:完整的函数代码。Function StringAryPutToFile(ByVal pFileName As String, ByRef pStringAry() As String)
      '| StringAryPutToFile函数
      '| 语法:StringAryPutToFile pFileName, pStringAry()
      '| 功能:将字符串数组按照行顺序保存成文本文件。
      '| 参数:pFileName    必要参数,储存文本的文件名。如果不存在则将创建一个。
      '|       pStringAry() 必要参数,储存文本信息的字符串数组。必须是个动态数组。
      
      Dim tFileNumber As Integer
      Dim tNewBound As Long
      Dim tLoop As Long
      Dim tLoopOn As Long
      Dim tLoopEnd As Long
        
      tFileNumber = FreeFile
      
      Open pFileName For Output As #tFileNumber
      
      tLoopOn = LBound(pStringAry): tLoopEnd = UBound(pStringAry)
      
      For tLoop = tLoopOn To tLoopEnd
        Print #tFileNumber, pStringAry(tLoop)
      Next
        
      Close #tFileNumber
    End FunctionFunction StringAryGetByFile(ByVal pFileName As String, pStringAry() As String)
      '| StringAryGetByFile函数
      '| 语法:StringAryGetByFile pFileName, pStringAry()
      '| 功能:将文本文件按照行顺序读到字符串数组中。
      '| 参数:pFileName    必要参数,储存文本的文件名。如果不存在则将创建一个。
      '|      pStringAry() 必要参数,储存文本信息的字符串数组。必须是个动态数组。
      '| 注意:在使用该函数前建议检测文件是否存在,否则将生成意外的空文件。  
      Dim tFileNumber As Integer
      Dim tNewBound As Long
      Dim tReadStr As String
      
      tFileNumber = FreeFile
      
      Open pFileName For Input As #tFileNumber  Do Until EOF(tFileNumber)
        ReDim Preserve pStringAry(tNewBound)
        
        Line Input #tFileNumber, tReadStr
        pStringAry(tNewBound) = tReadStr
        
        tNewBound = tNewBound + 1
      Loop
      
      Close #tFileNumber
    End FunctionFunction StringAryInstrsSwapToAll(ByRef pStringAry() As String, ByVal pSwapSurStr As String, ByVal pSwapDesStr As String) As Long
      '| StringAryInstrsSwapToAll函数
      '| 语法:StringAryInstrsSwapToAll pStringAry() ,pSwapSurStr ,pSwapDesStr
      '| 功能:对一个字符串数组进行替换操作。将替换掉所有找到的指定字符串为新的字符串。
      '| 参数:pStringAry() 必要参数,进行替换操作的字符串数组。
      '|       pSwapSurStr  必要参数,被查找的准备替换的字符串。
      '|       pSwapDesStr  必要参数,替换目的字符串的新字符串。
      
      Dim tLoop As Long
      
      Dim tLoopOn As Long
      Dim tLoopEnd As Long
      
      tLoopOn = LBound(pStringAry)
      tLoopEnd = UBound(pStringAry)
      
      For tLoop = tLoopOn To tLoopEnd
        pStringAry(tLoop) = StringInstrSwapToAll(pStringAry(tLoop), pSwapSurStr, pSwapDesStr)
      Next
      
    End FunctionFunction StringInstrSwapToAll(ByVal pString As String, ByVal pSwapSurStr As String, ByVal pSwapDesStr As String) As String
      '| StringInstrSwapToAll函数
      '| 语法:[tOutStr]=StringInstrSwapToAll(pString, pSwapSurStr ,pSwapDesStr )
      '| 功能:对一个字符串进行替换操作。将替换掉所有找到的指定字符串为新的字符串。
      '| 参数:pString      必要参数,进行替换操作的字符串。
      '|       pSwapSurStr  必要参数,被查找的准备替换的字符串。
      '|       pSwapDesStr  必要参数,替换目的字符串的新字符串。
      '| 返回:tOutStr      替换后的字符串。
      
      Dim tOutStr As String
      Dim tTempStr As String
      Dim tFindSurStrOn As Long
      
      tTempStr = pString
      
      tFindSurStrOn = 1
      
      Do
        
        tOutStr = tTempStr
        
        tTempStr = StringInstrSwap(tTempStr, pSwapSurStr, pSwapDesStr, tFindSurStrOn)  Loop While CBool(tFindSurStrOn)
      
      StringInstrSwapToAll = tOutStr
      
    End FunctionFunction StringInstrSwap(ByVal pString As String, ByVal pSwapSurStr As String, ByVal pSwapDesStr As String, Optional ByRef pFindSurStrOn As Long = 1) As String
      '| StringInstrSwap函数
      '| 语法:[tOutStr]=StringInstrSwap(pString, pSwapSurStr, pSwapDesStr, pFindSurStrOn)
      '| 功能:对一个字符串进行替换操作。将替换掉第一个找到的指定字符串为新的字符串。
      '| 参数:pString       必要参数,进行替换操作的字符串。
      '|       pSwapSurStr   必要参数,被查找的准备替换的字符串。
      '|       pSwapDesStr   必要参数,替换目的字符串的新字符串。
      '|       pFindSurStrOn 可选参数,该参数有三个作用:
      '|                     (1)指定替换开始的位置,单位为字。默认值为1
      '|                     (2)替换操作结束后返回该次操作的结束位置。并可以作为下一次替换的开始。
      '|                     (3)替换操作的动作状态。如果返回0表示不再有可以替换的字符串了。
      '| ----------------------------------------------------------------------------
      '|                         该参数的位置返回参数是为了防止“死锁”现象而设置的。
      '|                     当pSwapDesStr中包含有pSwapSurStr的时候,如果每次都从第一
      '|                     个位置开始将产生死锁。所以,当准备替换一个字符串的所有指
      '|                     定字符串,必须从pFindSurStrOn返回位置步进到下一个位置。
      '| ----------------------------------------------------------------------------
      '| 返回:tOutStr       替换后的字符串。  Dim tOutStr As String
      
      Dim tStrLen As Long
      
      Dim tTempStrForth As String
      Dim tTempStrForthLen As Long
      
      Dim tTempStrBack As String
      Dim tTempStrBackEnd As Long
      
      Dim tSwapSurStrLen As Long
      Dim tSwapSurStrOn As Long
        
      tStrLen = Len(pString)
      
      If CBool(tStrLen) Then
      
        tSwapSurStrLen = Len(pSwapSurStr)
        
        If CBool(tSwapSurStrLen) And (tSwapSurStrLen <= tStrLen) Then
          
          tSwapSurStrOn = InStr(pFindSurStrOn, pString, pSwapSurStr)
       
          If CBool(tSwapSurStrOn) Then
            
            tOutStr = pString
                  
            '| GetForthString
            
            tTempStrForthLen = tSwapSurStrOn - 1
        
            If CBool(tTempStrForthLen) Then
                tTempStrForth = Left(tOutStr, tTempStrForthLen)
            End If
        
            '| GetBackString
            
            tTempStrBackEnd = tSwapSurStrOn + tSwapSurStrLen
      
            If tTempStrBackEnd < tStrLen Then
                tTempStrBack = Mid(tOutStr, tTempStrBackEnd)
            End If
            
            '| GetLinkString
        
            tOutStr = tTempStrForth & pSwapDesStr & tTempStrBack
          
          End If
          
        End If
        
      End If
      
      pFindSurStrOn = (tSwapSurStrOn + tSwapSurStrLen) * (1 And CBool(tSwapSurStrOn))
      
      StringInstrSwap = tOutStr
      
    End Function
      

  4.   

    第二部分:测试程序。Private Sub Command1_Click()
      Dim tStrAry() As String
      ReDim tStrAry(0)
      StringAryGetByFile "SY03.txt", tStrAry()
      StringAryInstrsSwapToAll tStrAry(), "小仙妹", "阿道夫·希特勒"
      StringAryInstrsSwapToAll tStrAry(), "辽东", "柏林"
      StringAryInstrsSwapToAll tStrAry(), "郑伊健", "迈克·阿瑟"
      StringAryPutToFile "SY02.txt", tStrAry()
    End Sub第三部分:测试文件SY03.TXT的内容。小仙妹 年表166年     小仙妹(字:文正)诞生。184年 1月,是以辽东为根据地的君主。把郑伊健任命为军师。4月,小仙妹统治的辽东遭遇洪水。小仙妹军占领北平。把陈琳任命为辽东的太守。10月,小仙妹军占领蓟。把刘德华任命为蓟的太守。把重视内政作为蓟的都市方针。185年 1月,被任命为州牧,成为幽州州牧。3月,在北平找到严纲。在北平找到韩当。在北平找到魏攸。在北平找到单经。在北平发现张纯,并录用成功。4月,北方的民众归顺小仙妹,并献上山岳骑。小仙妹军占领渤海。把轩辕公孙任命为渤海的太守。把重视内政作为渤海的都市方针。10月,在与张角军进行的平原之战中,作为小仙妹军的主帅指挥战斗。占领城寨。在小仙妹军对张角军的战斗中,小仙妹军获胜,并占领平原。把刘焉任命为北平的太守。186年 4月,小仙妹军占领邺。把田楷任命为渤海的太守。小仙妹军占领晋阳。把卢植任命为蓟的太守。把重视内政作为邺的都市方针。把重视内政作为晋阳的都市方针。把木村拓哉任命为渤海的太守。7月, 小仙妹统治的都市获得丰收。组成第2军团,任命木村拓哉为军团长。10月,小仙妹军占领上党。把公孙瓒任命为晋阳的太守。把重视内政作为上党的都市方针。