如何在Visual Basic中定义大量字符串列表

5

我是一名Visual Basic 2010的宏编写者,我想要初始化一个非常大的字符串列表,例如:

big_ol_array = Array( _
"string1", _
"string2", _
"string3", _
"string4" , _
  .....
"string9999" _
)

但是我在编辑器中遇到了“过多的行连续”错误。当我尝试用没有换行符的方式初始化大数组时,VB编辑器无法处理如此长(1000+)字符的一行。

有没有人知道在VB中初始化大量字符串的好方法?

提前感谢!


为什么不使用集合或字典? - Qbik
一种方法是将列表保存在Excel电子表格中,然后将范围读取为数组。 - Alex P
1
您不需要采取“全有或全无”的方法。您可以在一行中包含更多的值,从而减少换行符的数量。 - Andy G
5个回答

3
我认为没有办法做到你想要的,但是有一些解决方法可供选择。例如,您可以从文件中加载字符串列表。以下示例可以给您提供一些提示: Dim value As String = File.ReadAllText("C:\file.txt") 此外,这个页面讨论了这个问题:Excel 宏 - 行延续过多

2
在vba中,您不能在一行中声明和初始化变量。 - L42

3

对于 freelax的回答,我想进行更详细的解释:

你可以将字符串值存储在外部文本文件中,并逐行读取项目到数组中。我的示例(未经测试)早期绑定到 Microsoft Scripting Runtime 库。

Dim arr() as string
Dim fso as New FileSystemObject
Dim fl as file
Dim ts as textstrean
Dim i as long ' counter

Set fl = fso.GetFile("c:\path\to\configfile.txt")
Set ts = fl.OpenAsTextStream(ForReading)
i = 0
Do While Not ts.AtEndOfStream
    Redim Preserve arr(i) 'resize the array leaving data in place
    arr(i) = ts.Readline
    i = i + 1
Loop

进一步阅读:
  1. FileSystemObject:文件系统对象
  2. File:文件对象
  3. TextStream:文本流对象
  4. 使用VBA读取文本文件
  5. Redim an array:重新调整数组大小

当然,你可能希望在调整数组大小时更加智能化,例如在空间不足时将其大小加倍。


1

一个解决方法可能是使用 Join 命令,像这样:

Const ARRAY_VALUES As String = _
"string1,string2," & _
"string3,string4"

Dim big_ol_array() As String
big_ol_array() = Split(ARRAY_VALUES, ",")

这将允许您在每行上放置多个条目,然后您可以使用多行连续。或者,如果您确实想要每行一个值,您可以只使用多个常量,像这样:
Const ARRAY_VALUES1 As String = _
"string1," & _
"string2," & _
"string3," & _
"string4,"

Const ARRAY_VALUES2 As String = _
"string5," & _
"string6," & _
"string7," & _
"string8"

Const ARRAY_VALUES As String = _
ARRAY_VALUES1 & _
sARRAY_VALUES2

当然,如果分隔符与您的数据冲突,您可以选择不同的分隔符。在这种情况下,我会使用一个非常罕见但易读的分隔符,例如圆点符号 (),该符号可以通过按住Alt键,然后在数字键盘上输入“0149”来打出。然后您的代码看起来就像这样:
Const ARRAY_VALUES As String = _
"string1•string2•" & _
"string3•string4"

Dim big_ol_array() As String
big_ol_array() = Split(ARRAY_VALUES, "•")

这里有一些其他有趣的分隔符。它们都会在IDE中显示出来(而其他一些只会显示为方框):
§ ¸ · • ¤ « » ¦ ± _­ ¯ ¨ ª ¹ ² ³ ´ ° º ¿ ¡

0

如果你想保持简单,就像GSerg在link中发布的那样,摆脱行继续字符。Freelex实际上发布了相同的链接。

Dim bigStr As String, big_ol_array() As String

bigStr = "string1"
bigStr = bigStr & "," & "string2"
bigStr = bigStr & "," & "string3"
.
.
bigStr = bigStr & "," & "string9999"
big_ol_array() = Split(bigStr, ",")

-1
Dim BigOlArray(1 to 99999) as String
BigOlArray(1) = "String1"
BigOlArray(2) = "String2"

或者为了节省一些打字

' Keep copy/pasting the second and third lines as needed
' then all you need to change is the string
x = 1
BigOlArray(x) = "String1"
x = x+1
BigOlArray(x) = "String2"
x = x+1
BigOlArray(x) = "String3"
x = x+1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接