php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.08.2011, 15:43  
Neuer Benutzer
 
Registriert seit: 02.08.2011
Beiträge: 2
PHP-Kenntnisse:
Anfänger
sdic befindet sich auf einem aufstrebenden Ast
Standard .csv und Zeilenausgabe

Hallo ihr!

Vorweg, ich bin absoluter PHP Einsteiger und programmiere gerade mein erstes PHP-Script.

Es geht dabei um eine .csv-Liste mit einigen Adressen. Jede Adresse ist in der .csv Datei eine Zeile. Diese Adressen sollen auf einer Website via PHP ausgegeben werden.

Dieses Script habe ich nun zur Ausgabe der Adressen programmiert und es funktioniert auch alles soweit:

PHP-Code:
<?php
ini_set
('auto_detect_line_endings'true);
$handle fopen ("DE/DE_PLZ6.csv","r");
while ( (
$data fgetcsv ($handle1000";")) !== FALSE )

{
echo 
"<div id=\"haendler\">";

echo 
"<div id=\"haendler_left\">";

echo 
"<h2>".$data[0]. "&nbsp;" .$data[1]."</h2>" ;
echo 
"<strong>" .$data[2]. "</strong> <br />" ;
echo 
" " .$data[3]. "<br />" ;
echo 
" " .$data[4]. "<br />" ;

echo 
"</div>";

echo 
"<div id=\"haendler_right\">";

echo 
"Tel. " .$data[5]. "<br />" ;
echo 
"<a href=\"mailto:".$data[6]."\">" .$data[6]. "</a> <br />" ;
echo 
"<a href=\"http://".$data[7]."\">" .$data[7]. "</a><br />\r\n" ;

echo 
"</div>";

echo 
"</div>";


}
fclose ($handle);
?>
Mit diesem Script werden mir alle Adressen der .csv - Datei untereinander angezeigt. Ich möchte nun aber, dass z.B. nur Zeile 13-27 ausgegeben werden und alle anderen Zeilen ignoriert werden.

Wie muss ich meinen Code nun ändern, damit genau das passiert?

Danke schon einmal!

Geändert von sdic (02.08.2011 um 15:48 Uhr).
sdic ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 02.08.2011, 15:50  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.486
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Ich würds mit file() machen und die einzelnen Datenfelder der Zeilenfelder mit explode() trennen.
Damit hast zu einen ( file() ) alle Zeilen in einem Array mit numerischem Index und kannst auf jeden beliebigen DS zugreifen und zum anderen ( explode() ) jeweils das entsprechende Feld.

Ach quatsch, noch besser: fgetcsv() !!!
Wozu ha'm wir das denn...
__________________
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Albert Einstein

Geändert von Arne Drews (02.08.2011 um 15:51 Uhr). Grund: fgetcsv nicht bedacht
Arne Drews ist offline   Mit Zitat antworten
Alt 02.08.2011, 15:51  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Zeilen mitzählen...

@Arne: Bei kleineren CSV mit Sicherheit die schnellere / einfachere Lösung, wird das CSV aber groß bis riesig, bekommt man u.U. Probleme mit dem Speicher.
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 02.08.2011, 15:57  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Führe einen simplen Zähler mit, den du in jedem Schleifedurchlauf um eins erhöhst, und vor der Ausgabe der Zeile abfragst.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 02.08.2011, 16:08  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Und mit break kannst du dann ggf. die while-Schleife vorzeitig beenden.
fab ist offline   Mit Zitat antworten
Alt 02.08.2011, 16:13  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.486
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von Istegelitz
Bei kleineren CSV mit Sicherheit die schnellere / einfachere Lösung, wird das CSV aber groß bis riesig, bekommt man u.U. Probleme mit dem Speicher.
...schon klar, aber bei den Datenmengen von denen Du redest unterhalten wir uns aber bitte nicht mehr über Textdateien, oder?!
__________________
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Albert Einstein
Arne Drews ist offline   Mit Zitat antworten
Alt 02.08.2011, 16:33  
Neuer Benutzer
 
Registriert seit: 02.08.2011
Beiträge: 2
PHP-Kenntnisse:
Anfänger
sdic befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank für die Tipps! Ich habe nun folgendes eingefügt und erhalte eine Fehlermeldung

Warning: fgets(): supplied argument is not a valid stream resource in bla/DE_PLZ6.php on line 34

Ist der Ansatz soweit überhaupt richtig?

PHP-Code:
<?php

ini_set
('auto_detect_line_endings'true);

$line_no 0;
$handle fopen ("DE/DE_PLZ6.csv","r");

while ( (
$data fgetcsv ($handle1000";")) !== FALSE )

