Wie löscht man eine Zeile in einer Datei

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
  • Guten Abend,


    ich habe folgendes Problem: Ich möchte ein /foff Befehl scripten. Dazu habe ich für jedes Team eine eigene .txt Datei angelegt. Wenn der Spieler invited wird dann sieht das so aus: Michael_JohnsonDominic_Vancini
    Nun weiß ich nicht, wie eine Zeile gelöscht wird, falls zum Beispiel Dominic_Vancini uninvited wird. Ist ein bisschen dumm, wenn dann Spieler angezeigt werden, die gefeuert wurden!


    Ich habe es versucht mit diesem Code, aber nichts hat geklappt. Was ich eigentlich brauch ist eine Funktion, die die Datei nach dem Spielernamen scannt und diesen dann löscht.
    new File:hFile;
    hFile = fopen(str, io_append);

    format(Cube,sizeof(Cube),"\n\r");
    while(fread(hFile, string))
    {
    // if(!strcmp(string, PlayerName(iPlayer), false)){
    if(strcmp(string, PlayerName(iPlayer), false, strlen(PlayerName(iPlayer))) == 0){
    fdeleteline(str, string);
    fwrite(str, Cube);


    }
    }
    fclose(hFile);//end*/
    Liebe Grüße,


    Lionel


    PS: Vielen Dank für eure Hilfe schonmal im voraus

  • Warum speicherst du die Namen nicht getrennt von einem Zeilenumbruch?


    Dann ließt du einfach einen Namen bis zum Zeichen "\n" ein und löscht diesen dann gegebenenfalls.
    Jedenfalls wenn ich das so richtig verstanden habe, da nicht ganz klar ist was du machen willst.

    Zitat

    Allwissend bin ich nicht, doch viel ist mir bewusst.


    Johann Wolfgang von Goethe

  • Vielen Dank erst einmal für deine Antwort, aber was ist daran nicht Deutsch? xD Ich hab mich vlt. ein bisschen ungeschickt ausgedrückt, da gebe ich dir recht.


    Also, jedes Team hat seine eigene .txt Datei. Wenn ein Spieler eingeladen wird, dann wird der in die Text Datei hinzugefügt. Dies wird dann so gespeichert: Name|Name1|Name2|Name3|Name4|Name5
    Wenn jetzt aber jemand aus dem Team rausgeworfen wird, dann muss natürlich der Name des Spielers auch aus der Team.txt Datei verschwinden. Dazu brauche ich eine Funktion, die nach den Namen des Spielers sucht und diesen dann löscht.


    Ich hoffe du verstehst jetzt was ich meine :D


    EDIT: "Warum speicherst du die Namen nicht getrennt von einem Zeilenumbruch?


    Dann ließt du einfach einen Namen bis zum Zeichen "\n" ein und löscht diesen dann gegebenenfalls.
    Jedenfalls wenn ich das so richtig verstanden habe, da nicht ganz klar ist was du machen willst. "


    Wenn ich die in jeweils einer neuen Zeile speichern lasse, dann habe ich viel zu viele Leerzeilen in dem Befehl /foff.


    COMMAND:foff(playerid)
    {
    new string[MAX_STRING];
    format(iStr, sizeof(iStr), "[FACTION] OFFLINE %s members:", PlayerInfo[playerid][PTeamName]);
    SendClientMessage(playerid, COLOR_HELPEROOC, iStr);
    format(string,sizeof(string), "fLogs/%s.fam.log",PlayerInfo[playerid][PTeamName]);
    new File:hFile = fopen(string, io_read);
    while(fread(hFile,string)) SendClientMSG(playerid, COLOR_LIGHTGREY, string); //hier wird die Datei so abgelesen Name1Name2Name3NameName5Name6
    fclose(hFile);


    return 1;
    }