我正在重建一个excel宏,它解析文本文件并根据某个规则集填充excel表格中的单元格。我的新版本应该处理文件,这些文件在更长的时间内和日常的基础上延伸,而不是一周的总结结果。 但是,似乎自从我获得这些较大的文件后,split命令不会返回任何内容。
rawDataArray = Split(rawData, Chr$(10))
逐步说明我可以清楚地看到rawData字符串包含我从源文本文件加载的数据,我还在十六进制编辑器中打开文件以验证chr(10)是否存在。执行操作后,rawDataArray仍为空。
以前的版本只处理最多几千个字符的文本文件,并且完美无缺。当前文件长度大约为500.000个字符,这是唯一一个不能正常工作的(好吧,第一个;)行,这让我想到了split命令可以处理的字符串长度的上限。这可能是真的吗?如果是这样,它有多长时间?
是否还因为我们在办公室从Office 2007切换到Office 2010?我不知道vbscript版本的行为是否相同,我想这也可能是一个因素。
提前多多感谢!
编辑:我不确定用解决方案回答你自己的帖子是否习惯,但是,这就是。
似乎split命令无法处理如此大的字符串,我试图将文件减少到~7k字符并且有效。我还没有找到确切的数字,但这似乎至少是原因。 另外,感谢Avner对vbscript与VBA的纠正,我在编程/脚本编程方面自学成才,所以现在我学到了新东西!
感谢Avner对
进行更正答案 0 :(得分:1)
Excel宏是用VBA编写的,而不是VBScript。 VBA的限制对你来说应该不是问题。如果有的话,你的计算机的RAM可能是一个限制。这是来自Office 2010的VBA documentation,对于Office 2007也是如此:
有两种字符串:可变长度和固定长度的字符串。
- 可变长度字符串最多可包含20亿(2 ^ 31)个字符。
- 固定长度的字符串可以包含1到大约64K(2 ^ 16)个字符。
我猜测问题是Split
方法不能很好地处理大字符串。也许最好在循环中使用Mid
将其拆分为块,并分别调用Split
,但这有其他问题。
答案 1 :(得分:0)
Split可以处理任何大小的字符串。 我刚刚用一个简单的子程序检查了拆分功能(在Excel 2010中,但我认为2007应该工作相同)
Public Sub TestSplit()
Dim Count As Long
Count = 1000000
Dim x
ReDim x(Count)
Dim i As Long
For i = 1 To Count
x(i) = "My String " & i
Next
Dim RawString As String
RawString = Join(x, Chr(10))
Debug.Print "RawString length = " & Len(RawString)
Dim SplitArray
SplitArray = Split(RawString, Chr(10))
Debug.Assert UBound(SplitArray) = Count
End Sub
Output:
RawString length = 16888896
阅读源文件时必须有一些东西。你确定你的rawData变量中有chr(10)个字符吗?我建议你用instr函数检查它:
InStr(RawString, Chr(10))
应该大于0。 但即使在这种情况下,rawDataArray也应包含一个包含整个rawData字符串的元素。