क्षमा करें यदि शीर्षक अच्छी तरह से मेरे सवाल से मेल नहीं खाता, मैं अभी भी मैं इसे कैसे करना चाहिए के रूप में अनिश्चित हूँ।खुला/बड़ी फ़ाइलों के लिए Tcl 8.5 में आदेश को पढ़ने के
वैसे भी, मैं कुछ समय के लिए विंडोज़ (wish
) पर टीसीएल/टीएस का उपयोग कर रहा हूं और हाल ही में लिखी गई स्क्रिप्ट पर किसी भी समस्या का सामना नहीं किया है। स्क्रिप्ट कि उत्कृष्टता प्राप्त करने आयात किया जा सकता छोटी फ़ाइलों (मैं शायद 25M लाइनों जो चारों ओर 2.55 जीबी आता है के साथ एक फ़ाइल टूट के बारे में बात कर रहा हूँ) में एक बड़ी txt फ़ाइल तोड़ने के लिए माना जाता है।
मेरे वर्तमान स्क्रिप्ट ऐसा ही कुछ है:
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 जीबी की बजाय 1.22 जीबी) के साथ समाप्त होता हूं और मैं सोच रहा था कि क्या एक रेखा थी जिसने टीसीएल को उस सीमा को अनदेखा करने के लिए कहा था पढ़ सकते हैं। मैंने इसे देखने की कोशिश की, लेकिन मुझे कुछ भी नहीं मिला (या कुछ भी जो मैं अच्छी तरह से समझ सकता था; मैं अभी भी टीसीएल ^^ पर शौकिया हूं); क्या कोई मेरी मदद कर सकता है?
संपादित करें (अपडेट): मैं बड़े पाठ फ़ाइलों को खोलने के लिए एक कार्यक्रम मिल गया है और फ़ाइल सीधे की सामग्री के एक पूर्वावलोकन पाने में कामयाब रहे। वास्तव में 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
जहां स्क्रिप्ट ब्लॉक कर रहा है पाने के लिए और इसे यहाँ बंद कर दिया:
वहाँ एक चरित्र है कि पाठ संपादक बीच एक छोटे से वर्ग के रूप में दिखाने वाले लाइन में पहचान नहीं कर रहा है । मैं बुराई ओटो तरह का सुझाव दिया है लेकिन मुझे डर है मैं काफी कैसे channelID
, name
या value
काम वास्तव में उस चरित्र से बचने के लिए समझ में नहीं आता हूँ fconfigure
का उपयोग करने की कोशिश की। उम ... मदद?
reedit: मैं पता लगाने के लिए fconfigure
काम किया कामयाब रहे! धन्यवाद बुराई ओटो! उम, मुझे यकीन नहीं है कि मैं आपके उत्तर को कैसे चुन सकता हूं क्योंकि यह एक उचित उत्तर के बजाय एक टिप्पणी है ...
1.22 परिणामस्वरूप फाइलों का संयुक्त आकार है? इनपुट फ़ाइल पाठ या बाइनरी है? – pn8830
यह काम करना चाहिए; 8.4 में बड़े-फ़ाइल समर्थन को जोड़ा गया था और आप एक ही समय में सभी डेटा पढ़ने की कोशिश नहीं कर रहे हैं ... –
क्या यह संभव है कि "file.txt" में कोई बाइनरी डेटा हो? विंडोज़ के तहत, अगर फ़ाइल में '^ Z' (डिफ़ॉल्ट 'eofchar') पढ़ता है तो टीसीएल ईओएफ ध्वजांकित करेगा। आप इसे 'fconfigure' के साथ बंद कर सकते हैं - विवरण के लिए दस्तावेज़ देखें। –