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 - przykład.
Ponad dwa miesiące temu (ale ten czas leci…) przedstawiłem Wam propozycję klasy ułatwiającą pracę z plikami CSV - obiecałem wówczas, iż przedstawię bardziej zaawansowany przykład jej wykorzystania. Dotrzymuje więc obietnicy ;).
Przypomnę, iż poprzednio zaprezentowałem ogólne możliwości biblioteki Fasic_Csv, które między innymi skupiały się na:
- pobraniu następnej (lub dowolnie wybranej) linii z pliku CSV w postaci napisu oraz tablicy komórek
- pobraniu wybranej komórki, dla której można było określać jej typ (patrz biblioteka
Fasic_Forcetype)
Powyższe funkcjonalności są dość oczywiste… jednak omawiana biblioteka potrafi coś więcej…a mianowicie pobranie linii w postaci obiektu. Jak do tego się zabrać?
-
// Plik plikcsv.csv:
-
1,Szymon
-
-
// Otwórz plik, cały plik zostanie wczytany do pamięci
-
$file = new Fasic_Csv(‘plikcsv.csv’);
-
// Ustaw mapowanie dla danych (nazwa pola obiektu - numer kolumny),
-
// określając co najmniej nazwę pola i numer kolumny
-
// ‘numer kolumny w pliku CSV’ => ‘nazwa pola w obiekcie’:'wymagany typ pola’
-
// ‘typ pola’ jest opcjonalny, przyjmuje takie wartości jak Fasic_Forcetype
-
1 => ‘id:int’
-
2 => ‘name’
-
));
-
// Dla każdego kolejnego wiersza
-
while(($line = $file->line()) !== false) {
-
// Pobierz linie w formacie tablicy, czyli po staremu…
-
$arr = $line->asArray();
-
// Pobierz linie w formacie obiektu (klasy stdClass) na podstawie mapowania
-
$obj = $line->asObject();
-
// Wówczas dla linii numer 0
-
// $arr[0] == 1, $arr[1] == ‘Szymon’
-
// $obj->id == 1, $obj->name == ‘Szymon’
-
// W przypadku gdy podane są typy pól obiektu (wartości po ‘:’) wykonanie
-
$ok = $line->isValid();
-
// zwraca true, jeżeli ma wartości poprawne, false w przeciwnym przypadku
-
}
Jak widać na powyższym przykładzie korzystanie z wersji “obiektowej” pobranej linii pliku CSV jest bardziej przejrzyste i ładniejsze. Dodatkowo umożliwia definiowanie typów dla wybranych pól.
Opcja ta okazuję się bardzo przydatna również w przypadku, gdy chcemy pobrać takie same dane z różnych plików (które są zapisane w różnych formatach, czyli np w jednym id jest na pozycji 2 a w drugim na pozycji 9). Wówczas definiujemy dwie różne mapy i w linii #7 rozpoznajemy, którą z nich wykorzystać. Dalsza część naszego skryptu będzie wyglądała identycznie dla każdego pliku.
Powyższy przykład opierał się na bibliotece Fasic_Csv w wersji 0.9, którą można pobrać tutaj. Jednak już niebawem pojawi się następna wersja (poprawione błędy i kilka nowych funkcjonalności).
Napisz komentarz