PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   Inhalt einer Datei ab einem Fixpunkt einlesen (http://www.selfphp.de/forum/showthread.php?t=10042)

rkersting 21.03.2005 08:05:59

Inhalt einer Datei ab einem Fixpunkt einlesen
 
Hallo,
ich habe ein Problem.
Ich möchte aus unterschiedlichen Textdateien, die von Usern per Dateiupload in ein Verzeichnis gelegt werden, einen Ausschnitt des Inhalts per PHP in einer Datei ausgeben.

Die txt-Dateien haben grundsätzlich unterschiedlichste Strukturen, so dass ein einlesen erst ab der 5 bis 10. Zeile Sinn macht. Dann soll eine Ausschnitt herausgezogen werden, z.B. 20 Zeilen.

Die Probleme sind:
1) die Datei hat unter Umständen gar keine 5 Zeilen - wie vermeide ich dann für die Startsequnz eine Fehlermeldung und springe zur nächsten Datei?

2) Wenn die Datei 5 Zeilen Einführung hat, aber der Inhalt keine 20 Zeilen lang ist, wie vermeide ich dann die Fehlermeldung und lese einfach weniger Zeilen, oder, wenn unlösbar, wie springe ich dann zur nächsten Datei?

Sie Basis ist denke ich mit bekannten Lösungen, wei Zufallszitaten, denkbar, da die ausgewählte datei auch immer zufällig ausgewählt werden soll, also keine Reihenfolge bestehen soll.

<?php
srand ((double) microtime() * 1000000);
$zitate = file("daten/quote.dat");
$i = count($zitate)-1;
print $zitate[rand(0,$i)];
?>

Nur wird hier natürlich nur aus einer datei etwas zufällig eingelesen und es spielt keine Rolle, wie lang es ist ...

Kann mir jemand einen Tipp geben? Bitte ...

Vielen Dank!

xabbuh 21.03.2005 08:20:31

AW: Inhalt einer Datei ab einem Fixpunkt einlesen
 
Zitat:

Zitat von rkersting
Die Probleme sind:
1) die Datei hat unter Umständen gar keine 5 Zeilen - wie vermeide ich dann für die Startsequnz eine Fehlermeldung und springe zur nächsten Datei?

Du kannst die Datei mit der Funktion [func]file()[/func] zeilwenweise in ein Array lesen, so dass du anschließend mit [func]count()[/func]/[func]sizeof()[/func] die Anzahl der Zeilen ermitteln kannst.

Zitat:

Zitat von rkersting
2) Wenn die Datei 5 Zeilen Einführung hat, aber der Inhalt keine 20 Zeilen lang ist, wie vermeide ich dann die Fehlermeldung und lese einfach weniger Zeilen, oder, wenn unlösbar, wie springe ich dann zur nächsten Datei?

Da du die Datei vorher mit [func]file()[/func] in ein Array gepackt hast, kannst du jetzt mit [func]array_slice()[/func] einen bestimmten Teil aus diesem Array extrahieren.

Ein Beispiel:
PHP-Code:

<?php
    $content 
file('file.txt');
    if(
count($content) >= 5) {
        
$extract array_slice($content25);
    }
?>

In dem Array $extract stehen jetzt die Zeilen 3 - 7 der Datei file.txt. Wenn die Datei nur 5 Zeilen hätte, würden dementsprechend nur die Zeilen 3 - 5 in $extract vorhanden sein.

rkersting 21.03.2005 09:45:02

AW: Inhalt einer Datei ab einem Fixpunkt einlesen
 
Hallo,
vielen Dank für die schnelle Hilfe ...

aber ich habe es mal so umgesetzt:

<?php
$content = file('data.txt');
if(count($content) >= 5) {
$extract = array_slice($content, 2, 5);
}
echo $extract;
?>

und bekomme als Ausgabe nur: Array

wo liegt das Problem?

Wobei data.txt eine normale txt-Datei mit z.B. einem Tagebucheintrag von ca. einer DIN A4 Seite ist, mit Leerzeilen, Zeilenumbrüchen, Soderzeichen wie z.B. "" etc., also eben eine ganz normale Textdatei.

