filemanager Command geht net. Hab ne fehlermeldung eingebaut damit ich weiß wo es net geht

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,
    ich hab es nun so:
    dcmd_benutzerdurchsuchen(playerid,params[])
    {
    new Suchbegriff[MAX_PLAYER_NAME], dir:Benutzer= dir_open("scriptfiles/Webseiten/"), type, item[40], string[64];


    if(sscanf(params,"s", Suchbegriff)) { return
    SendClientMessage(playerid,COLOR_RED,"Benutze: /benutzerdurchsuchen
    [Suchbegriff (bitte nur ein Wort!)]"); }
    while(dir_list(Benutzer, item, type))
    {
    if(type == FM_FILE)
    {
    new file[1024];
    file_read(file, item);
    if(strfind(file, Suchbegriff, true) != -1)
    {
    format(string, sizeof(string), "%s enthält das Wort oder die Zahl %s", item, Suchbegriff);
    SendClientMessage(playerid, COLOR_GREEN, string);
    }
    }
    else { SendClientMessage(playerid, COLOR_RED, "Es ist ein Fehler aufgetreten (Error F4826)"); }
    }
    return SendClientMessage(playerid, COLOR_RED, "Es wurde leider nichts gefunden!");
    }
    und
    wenn cih nun /benutzerdurchsuchen hallo eingeb kommt die fehlermeldung
    "Es ist ein Fehler aufgetreten (Error F4826)" (die hab ich selber
    erstellt damit ich weiß, wenn der command net funkt woran es liegt
    was ist falsch

    21 Mal editiert, zuletzt von Tom Sunder ()

  • Ich bin mir unsicher, ob ich die Fragestellung wirklich korrekt verstanden habe, daher ein paar Fragen dazu:

    • Von was für Profilen redest du?
    • Was sind das für Dateien?
    • Wo liegen diese Dateien im Vergleich zu deinem Quellcode?
    • Bis zu welcher Tiefe sollte dieser Mechanismus funktionieren - bis alle Spieler aufgelistet sind?
  • Diese Frage wurde hier schon tausend Mal beantwortet...
    http://forum.sa-mp.com/showthread.php?t=92246


    Ich finde dort nix wie man alle Datein damit durchsuchen kann. Kannste mir sagen was ich da eingeben muss damit das durchsucht wird?


    Ich bin mir unsicher, ob ich die Fragestellung wirklich korrekt verstanden habe, daher ein paar Fragen dazu:

    • Von was für Profilen redest du?
    • Was sind das für Dateien?
    • Wo liegen diese Dateien im Vergleich zu deinem Quellcode?
    • Bis zu welcher Tiefe sollte dieser Mechanismus funktionieren - bis alle Spieler aufgelistet sind?


    Ich meine Benutzer/Accounts es sind .ini datein

  • Da mir dein Vorhaben nicht ganz schlüssig ist, da es sehr schlecht beschrieben ist, kann ich nur auf Fread() und strfind() verweisen. Mit Fread() kannst du die Dateien Zeile für Zeile auslesen und mit strfind() die Zweien herausfiltern. Wenn die Zweien an einem ganz bestimmten Ort in den Dateien sich befinden, dann solltest du Plugins/Includes herbeiziehen, welche .ini-Dateien handhaben. Falls die Dateien nicht im "scriptfiles" Ordner liegen, dann musst du die Dateien zuvor mit dem von Mr.Reese genannten Plugin öffnen und auslesen.


    Achtung: Mit vielen Dateien kann dies sehr unperformant sein (Lag könnte eine der Folgen sein). Aus diesen Gründen verwendet man Datenbanken.


  • Ich finde dort nix wie man alle Datein damit durchsuchen kann. Kannste mir sagen was ich da eingeben muss damit das durchsucht wird?



    Ich meine Benutzer/Accounts es sind .ini datein


    Wofür gibt es unten denn eine Beschreibung der Funktionen? Damit sie nicht gelesen wird?
    native dir:dir_open(directory[]);


    Das in Verbindung mit
    native dir_list(dir:handle, storage[], &type, length = sizeof(storage));
    und
    native file_read(file[],storage[], sizeof(storage));

  • Da mir dein Vorhaben nicht ganz schlüssig ist, da es sehr schlecht beschrieben ist, kann ich nur auf Fread() und strfind() verweisen. Mit Fread() kannst du die Dateien Zeile für Zeile auslesen und mit strfind() die Zweien herausfiltern. Wenn die Zweien an einem ganz bestimmten Ort in den Dateien sich befinden, dann solltest du Plugins/Includes herbeiziehen, welche .ini-Dateien handhaben. Falls die Dateien nicht im "scriptfiles" Ordner liegen, dann musst du die Dateien zuvor mit dem von Mr.Reese genannten Plugin öffnen und auslesen.


    Achtung: Mit vielen Dateien kann dies sehr unperformant sein (Lag könnte eine der Folgen sein). Aus diesen Gründen verwendet man Datenbanken.


    Ich will machen, dass wenn man online irgendeinen Befehl und ne Zahl oder ein Wort (z.B. /random 2) dann soll geschaut werden in welcher Datei bei den Accounts die Zahl oder das Wort am öffterstens vorkommt. Dann soll der bei dem es am öfftersten vorkommt geld bekommen und bei dem dem es am zweit öfftersten vorkommt soll ein bisschen weniger geld bekommen dann das mit dem dritt öfftersten auch usw..
    Verstehst du es nun?


    @Mr.Reese
    ich versteh das net wie man mit den 3 Sachen zusammen das machen kann was ich machen will


  • Ich will machen, dass wenn man online irgendeinen Befehl und ne Zahl oder ein Wort (z.B. /random 2) dann soll geschaut werden in welcher Datei bei den Accounts die Zahl oder das Wort am öffterstens vorkommt. Dann soll der bei dem es am öfftersten vorkommt geld bekommen und bei dem dem es am zweit öfftersten vorkommt soll ein bisschen weniger geld bekommen dann das mit dem dritt öfftersten auch usw..
    Verstehst du es nun?


    Dann solltest du mit den von mir genannten Fread() und strfind() wunderbar zurecht kommen. Das Ganze ist aber total unperformant und keineswegs zu empfehlen. Steige lieber auf ein ordentliches DBMS um und sende einen organisierten Query ab, um dein Ziel zu erreichen.

  • Beitrag von Tom Sunder ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.

  • Dann solltest du mit den von mir genannten Fread() und strfind() wunderbar zurecht kommen. Das Ganze ist aber total unperformant und keineswegs zu empfehlen. Steige lieber auf ein ordentliches DBMS um und sende einen organisierten Query ab, um dein Ziel zu erreichen.


    Hab es nun verstanden aber ich hab noch zwei fragen:
    (wie) kann ich alle Datein auslesen lassen und das alles dann auf eine durch new definiertes wort setzen?? (dann soll das alles auf einmal durchgeschaut werden dann muss ich net jede Datei extra)


  • Hab es nun verstanden aber ich hab noch zwei fragen:
    (wie) kann ich alle Datein auslesen lassen und das alles dann auf eine durch new definiertes wort setzen?? (dann soll das alles auf einmal durchgeschaut werden dann muss ich net jede Datei extra)


    Wenn du nicht aus den Daten der verbundenen Spieler die Dateinamen bilden kannst, dann verwende das von Mr.Reese genannte Plugin. Im vorgegebenen Link gibt es auch ein Beispiel, wie man Namen von Dateien in einem bestimmten Verzeichnis auflistet.

  • Wenn du nicht aus den Daten der verbundenen Spieler die Dateinamen bilden kannst, dann verwende das von Mr.Reese genannte Plugin. Im vorgegebenen Link gibt es auch ein Beispiel, wie man Namen von Dateien in einem bestimmten Verzeichnis auflistet.


    aber da gibt es ein Problem: aus irgendeinen grund verträgt sich kein plugin mit filemanager. gibt es das native dir_list(dir:handle, storage[], &type, length = sizeof(storage)); nicht auch bei dini?

    Einmal editiert, zuletzt von Tom_Sunder ()

  • Beitrag von Tom Sunder ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Mit der Fehlerbeschreibung "verträgt sich nicht" lässt sich nichts anfangen, tut mir leid. :rolleyes:


    manchmal kommen errors manchmal will der server nimmer angehen usw
    Edit: ich versuch es jetzt einfach mit filemanager. Bracuhe nun aber schon hilfe: bei native dir_list(dir:handle, storage[], &type, length = sizeof(storage)); für was ist die erste lücke für was die zweite für was die dritte usw?? Bzw ein Beispiel. Ich schätze beim ersten muss man das sagen auf welchem wort das gespeichert wird weiter weiß ich net

  • Ich denke, dass im gezeigten Beispiel im Thread des Plugins alles beleuchtet wird:



    new dir:dHandle = dir_open("./"); // Verzeichnis öffnen.
    new item[40], type;

    while(dir_list(dHandle, item, type)) // Alle Dateien in einer while-Schleife auslesen.
    {
    if(type == FM_FILE) printf("%s is a file", item); // "type" enthält den Typ des Objekts (Datei oder Verzeichnis).
    else if(type == FM_DIR) printf("%s is a directory", item); // "item" enthält den Namen des Objekts.
    }

    dir_close(dHandle);

  • Beitrag von Tom Sunder ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.

  • ok soweit ich das seh muss dann unter if(type == FM_FILE) printf("%s is a file", item); // "type" enthält den Typ des Objekts (Datei oder Verzeichnis). kommen was passieren soll, wenn in einerDatei das wort net vorkommt (oder ist das dafür wenn es nirgendswo (im ganzen ordner net) vorkommt?)
    und unter else if(type == FM_DIR) printf("%s is a directory", item); // "item" enthält den Namen des Objekts. gehört das was passieren soll wenn der Namen in der Datei ist (oder kommt dadrunter was passieren soll wenn es irgendwo vorkommt?)
    was ist richtig das das net in den klammern steht oder das das in den klammern steht?

    Einmal editiert, zuletzt von Tom Sunder ()

  • Ich denke nicht, dass du den Ablauf des Beispiel-Quellcodes richtig verstanden hast.



    new dir:dHandle = dir_open("./"); // Ein Verzeichnis wird geöffnet und der Handle dazu wird in der Variable "dHandle" gespeichert.
    new item[40], type; // Es werden zwei neue Variablen erstellt, in welche wir die Namen und Typen (Datei oder Verzeichnis) des Verzeichnis, welches wir ...
    // ... oben geöffnet haben, zwischenspeichern.

    while(dir_list(dHandle, item, type)) // Eine while-Schleife, da dir_list() bis es kein weiteres Objekt im Verzeichnis findet 1 (true) zurückgibt. Sobald ...
    // ... nichts mehr gefunden wird, ist die while-Schleife beendet.
    {
    if(type == FM_FILE) // Wenn das gefundene Objekte eine Datei ist, dann ...
    {
    printf("%s is a file", item); // ... gebe "Dateiname is a file" aus.
    } else if(type == FM_DIR) { // Wenn das gefundene Objekte ein Verzeichnis ist, dann ...
    printf("%s is a directory", item); // ... gebe "Verzeichnisname is a directory" aus.
    }
    }

    dir_close(dHandle); // Schließen des Verzeichnises.


    Diese Beschreibung sollte detailiert genug sein, sodass du nun einen Quellcode aufsetzen kannst, mit welchem du die Dateien auslesen kannst. Beginne einfach mal und poste den Quellcode mit ordentlicher Fehlerbeschreibung hier, wenn du auf Probleme stößt. Deine Posts sind zum Großteil unstrukturiert, nicht durchdacht, hingeschludert und für Hilfestellungen komplett unangebracht. Nehme dir für dein Vorhaben Zeit, dokumiertiere deine Problematiken ordentlich und strukturiert und gebe dir bitte etwas mehr Mühe. Das soll nicht abstoßend klingen, sondern dich lediglich dazu auffordern ausführlicher, ordentlicher und strukturierter zu arbeiten.


    P.S.: Pushe deine Beiträge nicht durch Löschen deiner vorigen Beiträge. :rolleyes:


  • Ok. Danke. Ich mach jetzt das suchen mit Dini...

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen