2011-06-05 67 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來估計文件的大小,然後讀取它,如果大小合適的話(但請注意,這種方法當然包含競爭條件,因爲文件可以在檢查和讀取之間增長,但在您的情況下,這可能會或可能不會成爲問題)。