2011-10-06 18 views
5

मैं यह निर्धारित करने की कोशिश कर रहा हूं कि सीएसवी फ़ाइल में कितने कॉलम हैं।PHP fgetcsv() - कॉलम की संख्या

यहां मेरी स्क्रिप्ट है, जो केवल पहले कॉलम का उपयोग कर रही है, लेकिन मैं थोड़ा अंधा चल रहा हूं। मैं एक वैरिएबल रखना चाहता हूं जो कॉलम गिनती को सीमित करता है। (के बाद से मैं एक गलती करते हैं सकता है और एक स्तंभ जोड़ने के लिए, या यहां तक ​​कि एक कॉलम याद आती है)

<?php 
$allowedColNum=5; 
$batchcount=0; 
$file = fopen($file_name, "r"); 
while ($line = fgetcsv($file)){ 
/* I want to stop the loop if the $allowedColNum is not correct */     
    $col = $line[0]; 
    echo $batchcount++.". ".$col."\n"; 
} 

fclose($file); 
?> 

मुझे यकीन है कि यह उन के लिए आसान आसान चीजें हैं जो मैं नहीं मिल रहा है में से एक है कर रहा हूँ।

उत्तर

13

यदि मैं समझता हूं, तो आपको बस count($line) की आवश्यकता है, क्योंकि fgetcsv() ने CSV फ़ाइल से एक पंक्ति का प्रतिनिधित्व करने वाली एक सरणी वापस कर दी है। सरणी count() इसलिए स्रोत कॉलम की संख्या है।

while ($line = fgetcsv($file)){ 

    // count($line) is the number of columns 
    $numcols = count($line); 

    // Bail out of the loop if columns are incorrect 
    if ($numcols != $allowedColNum) { 
    break; 
    } 
    $col = $line[0]; 
    echo $batchcount++.". ".$col."\n"; 
} 
+0

मुझे लगता है! मुझे लगता है कि मैं व्यक्तिगत पंक्तियों के बाद बनाम बनाम $ numcols खोजने के साथ खुद को भ्रमित कर रहा था। मुझे कल्पना है कि यह कैसे काम करता है, क्योंकि एक विशिष्ट पंक्ति में एक ही फ़ाइल में अन्य लोगों की तुलना में एक अलग कॉलम नंबर होता है। लेकिन मैं ईमानदारी से उस पर धारणा कर रहा हूं, क्योंकि मैं फाइलों के साथ नया हूं। – coffeemonitor

0

परीक्षण नहीं किया गया, लेकिन काम करना चाहिए!

$allowedColNum=5; 
$batchcount=0; 
$file = fopen($file_name, "r"); 
$totCols=0; 
while ($line = fgetcsv($file)) 
if(count($line) > $totCols) $totCols = count($line); 
fseek($file, 0); 
while ($line = fgetcsv($file)) 
{ 
    //.... 
} 
fclose($file); 

संपादित करें: परीक्षण किया है, काम कर fseek कर (0) के बजाय एक सरणी में मानों को बचाने: बहुत तेजी से हो जाएगा

0

माइकल Berkowski मेरे लिए इस सवाल का जवाब काम ठीक है, लेकिन मेरे मामले में, मैं fgetcsv() फ़ंक्शन कॉल में csv विभाजक को भी निर्दिष्ट करना था। यह अल्पविराम है "," डिफ़ॉल्ट रूप से, मैं इसे अर्धविराम में बदलता हूं ";"। इस तरह:

जबकि ($ line = fgetcsv ($ file, 0, ';')) {

संबंधित मुद्दे