Real Wert aus String?

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Real Wert aus String?

      hi,

      wie kann ich beim GM einen String der zb "1" lautet in eine Zahl umwandeln? Wenn ich
      den String umwandle komm etwas anderes raus. Kann es sein das nicht nur die Ziffer 1
      sondern auch das Absatzzeichen konvertiert wird?
    • Die DLL hab ich selbst geschrieben und Sie funktioniert auch. Nur wenn in der DLL der
      String zerlegt werden soll funktioniert es nichtmehr.

      Die Funktion hatt diese werte (ty_string, ty_real, ty_real)
      wobei der eingegebene string 2 mal zerlegt werden soll. Nur die realen werte
      kommen in der DLL nicht an.


      Die Funktion wurde aber richtig initialisisert.
    • external_define(dll,name,calltype,restype,argnumb,arg1type,arg2type, ...) Defines an external function. dll is the name of the dll file. name is the name of the functions. calltype is the calling convention used. For this use either dll_cdecl or dll_stdcall. restype is the type of the result. For this use either ty_real or ty_string. argnumb is the number of arguments (0-16). Next, for each argument you must specify its type. For this again use either ty_real or ty_string. When there are more than 4 arguments all of them must be of type ty_real.


      Ich befürchte, es gibt noch eine Einschränkung, die dort nicht aufgeführt ist... Probie mal, das String-Parameter ans Ende zu setzen.

      Aber warum brauchst du für eine Zerlegung eines Strings eine DLL?
    • Geht das auch ohne? Ich müsste den string so zb zerlegen:

      ////
      Hi
      20
      3
      ////
      Bye
      5
      10

      Das ist jetzt ein ganzer string.. er soll als erstes in einen Block unterteilt werden... also zb Block 1 wär dann nur noch

      Hi
      20
      3

      und dann soll er noch durch chr(10) Zeichen also Absatzzeichen die ja vorhanden sind getrennt werden. Eine funktion
      die sowas bewerkstelligt find ich beim gm leider nicht :huh:
    • Ehm, ist das dein Ernst? Man kann mit dem Game Maker wunderbar Strings zerlegen... es fehlen zwar fortgeschrittene Funktionen wie z.B. php sie hat, aber für ne dumme Zerlegung reicht es locker...
      string_length(str) Returns the number of characters in the string.
      string_pos(substr,str) Returns the position of substr in str (0=no occurrence).
      string_copy(str,index,count) Returns a substring of str, starting at position index, and of length count.
      string_char_at(str,index) Returns the character in str at position index.
      string_delete(str,index,count) Returns a copy of str with the part removed that starts at position index and has length count.
      string_insert(substr,str,index) Returns a copy of str with substr added at position index.
      string_replace(str,substr,newstr) Returns a copy of str with the first occurrence of substr replaced by newstr.
      string_replace_all(str,substr,newstr) Returns a copy of str with all occurrences of substr replaced by newstr.
      string_count(substr,str) Returns the number of occurrences of substr in str.

      Mit chr(val) kannst du dann auch Längenmarker setzen, wenns beliebt...

      Edit: Zum Auslesen von Blöcken wie z.B. xml oder html sie hat, hab ich sogar selbst mal Funktionen geschrieben, keine länger als 4 Zeilen. Geht also definitiv.
    • Über derartige funktionen hab ich es auch schon versucht , aber ich hab so das Gefühl das will
      so nicht gehn... der string müsste ja index weiße ausgegeben werden und durch ein seperator zeichen
      getrennt werden. Funktion könnte so heißen

      str = "das|ist|ein|getrennter|string";
      index = 2;
      seperator = "|";

      string_part( str, index, seperator);

      und ausgeben würde sie in diesem fall "ist"
    • loud.de.be schrieb:

      Über derartige funktionen hab ich es auch schon versucht , aber ich hab so das Gefühl das will
      so nicht gehn... der string müsste ja index weiße ausgegeben werden und durch ein seperator zeichen
      getrennt werden. Funktion könnte so heißen

      str = "das|ist|ein|getrennter|string";
      index = 2;
      seperator = "|";

      string_part( str, index, seperator);

      und ausgeben würde sie in diesem fall "ist"


      Und was ist jetzt das Problem? Schreib einfach so eine Funktion, MewX hat ja schon die nötigen Funktionen zitiert.

      © 2008 by Teamgrill Productions
    • Ich hab das mal kurz im gm versucht umzusetzen allerdings wird nur "das" wieder gegeben

      GML-Quellcode

      1. str = argument0;
      2. sep = argument2;
      3. ind = argument1;
      4. if ind > 1
      5. {
      6. {
      7. repeat (ind)
      8. str = string_delete( str, 0, string_pos(sep,str));
      9. }
      10. str = string_copy( str, 0, string_pos(sep,str));
      11. return str
      12. }
      13. else
      14. {
      15. str = string_copy( str, 0, string_pos(sep,str));
      16. return str
      17. }
      Alles anzeigen


      der string wird bis zum index getrimmt und dann bis zum nächsten seperator ausgeschnitten

      Edit: das hier hab ich in ein test objekt ins ceate event

      GML-Quellcode

      1. test = "das ist ein getrennter string";
      2. test = string_part(test, 4, " ");
      3. show_message( test);
      4. game_end();
    • Es gibt sogar einen Thread hier irgendwo names "Copy's nützliche Skripts" oder so, in welchem ein Skript aufgeführt wird, welches einen Substring aus einem String mit Trennzeichen ausliest.
      "das war meine letzte flamewar PM an dich ."
    • Der Index eines Strings beginnt im GM bei 1, nicht bei 0.
      Hier ein Script aus meiner Feder, es gibt den ersten String zwischen zwei Blöcken wieder (die auch, wenn ich mich recht entsinne, identisch sein können)

      GML-Quellcode

      1. #define string_copy_ext
      2. // string_copy_ext(str,start,end)
      3. // Returns the string between the first occurences of start and end
      4. // coded by MewX
      5. if (string_pos(argument1,argument0) = 0) then return "";
      6. var s;
      7. s = string_pos(argument1,argument0)+string_length(argument1);
      8. return string_copy(argument0,s,string_pos(argument2,string_delete(argument0,1,s-1))-1);

      Du solltest dir ernsthaft überlegen, deine Selbsteinschätzung von "Experte" auf etwas niedrigeres Runterzustufen... dann hätte dir wesentlich schneller geholfen werden können, weil dann keiner mit solchen Wissenslücken gerechnet hätte.
    • Tud mir leid ich komm von etwas professionelleren Sprachen und bin
      beim gm relativ neu.

      GML-Quellcode

      1. {
      2. __str = argument0;
      3. __trenn = argument2;
      4. __pos = argument1-1;
      5. repeat (__pos) {__str = string_replace(__str,__trenn,'°');}
      6. if (__pos >= 0)
      7. {
      8. __pos1 = string_pos(__trenn,__str)+1;
      9. __str = string_replace(__str,__trenn,'°');
      10. if (string_count(__trenn,__str) > 0)
      11. {__pos2 = string_pos(__trenn,__str);}
      12. else {__pos2 = string_length(__str)+1;}
      13. }
      14. else
      15. {
      16. __pos1 = 0;
      17. __pos2 = string_pos(__trenn,__str)-1;
      18. }
      19. __len = __pos2 - __pos1;
      20. __str = string_copy(__str,__pos1,__len);
      21. if (string_char_at(__str,0) = '~')
      22. {return real(string_copy(__str,2,__len-1));}
      23. else {return __str;}
      24. }
      Alles anzeigen


      Geht so jetzt schon, danke
    • Bischen viel Code für einen leichten Job, aber wenns funzt...

      Es heißt aber nicht umsonst GML-xxxx - dabei wird auch Wissen im Umgang mit dem Game Maker im Speziellen erwartet. Ich gebe zu, dass die Sache mit dem String-Index verwirrend ist, aber nach ein wenig Trial & Error kommt man da binnen 5Minuten drauf.