bestimmte Zeile ausgeben PHP?

so dan bin ich wieder,
und mein latein ist in italien und redet japanisch mit einem spanisch sprechenden Engländer.
gg
kleiner scherz am rande :D

wie wie kann ich in PHP eine bestimmte Zeile auslesen lassen und Diese dann noch zerlegen
BsP.
Meine Datei:
Hier Stehen alle Änderungen beginnent ab Zeile 3 (php inepretiert 2)
TITEL(DATUM) | ÜBERSCHRIF | BESCHREIBUNG | LINKTITEL | LINK |
31.12.2010|Die neue Webseite wird Online gestellt|es gibt ein neues Design und alles ist in PHP :=)|

und die Php Datei:

<?php
$datei = file("data/info.inc.txt");
foreach($datei AS $ausgabe)
{
$wert = explode("|", $ausgabe);
}

$ausgabe ='<div class="box_info" title="am '.$wert[0].'">
<table border="0">
<tr>
<td style="width:500px;">
<b>'.$wert[1].':<br> <i style="color:#999;">-'.$wert[3].'-</i><br>
<a href="'.$wert[4].'">'.$wert[5].'</a><br>
</b>
</td>
<td>
<b ><i style="color:#999;">gepostet am: </i>'.$wert[0].'<br>
</b>
</td>
</tr>
</table>
</div>';

echo $ausgabe;
?>

das Problem ist ich möchte NUR zeile 2 ausgeben und zeile 1bzw 0 soll ignoriert werden. und später wenn mehr inhalt da ist soll nur zeile 2-5 ausgegeben werden und 5-xy auch ignoriert werden

nur wie schaff ich des??
PHP gibt mir immer alle Zeile aus.

hoffe jemand kann mir ein TipP geben

mfg

Bin Wech2011-01-03T16:56:07Z

Beste Antwort

<?php
$datei = file("ptext.wpd");
$ii = 0;
foreach($datei AS $ausgabe)
{
$ii++;
if (2 <= $ii and $ii <= 5 and $ausgabe != '')
{
$wert = explode("|", $ausgabe);
$ausgabe0 = '<div>'.$wert[0].'</div>';
$ausgabe1 = '<div>'.$wert[1].'</div>';
$ausgabe2 = '<div>'.$wert[2].'</div>';
echo $ii . $ausgabe0 . $ausgabe1 . $ausgabe2;
}
}
?>

So ist das Prinzip der Zerlegung der Zeilen 2 bis 5.
Du mußt dann natürlich im Loop das "echo" weglassen und die Variablen ausgabe0/1/2 mit $ii indizieren und in deinem <Table> - Konstrukt einsetzen.

Quasimodos Klon2011-01-03T20:31:52Z

Dein Problem ist klassisch - Auslesen einer CSV-Datei.
Dafür gibt's in PHP auch die Funktion fgetcsv().
http://de.php.net/manual/de/function.fgetcsv.php

Statt dem standardmäßigen Komma gibst Du als Delimiter "|" an. In dem Beispiel aus der Hilfe:
while ( ($data = fgetcsv ($handle, 1000, '|')) !== FALSE )

Um die erste Zeile, die beispielsweise Spaltenüberschriften enthält, zu ignorieren, liest Du einfach eine Zeile aus und ignorierst sie bzw. nimmst die Rückgabe nur als if-Bedingung für die Ausführung des nachfolgenden while-Konstrukts:

if(fgetcsv ($handle, 1000, '|') !== FALSE )
while ( ($data = fgetcsv ($handle, 1000, '|')) !== FALSE )
{ echo ...
}

fgetcsv hat auch den Vorteil, daß Du Strings in Enclosures einschließen kannst, z.B.:
`TITEL(DATUM)` | `ÜBERSCHRIFT` | `BESCHREIBUNG` | `LINKTITEL` | `LINK`
`31.12.2010` | `Webseite geht online` | `über Smilies mit Pipes ("|") :o|` | `http:...`

Auslesen mit:
if( ($handle = fopen( "pfad/dateiname.csv", "r" )) !== FALSE )
if( fgetcsv($handle, 1000, '|', '`') !== FALSE )
while ( ($data = fgetcsv ($handle, 1000, '|', '`')) !== FALSE )
{ echo ...
}
____

Oder Überschriften in <th> ausgeben und Daten in <td>

if( ($handle = fopen( "pfad/dateiname.csv", "r" )) !== FALSE )
{ if( ($data = fgetcsv($handle, 1000, '|', '`')) !== FALSE )
{ echo '<table>' . PHP_EOL . '<tr>';
foreach($data as &$col)
echo "<th>$col</th>";
echo '</tr>' . PHP_EOL;
while ( ($data = fgetcsv ($handle, 1000, '|', '`')) !== FALSE )
{ echo '<tr>';
foreach($data as &$col)
echo "<td>$col</td>";
echo '</tr>' . PHP_EOL;
}
echo '</table>' . PHP_EOL;
}
else
echo '<p>Datei enthält keine Informationen</p>' . PHP_EOL;
}
else
echo '<p>Fehler beim Öffnen der Datei.</p>' . PHP_EOL;
___

Hier nochmal als formatierter Quelltext:
http://pastebin.com/8zy3a2DY
und mit Ausgabe einer Zeilennummer:
http://pastebin.com/9FypZVus
__

"und 5-xy auch ignoriert werden" - ok, dann die while-Zeile so:

$count = 3; /* Anzahl DATENzeilen (unabhängig von Überschriften) */
while ( $count-- && (($data = fgetcsv ($handle, 1000, '|', '`')) !== FALSE) )

(Gibt Zeilen 2, 3, 4 aus, bei Zählung Überschriften = 1)
__

PS:
Bei mehrzeiligen Ausgaben mit Variablen und Anführungszeichen probiere mal die HereDoc-Notation aus:
echo <<< _ENDE_DES_STRINGS_
<table style="border: 1px solid red;">
<tr style="color: green;"> <td>$zelle[0]</td> <td>zelle[1]</td> </tr>
</table>
_ENDE_DES_STRINGS_;