2009-11-25 104 views
2

我们中的一些人不幸仍然支持像VB6这样的传统应用程序。我忘记了如何解析一个字符串。如何解析vb6中的字符串?

给定一个字符串:

Dim mystring As String = "1234567890" 

如何在VB6遍历每个字符,并做一些像

for each character in mystring 
     debug.print character 
    next 

在C#中,我会做一些像

char[] myChars = mystring.ToCharArray(); 
foreach (char c in theChars) 
{ 
    //do something with c 
} 

任何想法?

非常感谢

+0

你最终想要做什么?查找字符串中是否存在某些内容?查找字符串中字符的位置? – curtisk 2009-11-25 15:47:57

+0

随着字符串中的每个数字,我需要做一些事情。 debug.print将为我做的伎俩,我可以从那里拿它 谢谢 – 2009-11-25 15:54:08

+0

在C#中,你可以遍历字符串,而不首先将其转换为字符数组:字符串mystring =“1234567890”; foreach(char c中的mystring){...}'。 – 2011-12-12 18:19:36

回答

9

您可以使用“MID”函数来获取在单个字符:

Dim i As Integer 
For i = 1 To Len(mystring) 
    Print Mid$(mystring, i, 1) 
Next 

注意这是未经测试。

+3

请使用'Mid $'而不是'Mid' - 由于没有使用任何变体,因此它更高效且更安全。 – Dario 2009-11-25 15:50:52

+0

对不起 - 我使用VB6已经有好几年了。我会修改答案。 – 2009-11-25 16:46:28

2

没有可能在字符串中使用foreach。

使用

Dim i As Integer 

For i = 1 To Len(YourString) 
    Result = Mid$(YourString, i, 1) 
Next 

注意到的Result类型是长度为1的串,没有字符或字节类型。

如果性能很重要,则必须将字符串转换为bytearray拳头(使用StrConv),然后像这样循环。

Dim i As Long 
For i = 0 To UBound(Data) 
    Result = Data(i) ' Type is Byte ' 
Next 

这样效率更高。

+0

感谢您的工作!感谢 – 2009-11-25 15:58:09

+1

请注意,如果您使用StrConv将字符串转换为字节数组,您还可以使用当前系统代码页将其从Unicode转换为“ANSI”。 – MarkJ 2009-11-25 16:06:49

1

最简单的方法是将字符串转换为一个字节数组,并遍历字节数组(将每个字节转换为字符)。

Dim str As String 
Dim bytArray() As Byte 
Dim count As Integer 

str = "This is a string." 
bytArray = str 

For count = 0 To UBound(bytArray) 
    Debug.Print Chr(bytArray(count)) 
Next 
+0

不能像预期的那样工作,因为它有很多空字节。请注意,您不能在字节上应用'Chr',而只能在字符串上应用。 – Dario 2009-11-25 15:58:07

+1

请注意,如果您将字符串转换为像这样的字节数组,您还可以使用当前系统代码页将其从Unicode转换为“ANSI”。 – MarkJ 2009-11-25 17:52:47

1

不要循环;相反,请设置对Microsoft VBScript正则表达式库的引用,并使用正则表达式来实现“做某件事”的目标。

+0

+1值得考虑。这里有一个链接http://www.regular-expressions.info/vb.html – MarkJ 2009-11-27 17:43:29