File auslesen (Standart-Filesystem)

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,
    mich laust momentan die Frage, wie es möglich ist, ein "beliebig" großes File komplett auszulesen.


    Ich verwende das Standart-Filesystem und habe mir daraus eine kleine Datenbank zusammengeschnipselt.
    Da man ja zum auslesen einen String benötigt, diese aber nur begrenzt groß sein können, bin ich der Meinung, dass dieses "System"
    doch relativ schnell an seine Grenzen stoßen könnte.


    Ein Beispiel zum Aufbau der Auflistung im Spieler-Verzeichnis:

    Code
    0 FACE
    1 breadfish
    2 littlewhitey
    ...


    Dieses File dient lediglich als Verknüpfung von ID zum Namen.
    Jedoch liegt die aktuelle maximale Stringlänge bei 2048 Chars (Global).


    Für einen standartmäßigen Spielernamen + ID + Leerzeichen kämen wir dann auf ~25 Zeichen (nicht jeder Spieler hat einen sooo langen Namen; die IDs gehen aber schnell in hohen Stellen)
    (mit 25 lässt es sich auch einfach sehr gut rechnen ^^ )


    Bei einem 500 Spieler-Server bedeutet das foglich eine benötigte Länge von: 12500 Zeichen. (Und das "nur" für die Spieler, die gerade online sind)


    Hätte jemand evtl. Lösungsvorschläge zum Umbau der "Datenbank" oder zur Umstrukturierung?
    Vorneweg: Ich habe nicht vor auf Dini, noch Mysql oder Ähnliches umsteigen.



    Gruß, FACE ;)



    Hinweis: Keinen Kontakt über TeamViewer oder Skype !
    Grüßt den Fehlerklärbär von mir.
    Coming soon: Pawn-Café ( Concept-Sharing | Scripting-First-Aid )

  • Kannst schon größere Arrays als 2048 anlegen. Würde dann aber auch auf packed-Strings umsteigen,dann sparst 75% .
    Gibts denn überhaupt einen guten Grund,den Spielernamen + ID in Variablen zu speichern ? Du könntest doch auch einfach immer neu die Datei durchgehen und dann nach dem jeweiligen User + die ID suchen.
    Mit DINI wird es auch nicht besser, sofern du die Daten unbedingt aktuell brauchst und somit ablegt in Variablen. Das gilt dann auch für eine SQL Variante.
    Hab also auch nicht wirklich verstanden,was es denn genau bezwecken soll. Sollen nur die aktuellen User aufgelistet werden die Online sind oder soll es eine Art Inhaltsverzeichnis werden,für alle Spielerprofile ?
    Es heisst übrigens auch standard ;).

  • Es geht zum Beispiel um das Auslesen von Statistiken und daraus folgende Vergleiche. (Zum Beispiel: Spieler mit den meißten...)
    Dazu kommt noch, dass mein System ein wenig anders aufgebaut ist..
    Ich Lege ein File (in einem extra PlayerFiles-Ordner) für jeden Account an, diese sind jedoch auf IDs bezogen und haben nichts mit dem Namen zutun.
    Dadurch entfallen Probleme beim Namechange und noch diverse andere.


    Die Tabelle, die den Spielernamen mit der FileID verknüpft, ist also zwingend notwendig, um auf das File zuzugreifen.


    Das Beispiel aus dem Sa-mp Wiki ist ja maximal begrenzt auf 64 Zeichen. Gut den String könnte an noch vergößern,
    jedoch ist das auch nur in Grenzen möglich.


    Hier mal den Code aus dem Wiki:

    new string[64]; // Create the string to store the read text in
    new File:example = fopen("Startup.txt", io_read); // Open the file
    while(fread(example, string)) //reads the file line-by-line
    {
    if(strcmp(string, "Ban", true) == 0) //if any of the lines in the file say "Ban" the system will ban the player
    {
    Ban(playerid); //bans the player
    }
    }
    fclose(example);


    Annahme: Der Spieler steht "dummerweise" ganz hinten in der Liste und vorher müssten über 10.000 Zeichen ausgelesen werden.


    Frage am Rande. Inwiefern "dämmen" packed Strings das Problem ein ?
    Eine nach oben hin unbegrenzte Methode wäre ja Ziel der Sache.
    ;)



    Hinweis: Keinen Kontakt über TeamViewer oder Skype !
    Grüßt den Fehlerklärbär von mir.
    Coming soon: Pawn-Café ( Concept-Sharing | Scripting-First-Aid )