|Coding 21.03.2005 10:02:29

AW: Inhalt einer Datei ab einem Fixpunkt einlesen
 
array_slice liefert als rückgabe wert ein array, keine variable.

du musst also noch ein implode() einbauen, das dir die array elemente zu einem string zusammen setzt. so etwa:

PHP-Code:

<?php
$content 
file('data.txt');

if(
count($content) >= 5){
    
$extract array_slice($content25);
}

$inhalt implode(''$extract);

echo 
$inhalte;
?>


xabbuh 21.03.2005 10:13:38

AW: Inhalt einer Datei ab einem Fixpunkt einlesen
 
Der Rückgabewert von [func]array_slice()[/func] ist ein Array. Wenn du dir dieses anzeigen lassen willst, musst du entweder die Funktionen [func]print_r()[/func] oder [func]var_dump()[/func] benutzen.

rkersting 21.03.2005 10:33:23

AW: Inhalt einer Datei ab einem Fixpunkt einlesen
 
Jaaa - so sieht das gut aus ;-)

Vielen Dank!

|Coding 21.03.2005 10:35:30

AW: Inhalt einer Datei ab einem Fixpunkt einlesen
 
welche variante hascht du denn jetzt genommen?

rkersting 21.03.2005 11:23:19

AW: Inhalt einer Datei ab einem Fixpunkt einlesen
 
da ich lieber mit echo als mit print arbeite (die Grundsätzlichen Vor- und nachteile sind mir allerdings nicht bekannt, bzw. haben sich mir noch nicht erschlossen ...) habe ich folgendes gebaut:

<?php
$content = file('data.txt');
if(count($content) >= 30) {
$extract = array_slice($content, 10, 20);
}
$inhalt = implode('', $extract);

echo "<p> <b>Auszug aus dem Beitrag:</b> ... ".$inhalt." ... <b>Ende des Auszugs</b></p>";
?>

.. das klappt ganz prima ...

allerdings, jetzt wo ich dabei bin ... es gibt ja noch ein Problem:

- in dem Verzeichnis liegen jede Menge Dateien mit unterschiedlichsten Namen, aber alle .txt.

Nun soll ja bei jedem Aufruf eine zufällig ausgewählte Datei auszugsweise angezeigt werden.

Ich dachte hier etwas aus dem Zufallszitate herauszubasteln, aber gibt es eine elegante Lösung dafür (ohne die von mir regelmässig erzeugten unmengen Code für Variablen etc. ...

Das wäre noch mal super, wenn mir einer da auch noch helfen würde.

Vielen Dank.

xabbuh 21.03.2005 12:10:18

AW: Inhalt einer Datei ab einem Fixpunkt einlesen
 
Lies das Verzeichnis, in dem die Dateien liegen, in ein Array ein und wähle per Zufall eines der Elemente aus dem Array aus.

|Coding 21.03.2005 12:24:29

AW: Inhalt einer Datei ab einem Fixpunkt einlesen
 
nun ja, print ist gegenüber echo eine richtige funktion. print kann immer verwendet werden, echo aber nicht z.b. dann, wenn ein rückgabewert erwartet wird, wie beim trinären bindungsoperator:

PHP-Code:

<?php
$a 
1;
$b '1';
$a === $b ? print '$a und $b sind identisch.' : print '$a und $b sind ungleich.';
?>

ausgabe: $a und $b sind ungleich.
(anderer datentype: $a integer, $b string)

PHP-Code:

<?php
$a 
1;
$b '1';
$a === $b ? echo '$a und $b sind identisch.' : echo '$a und $b sind ungleich.';
?>

hier kriegst du nen parse error: "parse error: parse error, unexpected T_ECHO..."
der grund: echo ist ein sprachkonstrukt und liefert keine rückgabe.

abgesehen davon, dass print eine funktion und echo ein sprachkonstrukt ist und das print einen rückgabewert liefert, gibt es keine weiteren unterschiede. da die ausgabe eh immer der schnellste teile eines scripts ist, ist es am ende dein bier, ob du echo oder print nutzt.


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:47:29 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.