タイトルが私の質問とうまく一致していない場合は申し訳ありませんが、どうすればよいかまだわかりません。
とにかく、私はwish
しばらくの間 Windows ( ) で Tcl/Tk を使用してきましたが、最近まで、私が作成したスクリプトで問題に遭遇したことはありません。このスクリプトは、大きな txt ファイルを、Excel にインポートできる小さなファイルに分割することになっています (約 2.55 GB になる、おそらく 2,500 万行のファイルを分割することについて話している)。
私の現在のスクリプトは次のようなものです:
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
。
問題は、私が入手した最新のファイルでは、データが約半分 (2.55 GB ではなく 1.22 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
スクリプトがブロックされている場所を取得し、ここで停止しました。
小さな四角で示されている中央の行に、テキスト エディタが認識していない文字があります。私は邪悪なオットーが提案したように使用しようとしましたが、その文字をエスケープするために,または正確にfconfigure
機能する方法をよく理解していないのではないかと心配しています. あの…助けて?channelID
name
value
再編集:私はどのようにfconfigure
働いたかを知ることができました!悪オットありがとう!ええと、適切な回答ではなくコメントであるため、回答を「選択」する方法がわかりません...