php - fputcsv, satırın sonuna yeni satır eklenmiyor

Bir dizi dizisine sahibim ve diziyi bir csv dosyasına eklemeye çalışıyorum.

Bu benim kodum

$file = 'a.csv'; //path to the file on disk


$fp = fopen($file, 'w') or die('Cannot open file:  '.$file);
foreach ($column as $fields) {
    print ($fields);
    fputcsv($fp, $fields);
}

fclose($fp);

veri bu

$column = (
       (1,2,3), (a,b,c)
)

böyle çıktı istiyorum

1,2,3
a,b,c

Ama bunun gibi çıktı alıyorum

1,2,3,a,b,c
1
Newline olarak bir "\ n" olabilir mi ve editörünüz bunu anlamıyor mu (notepad.exe gibi)?
katma yazar Siguza, kaynak
Newline olarak bir "\ n" olabilir mi ve editörünüz bunu anlamıyor mu (notepad.exe gibi)?
katma yazar Siguza, kaynak
aslında virgül iki satır arasında geliyor
katma yazar user2728024, kaynak
excel içinde açıyorum
katma yazar user2728024, kaynak
excel içinde açıyorum
katma yazar user2728024, kaynak
Yeni satır csv dosyasına eklenmiyor
katma yazar user2728024, kaynak
Yeni satır csv dosyasına eklenmiyor
katma yazar user2728024, kaynak
Sorgunuz tam olarak nedir? csv dosyasına veya tarayıcıya yeni satır eklenmedi mi?
katma yazar bSaraogi, kaynak
Sorgunuz tam olarak nedir? csv dosyasına veya tarayıcıya yeni satır eklenmedi mi?
katma yazar bSaraogi, kaynak

9 cevap

Yeni bir satır eklemek için eksik yapmayı basitleştirdiğini düşünüyorum:

