Technologie i narzędzia: język PHP 5, Java, JavaScript, Python, system Zend Framework, Django, biblioteka jQuery, Smarty, platforma Eclipse, MySQL, SVN, CVS, UML, Firefox.
WebProgramming - wszystko o serwisach internetowych
O serwisach internetowych.
[php|zend] Biblioteka obsługi plików CSV.
Już ładne kilkanaście miesięcy temu pracowałem nad projektem, w którym ważną częścią był import plików CSV (zapis z plików Excel). Przyznaje się bez bicia, iż wówczas zrobiłem to dość “nieładnie” - pomieszałem logikę importu z samym parsowaniem pliku i walidacją. Postanowiłem, więc że napiszę taki parser jeszcze raz - tym razem wg zasad naszego rzemiosła (standardowo bazuję na języku PHP i systemie Zend Framework).
Funkcjonalności tworzonej biblioteki bazowały na tych, które były potrzebne w/w projekcie plus kilka innych udogodnień, ostatecznie lista założeń jest następująca:
- dogodne pobieranie całych linii/komórek
- sprawdzanie poprawności formatu wybranych komórek oraz ich filtrowanie (wymuszanie typu)
- pomijanie nagłówków jeżeli jest taka potrzeba
Proste wykorzystanie biblioteki:
-
// Otwórz plik, plik zostanie wczytany do pamięci
-
$file = new Fasic_Csv(‘plikcsv.csv’);
-
// Dla każdego kolejnego wiersza
-
while(($line = $file->line()) !== false) {
-
// Pobierz drugą komórkę (komórki liczone są od zera, podobnie jak linie)
-
$line->ceil(1);
-
// Pobierz pierwszą komórkę i wymuś typ (konwersja)
-
$line->ceil(0, ‘float’);
-
// Pobierz pierwszą komórkę i sprawdź typ (w przypadku niepoprawnego typu
-
// wyrzuca wyjątek Fasic_Csv_Exception)
-
$line->ceil(0, ‘float’, ‘float’);
-
-
// Dodatkowo możemy pobrać całą linie w formacie..
-
// … napisu (oryginalny format z pliku)
-
$line->asString();
-
// … tablicy
-
$line->asArray();
-
}
-
// Skocz do 11tego wiersza:
-
$file->goto(10);
-
// Wówczas instrukcja:
-
$file->line();
-
// zwraca wiersz 11 i zwiększa wskaźnik (następne wywołanie tej metody
-
// zwróci wiersz 12sty).
-
-
// Pobierz następną linie, wg aktualnej pozycji, nie zwiększając wskaźnika
-
// W pierwszym obiegu pętli aktualny wskaźnik ma wartość 0, natomiast
-
// poniższa instrukcja zwraca wiersz 1 (dzięki temu możemy wykonać "look up").
-
$file->line(1);
W przypadku metody ceil(), wartości drugiego i trzeciego parametru są takie same. Wartości typów wykorzystywane w tej bibliotece opierają się na bibliotece Fasic_Forcetype, o której wspomniałem już wcześniej.
Powyższy przykład przedstawia najprostsze wykorzystanie biblioteki Fasic_Csv, w najbliższym czasie przedstawię inny sposób wykorzystania jej. Póki co zapraszam do analizy kodu ;).
Biblioteka Fasic_Csv:
- Źródła: http://webprogramming.pl/downloads/Fasic_Csv-0.9.zip
- Wersja: 0.9
- Data edycji: 10 luty 2009
- Instalacja: skopiować do katalogu Fasic, który jest w ścieżce poszukiwań skryptów PHP (w tym samym katalogu, w którym jest katalog Zend)
- Zależności: korzysta z bioblioteki Fasic_Forcetype
Napisz komentarz