Mehrdimensionale Arrays

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
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 bin nicht gerade ein Ass wenn es um Mehrdimensionale Arrays in Pawn geht.
    Deshalb würde ich gerne kurz eure Hilfe in Anspruch nehmen.


    Und zwar würde ich gerne in einen Mehrdimensionalen Array mehrere Namen einspeichern.
    Nur leider weis ich nicht wie ich dies deklarieren muss.


    Ich hoffe das mir jemand helfen kann.
    Danke schon mal im voraus.


    Mit freundlichen Grüßen
    Darklight

  • Hi,
    also wenn mich nicht alles täuscht sollte es so gehen:
    new Names[ANZAHL][24];


    dann zb:
    Names[0]="Growen";


    ich mach das aber immer mit Enum deswegen brauch ich mehrdimensionale Arrays für Namen nicht :D

  • Ob Spielernamen zu speichern verwendet man z.B


    new PlayerName[MAX_PLAYERS][MAX_PLAYER_NAME];


    Bei MAX_PLAYERS hat also jeder Spieler einen index worauf auf das zugegriffen werden kann, was in der zweiten Dimension steht. Nämlich die einzelnen Characters.

  • Bis hierher schonmal vielen Dank.
    Nun habe ich aber das Problem, das Pawno mir das mehrdimensionale Array nicht erstellen will. Ich habe es mit print's getestet, bei der Deklaration führt er die Funktion nicht weiter aus.


    Das hier wäre der Code:

    Spoiler anzeigen
    stock MySQL_Loeschen(Name[], ID)
    {
    new a = (ID + 1), tname[1024][MAX_PLAYER_NAME], tnumber[1024];
    format(SQLEscapeX[0], 128, "SELECT * FROM %s", Name);
    mysql_query(SQLEscapeX[0]);
    mysql_store_result();
    new rows = mysql_num_rows();
    mysql_free_result();
    for(new i = 1; i <= rows; i++)
    {
    if(i != a)
    {
    format(SQLEscapeX[0], 128, "SELECT Telefonnummer FROM %s WHERE ID = '%d'",Name,i);
    mysql_query(SQLEscapeX[0]);
    mysql_store_result();
    tnumber[i] = mysql_fetch_int();
    format(SQLEscapeX[0], 128, "SELECT Name FROM %s WHERE ID = '%d'",Name,i);
    mysql_query(SQLEscapeX[0]);
    mysql_store_result();
    mysql_fetch_string(tname[i]);
    }
    }
    for(new i = 1; i <= rows; i++)
    {
    printf("%s - %d",tname[i],tnumber[i]);
    }
    }

    Auch wenn ich das"tname" Array auf nur die viertel Größe reduziere funktioniert es nicht.

  • Was soll die Funktion überhaupt bewirken ? Das geht nämlich bestimmt auch einfacher was du vor hast.



    new a = (ID + 1), tname[1024][MAX_PLAYER_NAME], tnumber[1024];
    Das ist ziemlich viel, meinst du nicht ? Glaube der stack ist nicht mal standardmäßig so groß. Befürchte,dass du damit das Script zum Absturz bekommst bzw den Server.

  • Das ist ziemlich viel, meinst du nicht ? Glaube der stack ist nicht mal standardmäßig so groß. Befürchte,dass du damit das Script zum Absturz bekommst bzw den Server.


    Hm, gut möglich.
    Was ich vorhabe ist: eine Reihe aus einer MySQL-Tabelle zu löschen.
    Dazu wollte ich erstmal alles in variablen speichern und dann alles, bis auf die zu löschende Reihe, wieder in die Tabelle reinschreiben.

  • Eine Reihe aus der Datenbank löschen ?
    Wenn ich dich jetzt richtig verstehe,wieso machst du dann nicht folgendes query:
    format( sQuery, sizeof(sQuery), "DELETE FROM `%s` WHERE `ID` = %d",Name,ID );
    Ist doch viel einfacher.Solltest dir vielleicht mal etwas Wissen über MySQL aneignen,denn dein Weg ist mehr als umständlich.

  • Dabei gibt es aber dann ein Problem, denn ich gehe mit for-schleifen die ID (AUTO_INCREMENT) durch und fragen nach bestimmten Werten ab. Und wenn eben plötzlich eine ID nicht mehr erreichbar ist könnte dies zu Problemen führen.

  • Dann mach vorher eine Abfrage ob diese ID existiert:
    for(new x=0; x < MAX_MYSQL_WERTE; x++)
    {
    format(query, 128, "SELECT * FROM omg WHERE ID = %i", x);
    mysql_query(query);
    mysql_fetch_result();
    if(mysql_num_rows())
    {
    // Frage ab!
    }
    mysql_free_result();
    }


    Mit freundl. Grüßen
    Padarom

    Ich bin
    .. seit etwa 2007 in der Webentwicklung tätig, seit 2013 professionell
    .. Erfahrener Entwickler in PHP, Swift, Javascript, Typescript und Ruby. Zusätzlich habe ich Erfahrung in Python, Java, C#, C++, Prolog und einigen esoterischen Programmiersprachen
    .. Luftfahrtenthusiast und Segelflieger