对不起,如果标题与我的问题不符,我仍然不确定应该怎么做.
无论如何,我一直在Windows(wish)上使用Tcl/Tk 一段时间,直到最近才写到我写的脚本没有遇到任何问题.该脚本应该将一个大的txt文件分解成可以导入到excel的较小文件(我说的是打破一个文件,可能有25M行,大约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
Run Code Online (Sandbox Code Playgroud)
我改变了数字,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
Run Code Online (Sandbox Code Playgroud)
获取脚本阻止的位置并在此处停止:

文本编辑器在中间的行中没有识别出一个字符,显示为一个小方块.我试图使用fconfigure像邪恶的奥托建议,但我担心我不太明白channelID,name或value完全逃脱该角色的工作.嗯...帮忙?
reedIT:我设法找出fconfigure工作方式!谢谢邪恶的奥托!嗯,我不知道如何选择你的答案,因为这是一个评论而不是一个正确的答案......
“file.txt”中是否有可能存在任何二进制数据?在 Windows 下,如果 tcl 读取文件中的a ^Z(默认),则会标记 eof。eofchar您可以使用以下命令关闭此功能fconfigure:
fconfigure $data -eofchar {}
Run Code Online (Sandbox Code Playgroud)
有关完整详细信息,请参阅文档。