标题:请教字符串替换的问题
只看楼主
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:325
专家分:114
注 册:2010-2-17
结帖率:69.81%
已结贴  问题点数:20 回复次数:3 
请教字符串替换的问题
例如一个字符串“1,2,3,4,5,6,7,8,9,0,11,12,13,14,15,16,17,18,19,20,1,2,3,4,5,6,7,8,9,0,11,12,13,14,15,16,17,18,19,20,1,2,3,4,5,6,7,8,9,0,11,12,13,14,15,16,17,18,19,20,”,我想Split后将第5个和第15个替换成0后生成新的字符串,我写的程序如下:

程序代码:
Dim a As String
Dim b() As String
Dim temp1 As String
Dim temp2 As String
Dim i As Integer
Dim c As String


Private Sub Command1_Click()
temp1 = ""
b = Split(a, ",")
b(5) = 0
b(15) = 0
For i = 0 To UBound(b) - 1
temp1 = temp1 & b(i) & ","
Next i
Text1.Text = temp1
End Sub

Private Sub Command2_Click()
temp2 = ""
b = Split(a, ",")
c = 0
temp2 = Replace(a, b(5), c)
Text2.Text = temp2
End Sub

Private Sub Form_Load()
Text1.Text = ""
Text2.Text = ""
a = "1,2,3,4,5,6,7,8,9,0,11,12,13,14,15,16,17,18,19,20,1,2,3,4,5,6,7,8,9,0,11,12,13,14,15,16,17,18,19,20,1,2,3,4,5,6,7,8,9,0,11,12,13,14,15,16,17,18,19,20,"
End Sub


Command1用循环方式生成新的字符串(结果正确),Command2用Replace替换(结果不对)。

想请教一下,生成新的字符串一定要用Command1方式循环得出吗?我的每个文件中类似的字符串有数万行,每行的UBound(b)没有规律且不一致,同时想处理数十到数百个文件,每行都做个循环生成新字符串然后重新写成新文件,似乎效率太低,有什么好办法吗?
搜索更多相关主题的帖子: 字符串 String Sub Dim 替换 
2021-06-17 14:36
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:7 
相对来说替换字符,mid函数的效率还是挺高的


程序代码:
Private Sub Command1_Click()
        Dim Str As String
        Dim index As Integer
        Dim indexEnd As Integer
        Dim n As Integer
        
        Str = Text1.Text

        n = 4
        While (n > 0)
            index = InStr(index + 1, Str, ",")
            n = n - 1
        Wend
        indexEnd = InStr(index + 1, Str, ",") - 1
        Mid$(Str, index + 1, indexEnd - index) = String(indexEnd - index, "0")

        n = 10
        While (n > 0)
            index = InStr(index + 1, Str, ",")
            n = n - 1
        Wend
        indexEnd = InStr(index + 1, Str, ",") - 1
        Mid$(Str, index + 1, indexEnd - index) = String(indexEnd - index, "0")

        Text2.Text = Str
End Sub

2021-06-17 22:18
cwa9958
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:247
专家分:1228
注 册:2006-6-25
得分:7 
Replace函数

返回一个字符串,该字符串中指定的子字符串已被替换成另一子字符串

因为你的字符串a里的子字符串b(5)不只是一个,所有符合的都会被替换的,所以结果不对。
Private Sub Command1_Click()
temp1 = ""
b = Split(a, ",")
b(5) = 0
b(15) = 0
'For i = 0 To UBound(b) - 1
'temp1 = temp1 & b(i) & ","
'Next i
temp1 = Join(b, ",")
Text1.Text = temp1
End Sub

ps:你的这个好像是替换了第6个和第16个的。

也可以用replace函数做,但是有点繁琐,特别是要替换的相同字符串有多个,而且要求替换的是在后面的。

Private Sub Command3_Click()
    Dim n As Integer, m As Integer, m1 As Integer
    Dim a1 As String
   
    n = 5
    For i = 1 To n - 1
        m = InStr(m + 1, a, ",")
    Next
    m1 = InStr(m + 1, a, ",")
    a1 = Mid(a, m, m1 - m + 1)
   
    Text2 = Left(a, m) & Replace(a, a1, "0,", m, 1)
   
End Sub
2021-06-18 11:20
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:7 
知道位置的话,用你方法1 吧。使用 replace 有相同数据时很容易导致结果与预期不相符。


另外,拆分字符串用了 split 函数,那合并也可以继续使用函数来合并:join
---------------------------
Join函数
描述
返回一个字符串,该字符串是通过连接某个数组中的多个子字符串而创建的。

语法
Join(list[, delimiter])

Join函数语法有如下几部分:

部分 描述
list 必需的。包含被连接子字符串的一维数组。
delimiter 可选的。在返回字符串中用于分隔子字符串的字符。如果忽略该项,则使用空格(" ")来分隔子字符串。如果delimiter是零长度字符串(""),则列表中的所有项目都连接在一起,中间没有分隔符。


授人于鱼,不如授人于渔
早已停用QQ了
2021-06-18 11:40



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-506031-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.051055 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved