wieder eine Textsache....

Feldhofe

Erfahrenes Mitglied
Hallo!

Ich habe ein Problemchen, und zwar weiß ich nicht, wie ich es anstellen soll, eine Textdatei teilweise zu ändern.

Die Daten stehen in diesem Format in der Datei:
$absender|$empfaenger|$message|$zeit

Die Datei sieht also so aus:
Feldhofe|Feldhofe|xxx|2002-05-28 17:33:22
Feldhofe|Hiker|Hallo|2002-05-28 17:35:34
Feldhofe|Hiker|Huhu|2002-05-28 17:35:45
Feldhofe|Hiker|Hallo!|2002-05-28 17:36:38
Feldhofe|Hiker|Hey|2002-05-28 17:40:00

Jetzt will ich in allen Zeilen, wo der zweite Wert "Hiker" ist hinter dem letzten Wert noch "|gelesen" anhängen.

Geht das??


Gruß Feldhofe
 
-

PHP:
<?PHP
$datei = file("datei.txt");
$open = fopen("datei.txt", "w+");
for($i=0;$i = sizeof($datei); $i++)
{
    if( preg_match("/|Hiker|/i", $datei[$i] )
    {
        $datei[$i] .= "|gelesen";
        fputs( $open, $datei[$i]);
    }
    else
    fputs( $open, $datei[$i];
}
fclose($open);
?>
 
Zuletzt bearbeitet:
Neee...das funktioniert so leider nicht!
Er schreibt die ganze Datei bis zum Überlaufen mit "|gelesen" voll.

Hast du vielleicht noch einen anderen Tipp?

Was ich brauche, ist ja eigentlich nur folgendes:
- eine Zeile ansprechen, wo der Name vorkommt (ähnlich dem select where name=$name in mySQL)

- diese Zeile verändern, bzw. um eine Angabe ergänzen.

Gruß Feldhofe
 
hm eine zeile ansprechen, in der ein bestimmter name vorkommt ist keine so gute idee oder? dann wird das ja bei jeder zeile gemacht, in der der name vorkommt. ich würde einfach ganz vorne an die zeile noch ne laufende nummer (id) kleben und dann halt danach vorgehen ... nur ne idee :D am einfachsten wäre es mit arrays und dann halt per implode() und explode() ... naja ;D
 
Nene...so mit ID geht das nicht!

Ich will nämlich folgedens realisieren:

In meinem Chat sollen Private Nachrichten verschickt werden können...die werden in eine Datei "chat_msgs.txt" geschrieben, im Format

$absender|$empfaenger|$nachricht

Jedes mal, wenn das Chatscript reloadet wird, soll die Datei durchsucht werden, die Zeilen, wo $empfaenger gleich dem Chatternamen ist, wird die Nachricht ausgegeben. (soweit hab ichs schon hinbekommen)

Aber dass die Nachricht das nächste Mal nicht wieder ausgegeben wird, brauch ich ne Möglichkeit, diese eine Zeile zu verändern!

Ich hoffe, das Problem ist einigermaßen klar?

Feldhofe
 
PHP:
<?PHP
$datei = file("datei.txt");
$open = fopen("datei.txt", "w+");
$name = 'Hiker';

for($i=0;$i = sizeof($datei); $i++)
{
    if (strpos($datei[$i], $name) !== false)
     $datei[$i] = trim($datei[$i]) . "|gelesen\n";

    fputs($open, $datei[$i]);
}
fclose($open);
?>

man beachte das !== hinter dem strpos(). es ist unbedingt notwendig einen typvergleich zu machen, da ansonsten auch false interpretiert würde, wenn strpos() 0 zurückgibt.
ich hab jetzt nicht getestet, obs klappt - aber ich hoffe einfach mal :D
 
Neee...das klappt irgendwie auch nicht!
Die for SChleife nimmt kein Ende, er läuft ins Leere, hunderte von Malen!
Bist du sicher, das das ende sizeof($datei) sein muss?
 
ah lol da war ein fehler in der for-syntax von meinem vorgänger (hab ich ja einfach übernommen^^) und außerdem hast du recht - es muss sizeof() - 1 sein bzw. $i < sizeof(). also nochmal:
PHP:
<?PHP
$datei = file("datei.txt");
$open = fopen("datei.txt", "w+");
$name = 'Hiker';

for($i=0;$i < sizeof($datei); $i++)
{
    if (strpos($datei[$i], $name) !== false)
     $datei[$i] = trim($datei[$i]) . "|gelesen\n";

    fputs($open, $datei[$i]);
}
fclose($open);
?>

versuch nun nochmal! :)
 
Hey, danke....das funktioniert!!!!

Gruß Feldhofe


(du bist natürlich auch ganz herzlich als Ehrengast in meinem Chat eingeladen :D)
 
Zurück