2011-05-03 18 views
5

OpenOffice Excel tarafından düzenlenen ve kaydedilen csv dosyasının sınırlayıcısı ";" microsoft office excel ise ",", hangi sınırlayıcı kullanırsa kullanalım csv dosyasını ayrıştırmak için bir program yazmalıyım? Sınırlayıcıyı üçüncü bağımsız değişken olarak belirtmenize olanak verir.Sınırlayıcı değiştiğinde csv dosyasını php'de nasıl ayrıştırmalıyım?

+1

Microsoft'un, Openoffice elektronik tablosunu açıklamak için 'Excel' kullanımıyla ilgili ticari marka dilüsyonuna itiraz edeceğini düşünüyorum. – pavium

cevap

0

.

Otomatik olarak algılandığında, this question için bazı ilginç cevaplar var.

1

SplFileObject :: getCsvControl yöntemini kullanın. Örnek kullanım:

<?php 
$csvFileObject = new SplFileObject($_FILES["csv"]["tmp_name"]); 
list($delimiter, $enclosure) = $csvFileObject->getCsvControl(); 

$lines = fopen($_FILES["csv"]["tmp_name"], 'r'); 
if($lines) { 
    while (($line = fgetcsv($lines, 4096, $delimiter, $enclosure)) !== false) { 
     //do something 
    } 
}  

Referans: http://php.net/manual/en/splfileobject.getcsvcontrol.php

+1

Bu yöntem, 5.5'te düzgün çalışmaz (eski sürümlerde de olabilir). –

2

ben kullanıldığı ayırıcı belirlemek için benim uygulamalardan biri bu işlevi kullanıyorum:

function get_separator($csvstring, $fallback = ';') { 
    $seps = array(';',',','|',"\t"); 
    $max = 0; 
    $separator = false; 
    foreach($seps as $sep){ 
     $count = substr_count($csvstring, $sep); 
     if($count > $max){ 
      $separator = $sep; 
      $max = $count; 
     } 
    } 

    if($separator) return $separator; 
    return $fallback; 
} 

Temelde ayırıcı de oluştuğu denetler en çok ve onu döndürür. Yaklaşık iki yıldır problemsiz çalışıyor

İlgili konular