![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 28.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
mam np. taki plik CSV: imie;nazwisko;adres Łukasz;Nowak;Podlaska 1/1 Jan;Łysy;Krakowska 2 Łukasz;Łysy;Łeba 1 i kod php do jego odczytu oraz wyświetlenia odczytanych danych: Kod <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> </HEAD> <BODY> <?php $row=0; $fp = fopen ("ludzie.csv", "r"); while ($data = fgetcsv ($fp, 2048, ";")) { if ($row>0) { $imie = $data[0]; $nazwisko = $data[1]; $adres = $data[2]; echo $row. '. ' . $imie . ' ' . $nazwisko . ' ' . $adres . '<BR>'; } $row=$row+1; } fclose($fp); ?> </BODY> </HTML> po jego wykonaniu wyświetla się: 1. ukasz Nowak Podlaska 1/1 2. Jan ysy Krakowska 2 3. ukasz ysy eba 1 Skrypt jest tu: http://www.kombo.krakow.pl/testy/ludzie.php Domyślam się że ma to związek z tym że litera "Ł" jest rozpoznawana jako znak funta brytyjskiego. Pytanie brzmi: co zrobić żeby "Ł" było wyświetlane jeśli występuje jako 1 litera? Ten post edytował kombo 28.09.2007, 20:05:08 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 300 Pomógł: 1 Dołączył: 22.09.2003 Skąd: Czeladź Ostrzeżenie: (0%) ![]() ![]() |
Masz błędnie zbudowny plik CSV. Zgodnie ze specyfikacją stringi umieszczasz w cudzysłowiach (o odzielaniu przecinkami nie wspomnę, bo to sama nazwa wskazuje: Comma-Separated Values (CSV)).
Ten post edytował tsharek 28.09.2007, 14:19:15 -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 28.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
Masz błędnie zbudowny plik CSV. Zgodnie ze specyfikacją stringi umieszczasz w cudzysłowiach (o odzielaniu przecinkami nie wspomnę, bo to sama nazwa wskazuje: Comma-Separated Values (CSV)). No cóż, zasugerowałem się Excelem który wyeksportował do CSV bez cudzysłowów a także zastosował średnik jako separator (sądze że akurat kwestia separatora jest tu najmniej ważna). Czyli co, poza zmianą zawartości CSV (czyli wzięcie w cudzysłowy każdego stringa) nic się nie da zrobić? Pomijam taką opcję że przy zapisie pliku csv np. sprawdzam czy 1 znak w stringu to "Ł" i jesli tak - zapisuję go jako np. "!#*Ł" a przy odczycie usuwam "!#*" |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 300 Pomógł: 1 Dołączył: 22.09.2003 Skąd: Czeladź Ostrzeżenie: (0%) ![]() ![]() |
oczywiście można, ale nie używając fgetcsv. Możesz pobrać csvke funkcją file" title="Zobacz w manualu PHP" target="_manual która zwruci Ci tablicę z wierszy pliku. Później foreach" title="Zobacz w manualu PHP" target="_manual i explode" title="Zobacz w manualu PHP" target="_manual i masz już wszystkie dane.
-------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 219 Pomógł: 5 Dołączył: 18.07.2006 Skąd: Piekary Śląskie Ostrzeżenie: (0%) ![]() ![]() |
Masz błędnie zbudowny plik CSV. Zgodnie ze specyfikacją stringi umieszczasz w cudzysłowiach (o odzielaniu przecinkami nie wspomnę, bo to sama nazwa wskazuje: Comma-Separated Values (CSV)). O tym oddzielaniu przecinkami to nie do końca tak... sam się kiedyś na tym przejechałem. Excel 2003 nie odczyta csvki z przecinkami - muszą być średniki. Za to Excel 2007 nie łyknie średników, tylko przecinki. Nie wiem jak z Excelem 2007 - wtedy jeszcze nie było ale generalnie są z tym jaja. -------------------- CMS dla Twojej firmy
Wojciech Małota |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 28.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
Pobawiłem się Excelem i okazało się że eksportuje do pliku CSV stringi ograniczone cudzysłowami jesli w danym stringu znajdzie się przynajmniej jeden znak średnika.
To raczej neguje mozliwość używania metody file->explode - bo jesli znajdzie się jakiś string ograniczony cudzysłowami w którym będzie średnik - wyjdzie kupa, funckja explode jednego stringa podzieli na dwa (niech mnie ktoś poprawi jeśli się mylę). Zakładam że może się kiedyś być taka sytuacja i wtedy dopiero byłby klops ![]() Postanowiłem jednak przerobić skrypt tak aby ograniczał stringi cudzysłowami, to chyba będzie najprostsza/najszybsza/najbezpieczniejsza metoda. Dziekuję wszystkim za wypowiedzi. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 10:02 |