gpt4 book ai didi

tcl - 在Tcl中逐个数据字读取文件数据

转载 作者:行者123 更新时间:2023-12-02 04:32:49 33 4
gpt4 key购买 nike

我想在 Tcl 中读取包含 ASCII 字符的文件(常规文本文件,用于我们的目的),并将其以十六进制形式逐字存储在数组中(即逐个数据字,每个数据字 32 位)。

一个示例是包含以下内容的文本文件:

ÿÿÿÿûûûûÿÿÿÿ    

(在 ASCII 字符中,ÿ = FF,û = FB)

我想将其解析为一个数组,结果

[["FFFFFFFF"], ["FBFBFBFB"], ["FFFFFFFF"]]

我该如何实现这一目标?我似乎找不到合适的功能。

最佳答案

阅读

要获取数据,您可以使用以下内容:

set f [open theFile.txt]
set data [gets $f]
close $f

请注意,对于此类工作,我会考虑将文件作为二进制数据使用:

set f [open theFile.bin "rb"]
set data [read $f 12]
close $f

解析/转换

将数据解释为十六进制序列(小写)很容易:

binary scan $data H8H8H8 word(1) word(2) word(3)

它将值存储到名为 word关联数组中(索引为 123)。如果您想要像您在其他语言中习惯的东西,那么您可以转换为 Tcl 列表,如下所示:

set wordList [list $word(1) $word(2) $word(3)]

Tcl 的列表值是真正的一流值。关联数组不是,而是命名实体,因此我们可以在二进制扫描中使用它们。

使用

完成上述操作后,您可以使用以下命令在列表中查找内容:

# *Zero*-based indexing is the rule in Tcl
lindex $wordList 0

并迭代它们:

foreach item $wordList { puts $item }

大小写转换

如果您确实需要大写十六进制,请像这样应用string toupper:

# Nasty type-shimmering trick!
set wordList [string toupper $wordList]

或者在 Tcl 8.6 中,您可以做这个更好的版本:

set wordList [lmap item $wordList {string toupper $item}]

但我实际上只是string toupper,因为我在正常情况下使用了该值。

puts "[lindex $wordList 0] -> [string toupper [lindex $wordList 0]]"

关于tcl - 在Tcl中逐个数据字读取文件数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22640420/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com