VB 字符串数组最大容量 100

一个一维的字符串数组,最多能容量多少大小的字符呢?比如能否容纳得下300M的字符呢?我亲自测试了一个3百多M的txt文件,用Open语句一行一行地顺序读入,读了6个小时才... 一个一维的字符串数组,最多能容量多少大小的字符呢?比如能否容纳得下300M的字符呢?
我亲自测试了一个3百多M的txt文件,用Open 语句一行一行地顺序读入,读了6个小时才读了50M,那这样测试,要读完3百M,那么得36个小时?光读取文件就要花两天时间?
好像大于几十M之后,就内存溢出了,好像没法达到理论上的2G的。
大家怎么看待?
也就是说,处理大容量的txt时,有什么好办法?但是后台调用Word来处理,肯定行!
展开
 我来答
zdingyun
2015-10-04 · 知道合伙人软件行家
zdingyun
知道合伙人软件行家
采纳数:15429 获赞数:48174
1982年上海业余工业大学化工系毕业 现退休

向TA提问 私信TA
展开全部

1)VB6.0中关于String数据类型的说明如下:

字符串有两种:变长与定长的字符串。

*变长字符串最多可包含大约 20 亿 ( 2^31)个字符。
*定长字符串可包含 1 到大约 64K ( 2^16 ) 个字符。

2)VB读入大容量文本文件到富文本框,采取用二进制方法一次读入全部字节,再用StrConv函数根据系统的缺省码页将字符串转成 Unicode,显示与富文本框控件。

3)即使是逐行读入也应该先读到变量,再用可显示控件显示,不然读取速度大大降低。

StrConv 函数,返回按指定类型转换的 Variant (String)。

实现代码如下:

Private Sub Command16_Click()
    Dim strWj As String
    Dim strj() As String
    Dim aryContent() As Byte
    Dim i As Long
    Dim j As Long
    CommonDialog1.CancelError = True ' 设置“CancelError”为 True
    On Error GoTo ErrHandler
    CommonDialog1.Flags = cdlOFNHideReadOnly    ' 设置标志
    ' 设置过滤器
    CommonDialog1.Filter = "All Files (*.*)|*.*|Text Files" & "(*.txt)|*.txt|Batch Files (*.bat)|*.bat"
    CommonDialog1.FilterIndex = 2    ' 指定缺省的过滤器
    CommonDialog1.ShowOpen    ' 显示“打开”对话框
    ' 显示选定文件的名字
    'MsgBox CommonDialog1.FileName
    Open CommonDialog1.FileName For Binary As #1
        ReDim aryContent(LOF(1) - 1)
        Get #1, , aryContent
    Close #1
    strWj = StrConv(aryContent, vbUnicode)
    RichTextBox1 = strWj
    Exit Sub
ErrHandler:
    ' 用户按了“取消”按钮
    Exit Sub
End Sub
析君豪2Q
2013-12-02 · TA获得超过411个赞
知道小有建树答主
回答量:724
采纳率:50%
帮助的人:199万
展开全部
一个字符最长大概20亿(即2^31)字节
如果数组里有很个字符变量,按理讲是可以的
追问
你是说,一个VB字符串变量最大长度达到20亿字节,也就是约1900M?
那么字符串数组的最大容量,就远远是1900M的n多倍了?
追答
是的,数组里是所有字符变量的总和,只要你内存够大,存多少都可以
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ZHMINGEN
2013-12-02 · TA获得超过1735个赞
知道大有可为答主
回答量:3149
采纳率:68%
帮助的人:1252万
展开全部
在Windows中,字符串最大可以存储2^31个字节(2^31=2147483648b=2147483Kb=2147Mb=2Gb =表示近似值)
但是在VB中的字符型变量只能存储65535个字节,同样一个一维的字符串数组(数组也是变量,不过是数组变量罢了)也只能存储65535个字节,也就是65.535Mb,所以不能存储300M的字符。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
听不清啊
高粉答主

2013-12-02 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
没有问题的。

变长字符串最多可包含大约 20 亿 ( 2^31)个字符。
定长字符串可包含 1 到大约 64K ( 2^16 ) 个字符。
1.字符串是一个字符序列,必须用双引号括起来 2.说明:
双引号为分界符,输入和输出时并不显示。 字符串中包含字符的个数称为字符串长度。 长度为零的字符串称为空字符串,比如“”,引号里面没有任何内容 字符串中包含的字符区分大小写。
字符串可分为变长字符串和定长字符串两种。
3.VB字符串分为两种:变长字符串,定长字符串。
变长字符串的长度是不确定的,可以从0~2^31,约21亿个字符。 定长字符串有确定个数的字符,最大长度不超过2^16个字符。
4.举例: (1)“Hello” “12345”
(2)变长字符串(长度为字符串长度) 例:dim a as string a="123" a="456789“
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
buhui2013
2013-12-06
知道答主
回答量:21
采纳率:100%
帮助的人:7.6万
展开全部
按你描述:一行一行的,溢出等等,非常肯定说你是把读到的每一行加到一个字符变量里,然后这个变量就越来越大。 如果真是这样的话,原因就在这里了!

如果仅仅读300M到内存,那是很快的。
vb字符串可以容纳的字符数绝对超过你机器的内存!

Sub test()
Dim s As String
s = String(1024& * 1024 * 300, 0) ‘300M
Debug.Print Len(s)
End Sub

vb字符串 "每次" 分配单元不宜超过64K,尽量要减少分配内存的次数。要么一次读入(get),要么一行一行读入(line input)数组然后join。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式