print($fielsd."\n")//if the aoutput is console
print($fields."
")//in case of html output
2
katma
Evet, bunu tartışmıyorum. Ama yine de bu soruyu cevaplamıyor.
katma yazar Siguza, kaynak
OP, dosyasında yeni satır olmadığını söyledi.
katma yazar Siguza, kaynak
Dosyada yeni bir satır yok, ancak her satırı yeni satıra yazdırmak istiyorsanız, kendiniz eklemeniz gerekir.
katma yazar Kancho Iliev, kaynak

Yeni bir satır eklemek için eksik yapmayı basitleştirdiğini düşünüyorum:

print($fielsd."\n")//if the aoutput is console
print($fields."
")//in case of html output
2
katma
Evet, bunu tartışmıyorum. Ama yine de bu soruyu cevaplamıyor.
katma yazar Siguza, kaynak
OP, dosyasında yeni satır olmadığını söyledi.
katma yazar Siguza, kaynak
Dosyada yeni bir satır yok, ancak her satırı yeni satıra yazdırmak istiyorsanız, kendiniz eklemeniz gerekir.
katma yazar Kancho Iliev, kaynak

Son alanın "PHP_EOL" sonunu eklemeye çalışabilir misiniz?

0
katma

Fputscsv yeni bir satırla sınırlandırıldığından

fputcsv (), bir satırı (bir alan dizisi olarak geçirilir) CSV olarak biçimlendirir ve belirtilen dosya tanıtıcısına onu yazar (yeni satırla sonlandırılır).

Veri girişiniz gerekli formata uyacak şekilde değiştirilmelidir

$column = (
   (1,2,3) , (a,b,c)
)

Gerekli formatı elde etmek için kodu değiştirin veya değiştirin.

$column = array (
    array('1', '2', '3', '4'),
    array('a', 'b', 'c')

);

Bunu, başlangıç ​​dosyasından gerçek a.csv çıktısına sahip olmadan demo yapmam için çok fazla yol var, ancak explode() 'nin işi iyi yapacağını tahmin ediyorum. Bu, fputscsv'nin çalışması için gerektiği şekilde diziye bir dizi listesi yerleştirir.

$columns[] = explode("),(");

Buna veritabanı çıktısı kullanan bir örnek.

$result = $connect->prepare("SELECT type_id, label, type, description FROM content_types WHERE type_id='". $args[0] ."'");
        $result->execute();
        $data = $result->fetchALL(PDO::FETCH_ASSOC);

$columns[] = $data;

Ayrıca orijinal gönderiye bakın ve bir için yanıtı inceleyin benzer bir soru .

0
katma
Veritabanından getirme sonuç koduna veya dosyaya ayarlanan asıl diziye ihtiyaç olacak. Veritabanı sonuçları bir dizide veya nesnede olabilir. Bu çıktı bir konteyner dizisine yerleştirilmelidir. Otomatik olarak gerçekleşmez. Sonuçlara uyacak şekilde manipüle etmeniz gerekecektir.
katma yazar Carl McDade, kaynak
Veriyi bir veritabanından okuyorum ve sonuçları bir dizi dizisine dönüştürüyorum. Sonra veriyi bir dosyaya yazmaya çalışıyorum
katma yazar user2728024, kaynak
format değiştirildi. hala aynı. Bir dizi dizi kullanıyorum
katma yazar user2728024, kaynak

Fputscsv yeni bir satırla sınırlandırıldığından

fputcsv (), bir satırı (bir alan dizisi olarak geçirilir) CSV olarak biçimlendirir ve belirtilen dosya tanıtıcısına onu yazar (yeni satırla sonlandırılır).

Veri girişiniz gerekli formata uyacak şekilde değiştirilmelidir

$column = (
   (1,2,3) , (a,b,c)
)

Gerekli formatı elde etmek için kodu değiştirin veya değiştirin.

$column = array (
    array('1', '2', '3', '4'),
    array('a', 'b', 'c')

);

Bunu, başlangıç ​​dosyasından gerçek a.csv çıktısına sahip olmadan demo yapmam için çok fazla yol var, ancak explode() 'nin işi iyi yapacağını tahmin ediyorum. Bu, fputscsv'nin çalışması için gerektiği şekilde diziye bir dizi listesi yerleştirir.

$columns[] = explode("),(");

Buna veritabanı çıktısı kullanan bir örnek.

$result = $connect->prepare("SELECT type_id, label, type, description FROM content_types WHERE type_id='". $args[0] ."'");
        $result->execute();
        $data = $result->fetchALL(PDO::FETCH_ASSOC);

$columns[] = $data;

Ayrıca orijinal gönderiye bakın ve bir için yanıtı inceleyin benzer bir soru .

0
katma
Veritabanından getirme sonuç koduna veya dosyaya ayarlanan asıl diziye ihtiyaç olacak. Veritabanı sonuçları bir dizide veya nesnede olabilir. Bu çıktı bir konteyner dizisine yerleştirilmelidir. Otomatik olarak gerçekleşmez. Sonuçlara uyacak şekilde manipüle etmeniz gerekecektir.
katma yazar Carl McDade, kaynak
Veriyi bir veritabanından okuyorum ve sonuçları bir dizi dizisine dönüştürüyorum. Sonra veriyi bir dosyaya yazmaya çalışıyorum
katma yazar user2728024, kaynak
format değiştirildi. hala aynı. Bir dizi dizi kullanıyorum
katma yazar user2728024, kaynak

Geçenlerde fputcsv kullanarak nasıl yeni bir hat elde edeceğimi araştırmaya çalıştım ve bu yazıyla karşılaştım. Yeni satır eklemek için fwrite kullanarak onun etrafında var.

    $aKeys = array_keys($aDataKeys);
    $rTmpFile = fopen('php://temp', 'rw');
    fputcsv($rTmpFile, $aKeys);
    foreach ($aData as $aRow ) {
        fwrite($rTmpFile,"\r\n"); //<------Add a new line
        fputcsv($rTmpFile, $aRow);
    }
    rewind($rTmpFile);
    $sCsv = stream_get_contents($rTmpFile);
    fclose($rTmpFile);
0
katma

Geçenlerde fputcsv kullanarak nasıl yeni bir hat elde edeceğimi araştırmaya çalıştım ve bu yazıyla karşılaştım. Yeni satır eklemek için fwrite kullanarak onun etrafında var.

    $aKeys = array_keys($aDataKeys);
    $rTmpFile = fopen('php://temp', 'rw');
    fputcsv($rTmpFile, $aKeys);
    foreach ($aData as $aRow ) {
        fwrite($rTmpFile,"\r\n"); //<------Add a new line
        fputcsv($rTmpFile, $aRow);
    }
    rewind($rTmpFile);
    $sCsv = stream_get_contents($rTmpFile);
    fclose($rTmpFile);
0
katma

İyi çalışması gerekir. Aynı zamanda kodlamayı da sağlayan bir kod var.

 $filename = '';//$filename = 'something.csv';
 $chosen = array(); 
  /* $chosen = array (
  *    array('ąąąą', 'źźźź', 'ęeęę', 'óóó'),
  *    array('łłłłł','żżżż', '1111', '22222')
  );*/

$file = fopen($filename, 'w');

foreach ($chosen as $row) {
  fputs($file, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) ));
  fputcsv($file, $row);
}