{
     
    while (
is_string($line fgets($file))) {
    
    ++
$line_no
    if (
$line_no 15) { 
        continue; 
    } 
    elseif (
$line_no 23) { 
        break; 
    } 
    } 

if (
is_string($line)) {
     
echo 
"<div id=\"haendler\">";

echo 
"<div id=\"haendler_left\">";

echo 
"<h2>".$data[0]. "&nbsp;" .$data[1]."</h2>" ;
echo 
"<strong>" .$data[2]. "</strong> <br />" ;
echo 
" " .$data[3]. "<br />" ;
echo 
" " .$data[4]. "<br />" ;

echo 
"</div>";

echo 
"<div id=\"haendler_right\">";

echo 
"Tel. " .$data[5]. "<br />" ;
echo 
"<a href=\"mailto:".$data[6]."\">" .$data[6]. "</a> <br />" ;
echo 
"<a href=\"http://".$data[7]."\" target=\"_blank\">" .$data[7]. "</a><br />\r\n" ;

echo 
"</div>";

echo 
"</div>";


    }

else { 
  echo 
"<br />";
 
    }


}
fclose ($handle);
?>
sdic ist offline   Mit Zitat antworten
Alt 02.08.2011, 16:39  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Spielst du Code-Lego? $file hast du nirgendwo definiert und das zeilenweise auslesen macht bereits die äußere while-Schleife. Es gab keinen Grund eine weitere Schleife einzuführen.
fab ist offline   Mit Zitat antworten
Alt 02.08.2011, 17:12  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.486
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von fab
Spielst du Code-Lego?


@TE:
Da ich davon ausgehe, daß es sich nicht um ein überdimensionales File handelt, welches dann eh besser in einer DB aufgehoben ist, ganz einfach so:
PHP-Code:
$csv_arr file('DE/DE_PLZ6.csv');


foreach(
$csv_arr as $line) {
  
$cols explode(';'$line);
  
  echo 
'<div id="haendler">';
  
// ... usw. usw. usw.

Wenn Du z.B. nur die Zeilen 13-32 haben willst, einfach frech "schneiden":
PHP-Code:
$csv_file file('DE/DE_PLZ6.csv');
$csv_arr array_slice($csv_file1220); // 12 weil 0 erster Index !

foreach($csv_arr as $line) {
  
$cols explode(';'$line);
  
  echo 
'<div id="haendler">';
  
// ... usw. usw. usw.

__________________
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Albert Einstein
Arne Drews ist offline   Mit Zitat antworten
Alt 02.08.2011, 18:31  
Moderator
 
Registriert seit: 06.06.2008
Beiträge: 4.945
PHP-Kenntnisse:
Fortgeschritten
Wolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer AnblickWolla ist ein wunderbarer Anblick
Wolla eine Nachricht über ICQ schicken
Standard

Wenn die CSV-Datei die Felder in Doppelhochkommata eingepackt hat, dann musst du bei Benutzung von file() die Felder noch trimmen. Am letzten Feld hängt immer noch der Zeilenumbruch dran, was man durch den zweiten Parameter FILE_IGNORE_NEW_LINES verhindern sollte.
Eine fgetcsv-Schleife ist m.E. besser zu handhaben. Bei sehr umfangreichen Dateien ist file() eh ein Speicherkiller.
__________________
Warum denkt mein Hund eigentlich immer dann, wenn es an der Tür klingelt, es sei für ihn?
Wolla ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
.csv auslesen daleon PHP Einsteiger 4 10.12.2010 13:12
Umlaut Problem - PHP, .csv Rodney PHP Tipps 2010 4 05.11.2010 11:32
[Erledigt] Benutzerabfrage über .csv Datei Problem drproof PHP Tipps 2010 2 31.05.2010 10:53
datenbankdesign - server .csv abfragen, werte speichern taurus Datenbanken 42 09.05.2010 17:44
[Erledigt] SQL oder .csv Heimchen Datenbanken 1 31.03.2010 19:01
Zeilenausgabe in zwei spalten nos PHP Tipps 2009 5 07.12.2009 21:25
email von .csv datei löschen Rafal PHP Tipps 2009 3 28.02.2009 22:31
.csv Datei importieren problem? Ethem Datenbanken 1 03.01.2009 20:19
*.csv Import in Firebird 1.5 DB mit php PHP Tipps 2007 1 08.12.2005 16:18
einzelne Daten aufrufen von .csv PHP Tipps 2005-2 7 23.08.2005 08:28
MYSQL_DB Ausgabe in .csv mit Spreadsheet_Excel_Writer PHP Tipps 2005-2 2 22.07.2005 12:37
bestimmte Zelle in .csv Datei in einer Schleife übertragen PHP Tipps 2005-2 1 20.07.2005 15:14
MySQL -> .csv PHP Tipps 2005 2 27.05.2005 08:02
Vergleich in einer .csv Datei PHP Tipps 2005 18 22.01.2005 19:07
Liste aus .CSV mit PHP sortieren, bitte helft. PHP Tipps 2004 4 16.07.2004 14:33

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php auto_detect_line_endings, fgetcsv bestimmte zeile, php script csv to liste, fgetcsv mit feldnamen arbeiten, adresse.csv in php auslesen, php 5 csv auslesen, fgetcsv zeilen zählen, php explode csv umlaute, php line break einfuegen csv

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:59 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum