[Datei auslesen] Zeile für Zeile auslesen und Wert vergleichen

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hey Community,


    1. ich speichere ein Wert, hier "Hallo", in einer Datei ab.
    2. ich frage ab, ob ein Eintrag namens "Hallo" schon in der Datei vorhanden ist:


    public CheckLine(playerid, filename[], inputtext[])
    {
    if(IsPlayerConnected(playerid))
    {
    new Data[256];
    new File: hFile = fopen(filename, io_read);
    if( hFile )
    {
    while( fread( hFile, Data, sizeof(Data)))
    {
    StripNewLine( Data );
    if(strfind(Data, inputtext, true) == 0)
    {
    LineThere[playerid] = 1;
    }
    else
    {
    LineThere[playerid] = 0;
    }
    }
    fclose( hFile );
    }
    }
    return 1;
    }


    Wenn der Eintrag vorhanden ist, wird LineThere[playerid] auf 1 gesetzt. Wenn nicht, dann auf 0.


    Das Problem ist aber jetzt, dass ich 10 Einträge habe, die in der Datei so aussehen:
    Hallo
    Hallo1
    Hallo2
    Hallo
    Hallo1
    Hallo2
    Hallo
    Hallo1
    Hallo2
    Hallo


    Mein Problem ist jetzt, das NUR die letzte Zeile ausgelesen und verglichen wird.


    Das heißt, wenn ich abfragen will ob "inputtext" dem Wort in der Datei "Hallo" entspricht und in der Datei als LETZTE Zeile "Hallo" steht, klappt es und mir wird gesagt, dass der Eintrag vorhanden ist.


    ABER, wenn ich jetzt "Hallo1" in die Datei ergänze und dann abfrage, ob der Eintrag "Hallo" bereits in der Datei vorhanden ist, wird mir geschrieben, dass sich so ein Eintrag in der Datei NICHT befindet, obwohl er über dem Eintrag "Hallo1" als vorletzte Zeile steht.


    Meine Frage nun, was mache ich falsch ? Ich habs nach dem wiki Code gescriptet, jedoch klappt es nicht.

  • Für alle, die genauso ein Problem mal haben. So hab ich es gelöst:


    public CheckLine(playerid, filename[], inputtext[])
    {
    if(IsPlayerConnected(playerid))
    {
    new Data[256];
    new File: hFile = fopen(filename, io_read);
    if( hFile )
    {
    while( fread( hFile, Data, sizeof(Data)))
    {
    if(strcmp(Data, inputtext, true) == 0) // die suche hab ich hier auf genauigkeit spezifiziert
    {
    LineThere[playerid] = 1;
    return 1; //<--- das return hatte ich vergessen
    }
    else
    {
    LineThere[playerid] = 0;
    }
    }
    fclose( hFile );
    }
    }
    return 1;
    }