मैं तुम्हें अगर आप बड़ी राशि का उपयोग करने के लिए एक समाधान दे देंगे सीवीएस और आप अपनी मशीन की अधिकांश रैम का उपयोग नहीं करना चाहते हैं (कल्पना करें कि प्रत्येक सीएसवी 1 जीबी है, उदाहरण के लिए)।
<?php
function joinFiles(array $files, $result) {
if(!is_array($files)) {
throw new Exception('`$files` must be an array');
}
$wH = fopen($result, "w+");
foreach($files as $file) {
$fh = fopen($file, "r");
while(!feof($fh)) {
fwrite($wH, fgets($fh));
}
fclose($fh);
unset($fh);
fwrite($wH, "\n"); //usually last line doesn't have a newline
}
fclose($wH);
unset($wH);
}
उपयोग:
<?php
joinFiles(array('join1.csv', 'join2.csv'), 'join3.csv');
मज़ेदार तथ्य:
मैं सिर्फ यह प्रयोग किया जाता 500,000 लाइनों प्रत्येक के 2 CSV फ़ाइलों concat को ~। इसमें लगभग 5 सेकेंड लगे और 512 केबी मेमोरी का इस्तेमाल किया।
तर्क:
ओपन प्रत्येक फ़ाइल, एक पंक्ति को पढ़ने और फिर आउटपुट फ़ाइल के लिए लिखते हैं। हां, यह पूरे बफर लिखने की बजाय प्रत्येक पंक्ति को धीमा लिख सकता है, लेकिन यह मशीन की स्मृति पर कोमल होने के दौरान भारी फ़ाइलों के उपयोग की अनुमति देता है। किसी भी समय, आप सुरक्षित हैं क्योंकि स्क्रिप्ट केवल एक समय में लाइन पर पढ़ती है और फिर इसे लिखती है।
आनंद लें!
स्रोत
2011-03-24 10:48:19
या, यदि आपको अब मूल डेटा की आवश्यकता नहीं है तो आप दूसरी सीएसवी लाइन से लाइन पढ़ सकते हैं और इसे पहले जोड़ सकते हैं। समाप्त होने पर, दूसरा सीएसवी हटाएं और पहले नाम बदलें .. – Catalin