gpt4 book ai didi

tcl - Tcl 8.5 中大文件的打开/读取命令

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

对不起,如果标题与我的问题不符,我仍然不确定我应该如何表达。

无论如何,我已经在 Windows ( wish ) 上使用 Tcl/Tk 一段时间了,直到最近我写的脚本都没有遇到任何问题。该脚本应该将一个大的 txt 文件分解成可以导入到 excel 的较小文件(我说的是分解一个可能有 2500 万行的文件,大约 2.55 GB)。

我目前的脚本是这样的:

set data [open "file.txt" r]
set data1 [open "File Part1.txt" w]
set data2 [open "File Part2.txt" w]
set data3 [open "File Part3.txt" w]
set data4 [open "File Part4.txt" w]
set data5 [open "File Part5.txt" w]


set count 0
while {[gets $data line] != -1} {
if {$count > 4000000} {
puts $data5 $line
} elseif {$count > 3000000} {
puts $data4 $line
} elseif {$count > 2000000} {
puts $data3 $line
} elseif {$count > 1000000} {
puts $data2 $line
} else {
puts $data1 $line
}
incr count
}

close $data
close $data1
close $data2
close $data3
close $data4
close $data5

我改变了 if 中的数字获取每个文件所需的行数,或添加/删除任何 elseif需要的地方。

问题是,使用我得到的最新文件,我最终只有大约一半的数据(1.22 GB 而不是 2.55 GB),我想知道是否有一行告诉 Tcl 忽略它可以读取的限制。我试图寻找它,但我没有找到任何东西(或任何我能很好理解的东西;我仍然是 Tcl 的业余爱好者 ^^;)。谁能帮我?

编辑(更新):
我找到了一个打开大文本文件的程序,并设法直接预览文件的内容。实际上有 16,756,263 行。我将脚本更改为:
set data [open "file.txt" r]
set data1 [open "File Part1.txt" w]

set count 0
while {[gets $data line] != -1} {
incr count
}
puts $data1 $count
close $data
close $data1

获取脚本阻塞的位置并在此处停止:
enter image description here

中间行中有一个文本编辑器无法识别的字符,显示为一个小方块。我尝试使用 fconfigure就像邪恶的奥托建议的那样,但恐怕我不太明白 channelID , namevalue完全可以逃避那个角色。嗯……帮忙?

重新编辑 : 我设法找到了 fconfigure工作!感谢邪恶的奥托!嗯,我不确定如何“选择”你的答案,因为它是评论而不是正确的答案......

最佳答案

“file.txt”中是否可能有任何二进制数据?在 windows 下,如果 tcl 读取 ^Z,它会标记 eof (默认 eofchar )在一个文件中。您可以使用 fconfigure 关闭此功能:

fconfigure $data -eofchar {}

有关完整详细信息,请参阅文档。

关于tcl - Tcl 8.5 中大文件的打开/读取命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13933199/

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