2011-06-13 16 views
11

Zend çerçevesini kullanarak CSV dosyalarını nasıl alabilirim? Zend_file_transfer kullanmalı mıyım yoksa bakmam gereken özel bir sınıf var mı? Ayrıca eğer zend_file_transfer kullanırsam CSV için özel bir doğrulayıcı var mı?zend kullanarak alma CSV

+3

, sen Zend_Translate veya bir çeviri dosyası ayrıştırmak için aradığınız sürece (Zend içinde CSV ayrıştırmak için hiçbir sınıf var CSV dosyaları ile Zend_Auth kullanıyorsanız). 'Fgetcsv' ile oldukça basit, o yüzden sanırım orada bir derse gerek yok. – netcoder

+0

@netcoder Tamam! Çok teşekkürler – JABD

cevap

12

size sadece Zend ile bunu yapmak için hiçbir yolu yoktur fgetcsv

$row = 1; 
if (($handle = fopen("test.csv", "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     $num = count($data); 
     echo "<p> $num fields in line $row: <br /></p>\n"; 
     $row++; 
     for ($c=0; $c < $num; $c++) { 
      echo $data[$c] . "<br />\n"; 
     } 
    } 
    fclose($handle); 
} 
+2

Yan uyarı: 'fgetcsv()' gerçekten unicode'u desteklemiyor, bu yüzden lokalleri juggle etmeniz gerekebilir. – Darien

+0

Evet, bunu fgetcsv kullanarak nasıl yapacağımı biliyorum ama özellikle zend ile ilgileniyorum. Yine de cevabın için teşekkürler. – JABD

+0

Dahili CSV fonksiyonları hatalı ve buggy. Yerel PHP'de CSV'yi ayrıştırmaya çalışmak bir kabus. –

1

bakmak, yerli php fonksiyonlarını kullanabilir, csv dosyalarını almak için herhangi bir zend kütüphaneleri kullanmak zorunda değilsiniz Çerçeve. Nasıl emin olabilirsiniz? Örneğin

, Zend_Translate CSV dosyaları ile çeviriyi desteklemektedir, ancak ilgili adaptör (Zend_Translate_Adapter_Csv ) kaynak kodunu kontrol ederseniz, bunu fgetcsv değil, belirli bir Zend sınıfı kullanır doğrulayabilir. Ayrıca, bu CSV adaptör aşağıdaki uyarı geliyor:

Not: CSV dosyaları çevrenin yerel ayarından daha farklı şekilde kodlanmış olduğunda Csv Adaptörü problemleri olduğu dikkat edin. Bu, PHP 6.0 'un PHP 6.0 (http://bugs.php.net/bug.php?id=38471) 'den önce düzeltilmeyeceği bir Hata Bugünden dolayı 'dur. Csv Bağdaştırıcının PHP kısıtlamaları nedeniyle yerel ayarının farkında olmadığını unutmayın. fgetcsv fonksiyon sorunları ile ilgilidir

.

0

Burada, csv dosyasını okuyan ve ilk iki sütun veri değerini içeren bir dizi öğe döndüren bir işlev vardır.

Bu işlev örneğin first_name, last_name adlı bir dosyayı okuyabilir.

function processFile ($filename) { 
    $rtn = array(); 

    if (($handle = fopen($filename, "r")) !== FALSE) { 
     while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
      $item = array(); 
      $item[] = $data[0]; 
      $item[] = $data[1]; 
      $rtn[] = $item; 
     } 
    } 
    return $rtn; 
} 
8

Ayrıca CSV dosyalarını okumak için SplFileObject'u da kullanabilirsiniz. php kılavuzunda itibaren

: Bildiğim kadarıyla farkındayım olarak

<?php 
    $file = new SplFileObject("animals.csv"); 
    $file->setFlags(SplFileObject::READ_CSV); 
    foreach ($file as $row) { 
     list($animal, $class, $legs) = $row; 
     printf("A %s is a %s with %d legs\n", $animal, $class, $legs); 
    } 
?> 

http://php.net/manual/en/splfileobject.fgetcsv.php

+0

SplFileObject herhangi bir yararlı doğrulama/hata sağlamaz - çöplükten geçmek, $ satırının öğenin tüm satırın olduğu bir öğe dizisi olmasıyla sonuçlanacaktır. –

İlgili konular