Bir dize Sınırlayıcı

3 Cevap php

İşte ben mysql db oluşturmak için kullanabileceğiniz bir dosya örneğidir. Ayraç "," "," ama tek bir sütun için açıklama var.

Header: City State Zip Description
Los Angeles, California , 98005, "welcome to california, were are living the dream","Please stay, a while."

Sorun "tırnak" içinde açıklama ek sütunlar için dosyayı neden olan bir sınırlayıcı içermesidir.

Birisi ifadenin veya preg_match fonksiyonları benim sorunu çözmek mümkün Gözat söyledi. Birisi bana nasıl söyleyebilir.

3 Cevap

Herhangi tekerlekleri yeniden icat etmeye gerek yok, PHP zaten fgetcsv ne gerek var

Bu CSV (Virgülle Ayrılmış Değerler veya) formatı için standart bir oldukça iyi çözülmüş bir sorundur. CSV ayrıştırma yaklaşım kolay yolu zaten test edilmiş ve güvenilir bir şekilde çalışır bir CSV kütüphane kullanmaktır. Bir CSV ayrıştırıcı hemen her programlama dili için var. Orada düşünce değil, özel durumlarda bir avuç vardır, bu nedenle çoğu durumda mevcut bir kütüphane kullanmak için buna değer.

Bu sayfa CSV ayrıştırma için iyi bir kaynaktır:

http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm

Her bir alan için, sizin gibi bir regex gerekir:

("(?:[^"]+|"")*"|[^,]+)

Yani iki alternatif olduğunu. Olmayan ilk çift tırnak bir dize ya da (iki katına kadar ise çift tırnak sizin dize görünmesini sağlamak için) çift tırnak bir çift ya da başka bir alternatif sıfır veya daha fazla tekrarlar bir desen ardından çift tırnak, maçlar . İkinci alternatif olmayan virgül bir dize eşleştirme, çift tırnak işareti olmadan bir alan eşleşir. Daha sonra virgül maçları bu birleştirmek istiyorum.