fread neue zeile erkennen.

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
  • Hallöschen,


    ich übe gerade etwas mit dem file include umzugehn :D
    jetzt habe ich eine Frage


    Ich Speicher meine Fraktionskasse so:


    public SaveFKasse()
    {
    new File:File = fopen("FKassen.ini",io_append);
    if(!File) { return print("FKasse.ini konnte nicht gefunden werden!"); }
    new text[24];
    for(new id; id < sizeof(FKasse); id++)
    {
    format(text,sizeof(text),"%d\n",FKasse[id]);
    printf(text);
    fwrite(File,text);
    }
    fclose(File);
    return 1;
    }
    D.h. Jede Zeile = 1 Fraktionskasse
    Zeile 1 = Kasse 1
    Zeile 2 = Kasse 2
    etc.... Das funktioniert auch,


    wie kann ich die FKasse jetzt am besten laden? damit er erkennt, das es bei einer Zeile neu anfängt.
    habe es derzeit so:


    public LoadFKasse()
    {
    new File:File = fopen("FKassen.ini",io_read);
    if(!File) return print("FKasse.ini konnte nicht gefunden werden!");
    new Wert;
    for(new id; id < sizeof(FKasse); id++)
    {
    fread(File,Wert);
    FKasse[id] = Wert;
    }
    fclose(File);
    return 1;
    }

  • http://wiki.sa-mp.com/wiki/Fread


    Schau den Teil an: Reading Line-by-Line


    nebenbei: wenn der server die FKassen das zweite mal speichert, dann sind alle Kassen 2 Mal eingetragen da du die Datei mit io_append (anhängen) öffnest:
    new File:File = fopen("FKassen.ini",io_append);


    wenn du io_write verwendest wird die Datei erst geleert und dann mit den neuen FKassen beschrieben:
    new File:File = fopen("FKassen.ini",io_write);

  • Okay, aber woher weis der Compiler das dann ein neuer Wert anfängt,
    und er nach jedem mal \n es in ein neuen Wert schreiben soll.


    new FKasse[5];
    new string[64];
    new File:file = fopen("FKassen.ini", io_read);
    while(fread(file, string)) /
    {
    if(strcmp(string, "\n", true) == 0)
    {


    }
    }


    Also praktisch das er
    Zeile 2 auf die FKasse[2] setzt.
    Zeile 3 auf die FKasse[3] setzt.


  • das while(fread(...)) geht alleine durch alle Zeilen durch ;)
    lediglich noch eine IF-Abfrage um sicher zu sein das die Zeile nicht leer ist und schon bist du fertig


    new string[64];
    new File:file = fopen("FKassen.ini", io_read);
    new id=0;
    while(fread(file, string))
    {
    if(string[0] != 0 && string[0] != '\n') // zeile nicht leer ?
    {
    FKasse[id] = strval(string);
    id++;
    }
    }