fclose($file);

çıktı

ąąąą,źźźź,ęeęę,óóó
łłłłł,żżżż,1111,2222
0
katma
evet yaptım. dosya adı verdim ve veriyi aslo verdim
katma yazar user2728024, kaynak
dosya oluşturulmuyor
katma yazar user2728024, kaynak
kodu şöyle yazdım $ file_name = "download.csv"; $ file = fopen ($ dosya_adı, "w"); $ i = 0; foreach ($ alanlar olarak $ sütun) {// print ($ fields); foreach ($ alanları olarak $ alanları) {if ($ i! = 3) {fputs ($ dosyası, $ verileri. ","); $ İ ++; } else {fputs ($ dosya, $ veri. "\ n"); $ i = 0; }} fclose ($ dosyası); }
katma yazar user2728024, kaynak
Tuhaf. Benim için iyi çalışıyor. Muhtemelen yanlış bir şey yapıyorsun.
katma yazar Nubzor, kaynak
Yapmalı. Dosya adı değişkeninin bir dizinin yanı sıra boş olduğunu göz önünde bulundurun. Onları rahatsız et veya verilerini mevcut olana koy.
katma yazar Nubzor, kaynak
Beni burada, $ column değişkeninin içeriği. Var dökümü falan yapın.
katma yazar Nubzor, kaynak

İyi çalışması gerekir. Aynı zamanda kodlamayı da sağlayan bir kod var.

 $filename = '';//$filename = 'something.csv';
 $chosen = array(); 
  /* $chosen = array (
  *    array('ąąąą', 'źźźź', 'ęeęę', 'óóó'),
  *    array('łłłłł','żżżż', '1111', '22222')
  );*/

$file = fopen($filename, 'w');

foreach ($chosen as $row) {
  fputs($file, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) ));
  fputcsv($file, $row);
}

fclose($file);

çıktı

ąąąą,źźźź,ęeęę,óóó
łłłłł,żżżż,1111,2222
0
katma
dosya oluşturulmuyor
katma yazar user2728024, kaynak
evet yaptım. dosya adı verdim ve veriyi aslo verdim
katma yazar user2728024, kaynak
kodu şöyle yazdım $ file_name = "download.csv"; $ file = fopen ($ dosya_adı, "w"); $ i = 0; foreach ($ alanlar olarak $ sütun) {// print ($ fields); foreach ($ alanları olarak $ alanları) {if ($ i! = 3) {fputs ($ dosyası, $ verileri. ","); $ İ ++; } else {fputs ($ dosya, $ veri. "\ n"); $ i = 0; }} fclose ($ dosyası); }
katma yazar user2728024, kaynak
Yapmalı. Dosya adı değişkeninin bir dizinin yanı sıra boş olduğunu göz önünde bulundurun. Onları rahatsız et veya verilerini mevcut olana koy.
katma yazar Nubzor, kaynak
Tuhaf. Benim için iyi çalışıyor. Muhtemelen yanlış bir şey yapıyorsun.
katma yazar Nubzor, kaynak
Beni burada, $ column değişkeninin içeriği. Var dökümü falan yapın.
katma yazar Nubzor, kaynak