fread liest nur die ersten 100 Zeilen??

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
  • Ja,
    also ich habe gerade meinen MapLoader weiter gescriptet.
    Natürlich benutzt diese Funktion fread um die Map Datei zu lesen,
    doch ist mir vorhin aufgefallen, dass diese Funktion nur die ersten 100 Zeilen liest :(


    Meine lade Funktion:

    public LoadMap (file[]) {

    new s = GetFreeMapSlot ();

    if (s == -1) { //OMG, maximale Map anzahl erreicht
    return -1;
    }

    new filename[256];
    new buf[256];
    format (filename, 256, "Maps/%s.txt", file);
    printf ("Lade Map '%s' ...", file);

    new File:h = fopen (filename, io_read); // Map öffnen

    if (h == 0) { // Gibtn Warning... vll. würde auch if (!h) gehen
    return -1; // Datei nicht gefunden
    }

    new Float:X, Float:Y, Float:Z;
    new Float:rX, Float:rY, Float:rZ;
    new ModelID/*, waste*/, f1, f2;
    new i = 0;
    new idx, tmp[64], id;

    i = 0;

    // Ich benutze hier StrTok, da sscanf komischerweise bei sehr vielen Objekten müll liest?? Naja, mit Strtok funzt es ;)
    #define USE_STRTOK

    while (fread (h, buf)) { // Zeile lesen
    idx = 0;
    if (buf[0] == '1') { // Objekt
    Karten[s][Typ][i] = 1;
    /* bla */
    } else if (buf[0] == '2') { // Pickup
    Karten[i][Typ] = 2;
    } else if (buf[0] == '3') { // Auto
    Karten[i][Typ] = 3;
    /* bla */
    Karten[s][ID][i] = CreateAuto (ModelID, X, Y, Z, rZ, f1, f2, 999999);
    } else if (buf[0] == '4') { // Spawnpunkt
    Karten[i][Typ] = 4;
    /* bla */
    printf ("SpawnPunkt: %s Desc: %s", Spawns[id][Name], Spawns[id][Beschreibung]);
    }
    printf ("%i %c", i, buf[0]); // i = Zeilenanzahl. geht komischerweise von 0-99, obwohl die Datei mehr Zeilen hat

    i++;

    }

    fclose (h);

    return s; // Map Slot zurückgeben

    }


    Sieht jemand nen Fehler?
    Würde mich über jede Hilfe freuen :D


    MfG xMine

    90% der Breadfish Mitglieder sind kiddys, wenn du mir auch zustimmst dann kopiere diesen Text in deine Signatur!

  • Na ja mal abgesehen von dem ganzen Code, der irgendwie eine komische Art hat Sachen auszulesen, solltest du zuerst mal schauen wie groß dein Array "Karten" definiert ist. ist das vielleicht nur auf 100?
    if (h == 0) { // Gibtn Warning... vll. würde auch if (!h) gehen
    Dann versuch doch mal "!h" oder "h == false", wahrscheinlich wird ein boolean zurückgeliefert, ich kann es dir nicht sagen, da ich nicht wirklich mit Dateien arbeite


    // Ich benutze hier StrTok, da sscanf komischerweise bei sehr vielen Objekten müll liest?? Naja, mit Strtok funzt es ;)
    Na ja ich sehe nciht, dass du mit strtok arbeitest, ich sehe auch nciht, dass du irgendwo irgendwelche Werte ausliest von der Datei, sscanf hat allerdings wirklich Probleme mit Floats, allerdings gibt es da einen Fix
    http://forum.sa-mp.com/index.p…09431.msg678481#msg678481

  • Boah nö, hast recht, ich habe Den Map Enum zu klein dimensioniert... omfg *peinlich* ^^


    Achja, er liest dort, wo es steht
    while (fread (h, buf)) { // Zeile lesen


    Und dass du nichts von strtok siehst liegt daran, dass ich diese Zeilen als nicht Problem relevant ansah und so einfach mit
    /* bla */
    Überschrieb ;)


    Aber ich danke dir für den Tipp mit dem sscanf fix, werd ich mir mal anschaun :)


    MfG xMine

    90% der Breadfish Mitglieder sind kiddys, wenn du mir auch zustimmst dann kopiere diesen Text in deine Signatur!

  • Zitat

    Achja, er liest dort, wo es steht


    Zitat

    Und dass du nichts von strtok siehst liegt daran, dass ich diese Zeilen als nicht Problem relevant ansah und so einfach mit


    Das mit dem Lesen habe ich gesehen, aber mich hats gewundet, wo die Werte ausgelsen werden aus der Zeile, hat sich ja erledigt