Eigene Containerfunktion erstellen

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

    • Eigene Containerfunktion erstellen

      Ist es mit XProfan möglich eine eigene Containerfunktion zu erstellen? Mir ist schon klar, dass ich als ersten Parameter einen String abfragen kann und dann die Parameter per Overload behandel, aber das ist doch recht ungünstig. In meinem konkreten Fall geht es darum eine Funktion MyFTP zu erstellen, die ich mit Unterfunktionen füllen will.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd) :thumbsup:
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/64TB HDD+256GB Samsung 960 EVO (3.2GB/lesen, 1.9GB/s schreiben :top: )
      XBox Classic 10GB/360S 500GB/One S 2TB/One X Scorpio Edition/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG :-D
      Samsung Galaxy S6 edge pearlwhite mit 128GB und Nexus ROM/XGOSP (Android 8.1, 12/2017)
      http://jacdelad.bplaced.net
    • Geht nur wenn die Funktion an sich, also FTP oder Set, schon vorhanden ist. Sonst kommt "Funktion unbekannt".
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd) :thumbsup:
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/64TB HDD+256GB Samsung 960 EVO (3.2GB/lesen, 1.9GB/s schreiben :top: )
      XBox Classic 10GB/360S 500GB/One S 2TB/One X Scorpio Edition/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG :-D
      Samsung Galaxy S6 edge pearlwhite mit 128GB und Nexus ROM/XGOSP (Android 8.1, 12/2017)
      http://jacdelad.bplaced.net
    • Vielleicht kannst du damit was machen :

      Quellcode

      1. Cls
      2. MyFTP("init", 100)
      3. MyFTP("upload", "Test.txt", "Profan.de")
      4. Proc MyFTP
      5. Parameters String befehl
      6. 'Print %PCount
      7. Select befehl
      8. CaseOf "init"
      9. Print @&(2)
      10. CaseOf "upload"
      11. Print "Parameter 1 : "; @$(2)
      12. Print "Parameter 2 : "; @$(3)
      13. EndSelect
      14. EndProc
      15. WaitKey
      Alles anzeigen
      Käme dem Subproc schon sehr nahe.
      Wenn der Code größer wird, würde ich in der CaseOf - Abfrage
      die weiteren Procs aufrufen (init, upload).
      Proc init
      ....
      EndProc

      usw.

      Wenn du es etwas aufwändiger haben willst, kannst du ja auch
      noch mit %PCount und PType$() Anzahl und Typ der Parameter
      abfragen. Dann brauchst du die @$() @&() usw. nicht.
    • Das hatte ich schon mal versucht.
      In MwDate hatte ich das bis zum Extrem ausprobiert.

      Das Problem sind aber die vielen unterschiedlichen Parameter-Leisten.
      Dort kann man schnell den Überblick verlieren.

      Besser wäre, wenn Roland da eine Möglichkeit findet uns einen Container-Rohling zu bauen von dem wir dann neue Container ableiten können.
      Programmieren, das spannendste Detektivspiel der Welt.
    • Das hatte ich Roland schon vor einiger Zeit gefragt.
      Damals wurde mir gesagt, daß das schon ginge, nämlich
      wie oben, mit der Punkt-Notation.

      Ich glaube auch nicht, daß das so einfach geht. Ein Container-Rohling
      wäre zwar möglich, aber wie soll Roland im Voraus wissen, wie der
      heißen soll ? So ein Container sollte ja schon andeuten, welche Art
      von Funktionen drin enthalten sind. Bei MOVE(....) z.B. weiß ich
      genau, daß in diesem Container alle Arten zum Verschieben von
      Listeninhalten drin sind. Wenn ich mir jetzt einen Container Neu()
      vorstelle und verwalte da drin alles mögliche Zeug, ist das nach
      einiger Zeit auch nicht mehr übersichtlich. Wenn dann noch jemand
      hingeht und die Get/Set/Create Container zusätzlich nutzt, und seine
      z.B. Create-Funktionen in den Create - Container wirft, hat er irgendwann
      das Chaos perfekt.

      Sowas ginge meiner Meinung nach nur mit einem variablen Container,
      den man zur Laufzeit erzeugen kann und dann seine dazugehörigen
      Procs reinwirft. Im Prinzip halt so ähnlich, wie die Array-Funktion, die
      man virtuell an eine Funktion übergibt. Aber, ob sich das Führen von
      extra Funktionslisten für Roland lohnt, sei dahin gestellt.
      Das könnte dann so aussehen :

      Quellcode

      1. erg = Create("Container", "MyFTP")
      2. ' Ergebnis 0/1 Erfolg
      3. SubProc MyFTP.Init
      4. Parameters <...>
      5. ....
      6. EndProc
      7. MyFTP("Init",....)
      Dabei müßte dann SubProc auch den Container erkennen.

      Aber dazu müßte sich dann Roland äußern, was da machbar wäre.

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von H.Brill ()

    • Ganz so kompliziert muss man das mit den Parametern nicht machen. Da auf oberster Ebene außer der Abfrage nach dem Befehl ja nichts passiert, kann der Befehl Parameters auch in den Unterbefehlen ganz normal verwandt werden, nur dass da der erste Parameter nicht mehr interessiert:

      Quellcode

      1. Cls
      2. MyFTP("init", 100)
      3. MyFTP("upload", "Test.txt", "Profan.de")
      4. Proc MyFTP
      5. Parameters String befehl
      6. Select befehl
      7. CaseOf "init"
      8. Parameters String x, int zahl
      9. Print zahl
      10. CaseOf "upload"
      11. Parameters String x, par1, par2
      12. Print par1
      13. Print Par2
      14. EndSelect
      15. EndProc
      16. WaitKey
      Alles anzeigen

      Ich wüsste jetzt nicht, wie man das noch mehr vereinfachen könnte.

      Gruß
      Roland
      Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD / ATI Radeon HD4770 512 MB / Windows 7(32) - XProfan X3
      AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 (onboard) / Windows 10(64) - XProfan X3


      http://www.xprofan.de
    • Also, es geht natürlich recht einfach indem der erste Parameter ausgewertet wird und dann die entsprechende Unterfunktion angesprungen wird. Aber das stelle ich mir recht langsam vor.
      Momentan habe ich meine FTP-Funktionen mit "My" gekennzeichnet, das ist auch ganz OK.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd) :thumbsup:
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/64TB HDD+256GB Samsung 960 EVO (3.2GB/lesen, 1.9GB/s schreiben :top: )
      XBox Classic 10GB/360S 500GB/One S 2TB/One X Scorpio Edition/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG :-D
      Samsung Galaxy S6 edge pearlwhite mit 128GB und Nexus ROM/XGOSP (Android 8.1, 12/2017)
      http://jacdelad.bplaced.net
    • Soooo langsam nun auch wieder nicht. Um an Deinem Beispiel FTP zu bleiben, das Langsamste ist die Datenübertragung. Da ist Profan selbst im Interpretermodus um Etliches schneller. Ich denke mal, die Laufzeit für die Decodierung der Subfunktionen wird Dir da gar nicht auffallen.

      Gruß Volkmar
    • Möglich. Trotzdem wärs schöner wenn man sich 1,2,3 fix einene neuen Container erstellen könnte.
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd) :thumbsup:
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/64TB HDD+256GB Samsung 960 EVO (3.2GB/lesen, 1.9GB/s schreiben :top: )
      XBox Classic 10GB/360S 500GB/One S 2TB/One X Scorpio Edition/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG :-D
      Samsung Galaxy S6 edge pearlwhite mit 128GB und Nexus ROM/XGOSP (Android 8.1, 12/2017)
      http://jacdelad.bplaced.net
    • Bei sehr wenigen Unterfunktionen mag es ja noch recht übersichtlich sein.
      Bei größeren Codes geht aber die Übersicht verloren. Da möchte man ganz
      gerne auslagern, um eine Übersicht zu bewahren :

      Quellcode

      1. Cls
      2. MyFTP("init", 100)
      3. MyFTP("upload", "Test.txt", "Profan.de")
      4. Proc MyFTP
      5. Parameters String befehl
      6. Select Lower$(befehl)
      7. CaseOf "init"
      8. Parameters String x, int zahl
      9. Init(zahl)
      10. CaseOf "upload"
      11. Parameters String x, par1, par2
      12. upload(par1, par2)
      13. EndSelect
      14. EndProc
      15. Proc Init
      16. Parameters int z
      17. Print z
      18. EndProc
      19. Proc upload
      20. Parameters String par1, par2
      21. Print par1
      22. Print par2
      23. EndProc
      24. WaitKey
      Alles anzeigen
      Wenn dann noch mehr solcher selbstgebastelter Container hinzu kommen, weiß man zum Schluß
      selber nicht mehr, welche Proc zu welchem Container gehört. Deshalb finde ich meinen obigen
      Vorschlag mit den virtuellen Containern und den SubProcs übersichtlicher und eleganter.
      Zumindest kann man dann mit subproc eine Proc richtig zuordnen.
    • Daran sollte es wohl nicht scheitern. Die auzurufenden Prozeduren können ja MyFTP_Init u.s.w. heißen. Und ich verwende bei solchen "Zusammenhängen" schon mal den Trick, die Unterprozeduren in der Prozedur selbst unterzubringen.

      Quellcode

      1. Proc MyFTP
      2. Proc MyFTP_Init
      3. ....
      4. EndProc
      5. Proc MyFTP_Upload
      6. ....
      7. EndProc
      8. ' und hier beginnt dann die eigentliche Hauptprozedur.
      9. EndProc
      Alles anzeigen
      Genau so gut kann man auch die ganzen zusammengehörigen Teile als eine eigenständige Datei (INC) speichern.

      Gruß Volkmar
    • Das geht ja auch bei Incs. :thumbsup:
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd) :thumbsup:
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/64TB HDD+256GB Samsung 960 EVO (3.2GB/lesen, 1.9GB/s schreiben :top: )
      XBox Classic 10GB/360S 500GB/One S 2TB/One X Scorpio Edition/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG :-D
      Samsung Galaxy S6 edge pearlwhite mit 128GB und Nexus ROM/XGOSP (Android 8.1, 12/2017)
      http://jacdelad.bplaced.net
    • Es hat mich trotzdem in den Fingern gejuckt. Es wird die frei definierte Containerfunktion geben:

      Quellcode

      1. SubProc MyFTP.Init
      2. Parameters int zahl
      3. Print zahl
      4. EndProc
      5. SubProc MyFTP.upload
      6. Parameters string par1, par2
      7. Print par1
      8. Print Par2
      9. EndProc
      10. Cls
      11. create("Container", "MyFTP")
      12. MyFTP("init", 100)
      13. MyFTP("upload", "Test.txt", "Profan.de")
      14. WaitKey
      Alles anzeigen

      Gruß
      Roland
      Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD / ATI Radeon HD4770 512 MB / Windows 7(32) - XProfan X3
      AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 (onboard) / Windows 10(64) - XProfan X3


      http://www.xprofan.de
    • Da kann dann jeder seine eigenen Gelüste austoben? Und wie kriegt ein Neuer dann Hilfe? Ich bin nicht grundsätzlich dagegen, aber für sehr sparsamen Einsatz solcher Möglichkeiten ...

      Und heißt das, es wird ein ÜBERDECKEN existierender Container-Befehle, also ein "Umdefinieren" geben?

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von p. specht ()

    • p. specht schrieb:

      Da kann dann jeder seine eigenen Gelüste austoben? Und wie kriegt ein Neuer dann Hilfe? Ich bin nicht grundsätzlich dagegen, aber für sehr sparsamen Einsatz solcher Möglichkeiten ...
      Genau! Jeder kann nun eigene Container erstellen und diese mittels SubProc mit Funktionen füllen.
      Und natürlich wird dies in der Hilfe seinen Niederschlag finden!

      Als Anhänger der Objektorientierung würde ich es trotz allem vorziehen eine Klasse MyFTP zu erstellen, die im Konstruktor die Verbindung aufbaut, und die restlichen Funktionen als Methoden enthält.

      Quellcode

      1. class MyFTP = myftp@, \
      2. upload@
      3. Proc MyFTP.MyFTP
      4. Parameters int zahl
      5. Print zahl
      6. EndProc
      7. Proc MyFTP.upload
      8. Parameters string par1, par2
      9. Print par1
      10. Print Par2
      11. EndProc
      12. Cls
      13. var mem MeinFtp = New(MyFTP, 100)
      14. MeinFTP.upload("Test.txt", "Profan.de")
      15. WaitKey
      Alles anzeigen
      Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD / ATI Radeon HD4770 512 MB / Windows 7(32) - XProfan X3
      AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 (onboard) / Windows 10(64) - XProfan X3


      http://www.xprofan.de
    • Danke, Roland!
      XProfan-Semiprofi (XProfan X4+XPIA+LemonEd) :thumbsup:
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/64TB HDD+256GB Samsung 960 EVO (3.2GB/lesen, 1.9GB/s schreiben :top: )
      XBox Classic 10GB/360S 500GB/One S 2TB/One X Scorpio Edition/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG :-D
      Samsung Galaxy S6 edge pearlwhite mit 128GB und Nexus ROM/XGOSP (Android 8.1, 12/2017)
      http://jacdelad.bplaced.net