革天明 发表于 2012-7-3 14:55:59

诸位大侠,小弟想知道LISP中一个字符串的最大长度?程序很简单,大家都可以测试一啦!

想知道一个字符串变量,其最大字节数是多少?目的在于将TXT打包进VLX,想知道一个字符串变量支持的最大字节数。因为我使用的是vl-get-resource函数,担心字符串太长会溢出。
风之影的经验是4096,请参考http://bbs.mjtd.com/forum.php?mod=viewthread&tid=90352
但我下面的程序已达到10000字节的长度却没出错,我的环境是:VLISP的Visul LISP 控制台
(setq i           0
      str"Start"
      str1 "k"
)
(while (< i 10000)
(print (strlen str))
(setq f(open "c:/test.txt" "a"))
(write-line (strcat (itoa(strlen str)) "" str) f)
(close f)
(setq str (strcat str str1))
(setq i (1+ i))
)
不管是 (print (strlen str))还是 (printstr)都能正确运行,最后生成的TXT有接近50M,电脑内存小,打不开。如果是 (print (strlen str))的话,我运行到10万也能正确运行,但机子比较老,就没往更高的数字测试。
控制台环境是否能代表实际环境,会不会控制台下能正确运行,实际程序中就不能运行了?
请各位不吝赐教!

革天明 发表于 2012-7-3 15:49:56

测试了半小时,达到5万多个字符也没有出错,现在txt文件有150多M了

hao3ren 发表于 2012-7-3 16:34:18

我以前打包过TXT文件,没啥问题,但是把文件在lsp写成字符串也没问题,问题是字符串太长编译为vlx就会出错

革天明 发表于 2012-7-3 16:53:13

hao3ren 发表于 2012-7-3 16:34 static/image/common/back.gif
我以前打包过TXT文件,没啥问题,但是把文件在lsp写成字符串也没问题,问题是字符串太长编译为vlx就会出错

现在就是想知道最长支持多长的字符数,这样我们编程时也就有了依据

690994 发表于 2012-7-3 18:08:47

我的35000多行,每行约127个字符,分成4个变量
然后用STRCAT连起来没有出错,一个变量时出错。



vectra 发表于 2012-7-3 20:49:50

我猜最大是 2G,或者不限

革天明 发表于 2012-7-3 21:56:17

690994 发表于 2012-7-3 18:08 static/image/common/back.gif
我的35000多行,每行约127个字符,分成4个变量
然后用STRCAT连起来没有出错,一个变量时出错。

你的可以说明至少百万级的不出会错,反正早超越4096了,明天直接打包进VLX来测试,看看是否会不同

革天明 发表于 2012-7-3 21:58:12

vectra 发表于 2012-7-3 20:49 static/image/common/back.gif
我猜最大是 2G,或者不限

我估计2G的可能性不大,今天我测试时使用2的N次方来做,在字符长度为一亿多时出错了

革天明 发表于 2012-7-4 08:52:55

(setq       s "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm"
)
(print (strlen s))
2305 此时还能实现,2306个字符就会提示错误: 输入的字符串太长,不行就自定义一个函数,将字符串按字节给它取出,组成字符串表了,但不知字符串表的容量有多大

690994 发表于 2012-7-4 12:31:52

革天明 发表于 2012-7-4 08:52 static/image/common/back.gif
(setq       s "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm ...

昨天记错了,我是(setq a (list 一行 一行....))这样的,最后连起来。
页: [1] 2
查看完整版本: 诸位大侠,小弟想知道LISP中一个字符串的最大长度?程序很简单,大家都可以测试一啦!