Zur Navigation

Textdatei filtern

1 uwe

Hallo,
ich habe eine Textdatei

Das php script list immer alles aus.

Da die Textdatei immer den gleich aufbau hat, möchte ich das das
Script immer nur alle Sätze ab dem aktuellen Datum einlist.
Wenn wir zum Beispiel den 13.08.2007.
Das Datum steht immer an der gleichen Postition.

<br> HW= 11.08.2007-Sa-12:10 Uhr-------NW= 11.08.2007-Sa-19:20 Uhr </br>
<br> HW= 12.08.2007-So-00:50 Uhr-------NW= 12.08.2007-So-07:40 Uhr </br>
<br> HW= 12.08.2007-So-13:00 Uhr-------NW= 12.08.2007-So-07:40 Uhr </br>
<br> HW= 12.08.2007-So-13:00 Uhr-------NW= 12.08.2007-So-20:10 Uhr </br>
<br> HW= 13.08.2007-Mo-01:50 Uhr-------NW= 13.08.2007-Mo-08:30 Uhr </br>
<br> HW= 13.08.2007-Mo-14:00 Uhr-------NW= 13.08.2007-Mo-21:00 Uhr </br>
<br> HW= 14.08.2007-Di-02:30 Uhr-------NW= 14.08.2007-Di-09:10 Uhr </br>
<br> HW= 14.08.2007-Di-14:40 Uhr-------NW= 14.08.2007-Di-09:10 Uhr </br>
<br> HW= 14.08.2007-Di-14:40 Uhr-------NW= 14.08.2007-Di-21:40 Uhr </br>
<br> HW= 15.08.2007-Mi-03:10 Uhr-------NW= 15.08.2007-Mi-09:50 Uhr </br>
<br> HW= 15.08.2007-Mi-15:20 Uhr-------NW= 15.08.2007-Mi-22:20 Uhr </br>
<br> HW= 16.08.2007-Do-03:50 Uhr-------NW= 16.08.2007-Do-10:30 Uhr </br>
<br> HW= 16.08.2007-Do-16:00 Uhr-------NW= 16.08.2007-Do-23:00 Uhr </br>
<br> HW= 16.08.2007-Do-16:00 Uhr-------NW= 16.08.2007-Do-23:00 Uhr </br>


Mit folgendem Script lese ich die ein:
<?php

include("header.inc");



$page = $_GET['page'];
if ($page == "") { $page = 1; }
$fwd = $page - 1;
$rwd = $page +1;


// Setting the default values for number of records per page -------------------------
$perpage = 20;
$filename = "test.php";

// Reading in all the records, putting each guestbook entry in one Array Element -----

$fd = fopen ("test.txt", "r");
while (!feof ($fd)) 
{
$buffer = fgets($fd, 4096);
$lines[] = $buffer;
}
fclose ($fd);

// Counting the total number of entries (lines) in the data text file ----------------

$result = count($lines);
$count = $result-1;

// Caclulate how many pages there are ----------------------------------------

if ($count == 0) { $totalpages = 0; }
else { $totalpages = intval(($count - 1) / $perpage) + 1; }

$end = ($page * $perpage) - 1;
$start = $end - ($perpage-1); if ($start <= 1) { $start = 0; }


if ($start < 0) { $start = 0; }

for ($i = $start; $i<=$end; $i++) 
{
	echo (stripslashes($lines[$i]));
}

echo "<center>";





 <br>";


// Creating the Forward and Backward links -------------------------------------

if ($fwd > 0 && $rwd > 0 && $rwd<$totalpages+1)
{
echo "<br><a href=\"$filename?page=$fwd\">zurück &lt&lt</a>&nbsp;&nbsp;";
echo "<a href=\"$filename?page=$rwd\">&gt&gt weiter</a><br>";
}
else if ($fwd == 0)
{ echo "<a href=\"$filename?page=$rwd\">&gt&gt weiter</a><br>"; }
else if ($rwd == 0)
{ echo "<br><a href=\"$filename?page=$fwd\">&lt&lt</a>"; }
else if ($rwd == $totalpages+1)
{ echo "<a href=\"$filename?page=$fwd\">&lt&lt</a><br>"; }


for ($i = 1; $i<=$totalpages; $i++)
{
echo " [<a href=\"$filename?page=$i\">$i</a>] ";
}
echo "</center>";

include("footer.inc");

?>


[Edit Jörg: Code in Code-Blöcke eingefügt]

11.08.2007 12:10 | geändert von Jörg: 11.08.2007 12:27

2 Jörg

Hallo Uwe,

einfacher wäre es wohl, die Daten als Unix-Timestamp in eine Datenbank zu speichern, dann könnte man diese sehr einfach beim Auslesen filtern

Ansonsten ist das Filtern etwas mühseliger, ungefähr auf folgende Weise könntest du vielleicht dabei vorgehen:

- die einzelnen Zeilen werden als Elemente von lines in einer Schleife ausgelesen. Innerhalb der Schleife geht man dann folgendermaßen vor:

- mit substr() werden die jeweiligen Datum-Strings extrahiert

- mit mktime() werden die Datumstrings in einen Unix-Timestamp umgewandelt

- der Unix-Timestamp wird mit time() verglichen - falls er größer ist, wird die entsprechende Zeile in einen neues Array newlines aufgenommen

- danach verfährst du mit dem Array newlines so, wie du im aktuellen Script mit lines verfahren bist

11.08.2007 12:36

Beitrag schreiben (als Gast)





[BBCode-Hilfe]