2011-06-05 89 views
4

我正在编写一个Tcl脚本,该脚本将用于嵌入式设备。此脚本中的变量值将来自系统上的文本文件。我担心的是,如果源文件太大,可能会导致设备崩溃,因为可能没有足够的内存来存储整个文件。我想知道变量的大小是否可以被限制,因此当给变量提供时它不会耗尽整个内存量。Tcl可变大小限制

另外,如果可能限制变量的大小,即使整个文件无法送入变量,它仍会从源文件中填充尽可能多的信息。

回答

7

您可以通过指定要从文件中读取的字符数来限制变量的大小。例如:

set f [open file.dat r] 
set var [read $f 1024] 

此代码将读了从文件1024个字符(你会得到少于1024个字符,如果该文件是比短,自然)。

+0

如果您想将其限制为1kB,请在读取之前将文件通道置于二进制模式(使用'open file.dat rb'或'fconfigure $ f -translation binary')。 – 2011-06-05 14:25:11

+0

伙计们,非常感谢你!我现在有另一个问题。变量不会总是从文件中提供。在某些情况下,我需要从OS命令的输出中提取变量并提供该变量(类似于linux中的'ls')。问题是这个输出也可能太大。在这种情况下是否有限制变量的方法? – torta 2011-06-05 15:07:17

+0

@torta,你可以打开一个通道到你的shell:'set fid [open | my_program'r]',然后你可以以块的形式读取输出。 – 2011-06-06 04:35:41

3

ISTR,v8.5中任何变量的字符串表示的大小限制仅限于2   GiB。但正如Eric所说的那样,在你的情况下,你不应该将文件视为一个变量,而是要么以大块的方式处理文件的内容,要么至少首先使用file stat来估计文件的大小,然后读取它,如果大小合适的话(但请注意,这种方法当然包含竞争条件,因为文件可以在检查和读取之间增长,但在您的情况下,这可能会或可能不会成为问题)。