gpt4 book ai didi

excel - 从文本中解析子字符串

转载 作者:行者123 更新时间:2023-12-01 18:49:28 25 4
gpt4 key购买 nike

我正在编写一个宏,用于将 LDAP 格式的名称列表转换为名字、姓氏(区域)。

对于那些不知道 LDAP 是什么样子的人,如下所示:

CN=John Smith (region),OU=Legal,DC=example,DC=comand

在 Excel VBA 中,我似乎无法使用 string.substring(start, end)。在 Google 上的搜索似乎表明 Mid(string, start, end) 是最佳选择。

问题是这样的:在Mid中,end的整数是距start的距离,而不是字符的实际索引位置。这意味着不同的名称大小将具有不同的结束位置,并且我无法使用“)”索引来查找该区域的结束位置。由于所有名称都以 CN= 开头,因此我可以正确找到第一个子字符串的结尾,但无法正确找到“)”,因为名称长度不同。

我有一些代码如下:

mgrSub1 = Mid(mgrVal, InStr(1, mgrVal, "=") + 1, InStr(1, mgrVal, "\") - 4)
mgrSub2 = Mid(mgrVal, InStr(1, mgrVal, ","), InStr(1, mgrVal, ")") - 10)
manager = mgrSub1 & mgrSub2

有没有办法使用设定的终点而不是距离起点有这么多值的终点?

最佳答案

这是 vba.. 没有 string.substring ;)

这更像是VB 6(或以下任何一个)..所以你被mid,instr,len(获取字符串的总len)所困。我认为你错过了len来获取字符总数在一个字符串中?如果您需要一些说明,请发表评论。

编辑:

另一个快速破解..

    Dim t As String
t = "CN=Smith, John (region),OU=Legal,DC=example,DC=comand"
Dim s1 As String
Dim textstart As Integer
Dim textend As Integer
textstart = InStr(1, t, "CN=", vbTextCompare) + 3
textend = InStr(1, t, "(", vbTextCompare)
s1 = Mid(t, textstart, textend - textstart)
MsgBox s1
textstart = InStr(1, t, "(", vbTextCompare) + 1
textend = InStr(1, t, ")", vbTextCompare)
s2 = Mid(t, textstart, textend - textstart)
MsgBox s2

显然你的问题是,由于你需要第二个参数的差异,你应该总是为它做一些数学计算......

关于excel - 从文本中解析子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9948260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com