Beiträge von Mars

    Sehr interessanter "erster" Beitrag in einem Programmierer Hilfe & Support Forum. :D

    Back to Topic:
    Irgendwann im laufe des letzten Jahres kam Genshin Impact heraus. Das sah nicht nur gut aus, sondern spielte sich auch gut. Es ist allerdings "kein" Onlinespiel, es gibt einen Multiplayer, der ist aber eher rudimentär und nicht auf Masse (hunderte andere Spieler), sondern auf eine sehr kleine Auswahl (Spieler betreten deine Welt auf Anfrage, man ist also üblicherweise zu 2t unterwegs) ausgelegt.

    Wenn die Namensgebung nur so einfach wäre wie bei wissenschaftlichen Abschlussarbeiten: "Exponentiallogarithmische Schreibweise zur Erfassung von Zahlen außerhalb des Double Wertebereichs". Mit dem Namen liest zwar keiner deine Bachelorarbeit, aber der Prof ist glücklich :D

    Moin,


    Anbei ist eine UDF die intern mit folgender Schreibweise Arbeitet: 1e10.994604967679 statt 9.8765432e10. Die "Zahl" wird als als Logarithmus zur Basis 10 gespeichert. Die eigentliche Zahl ergibt sich damit zu Sign * 10 ^ Double. Mit dieser Schreibweise lassen sich relativ große (1e99999 z.B.) und auch sehr kleine Zahlen gut darstellen. Für exakte Ergebnisse ist diese Methode natürlich ungeeignet, da ist es besser mit BigInt oder BigNum zu rechnen, aber wenn die Genauigkeit "nur so pi mal 7 Nachkommastellen" stimmen muss, dann findet man hier vielleicht was man sucht.


    Ich habe die UDF vorerst "ENumber" getauft (wollte eigentlich BigNum, aber das gibt es ja schon ^^), oder LogNum (aber das klang irgendwie doof). Also ist es jetzt ENum (E = exponential), damit ist der Name wenigstens "fast" richtig.


    In der UDF sind einige Rechenmethoden (+ - * / ^ etc) enthalten. Fortschreitendes wie Fakultät, Binomialkoeffizient, uvm. habe ich aber noch nicht angefasst, da mir das auch zu viel Arbeit ist "alle" Anwendungsfälle ausgiebig zu testen. Ich habe versucht möglichst alle exeptions (und sowas wie "positive 0 und negative 0") 1 zu 1 nachzubilden um den in AutoIt üblichen Rechenregeln zu entsprechen. Ein paar Funktionen arbeiten dennoch anders, z.B. rational power(x, y) = x^y. AutoIt schummelt hier und nimmt y einfach als Integer, wenn es "nah genug" an einem Integer liegt, damit kann man auch negative Zahlen potenzieren, was diese UDF aber nicht kann.


    Wenn jemand Funktionen beisteuern, testen, die UDF nutzen, (z.B. um ein Incremental-Idle-Game zu basteln wo es wahnsinnig riesige Zahlen gibt), Änderungen vornehmen, etc. will. Immer her damit, ich bin für jede Kritik und jeden Verbesserungsvorschlag offen.


    lg

    M

    Die Sprache ist derzeit kräftig am degenerieren. Da ich hauptsächlich mit Leuten aus der Uni zu tun habe ist das für mich kaum bemerkbar, aber sobald man dieses Millieu verlässt fragt man sich was hier überhaupt gerade passiert. Das Gendern ist bei uns (TU-Darmstadt) zum Glück noch nicht allgegenwärtig, in offiziellen Schreiben von "Oben" aber bereits vorhanden. Was ich bei dem ganzen Kram nicht verstehe ist: Frauen fühlen sich angeblich von der neutralen Ansprache "Student", "Arbeiter", "Ingenieur" etc. nicht angesprochen, Männer sollen sich aber von "Student*in" oder von "StudentIn" angesprochen fühlen? Damit verschiebt man das "Problem" doch nur auf die andere Seite, anstatt es zu lösen?


    Mal abgesehen davon, dass kaum jemand noch (anständiges) Deutsch spricht^^ Wenn man im Zug sitzt und hört was da gesprochen wird versteht man kein Wort.

    Der Trick sind Arrays. Du hast unmengen an redundanten Daten in deinem Programmcode. Immer wenn ein Ablauf nur von verschiedenen Daten, aber nicht von verschiedener "Struktur" abhängt, kann man Arrays nutzen. (z.B. du hast ein Label und willst dort 10 verschiedene Strings anzeigen lassen je nachdem was man anklickt. Dann speicherst du diese 10 Strings in einer Liste und benutzt z.B. Liste[0] um den ersten String zu bekommen).


    Trick Nummer 2 sind MEHR ARRAYS :D

    Wenn du einen Datensatz hast (bestehend aus Titel, OS, CPU, GPU, ... etc) ist dieser ein Array. Wenn du viele Datensätze hast, ist das ein Array welches Arrays enthält.


    Trick Nummer 3: Generalisierung im Allgemeinen

    Immer wenn man in der Programmierung eine Anzahl Probleme (z.B. der große ElseIf Teil, oder eine eigene Funktion für jedes Spiel LOL(), GTA(), ...()) hat, die sich sehr ähnlich sind, versucht man einen Schritt zurückzutreten und "alle" Probleme dieses Typs gleichzeitig zu lösen. Was passiert, wenn du ein Spiel hinzufügen willst? Im Optimalfall ergänzt du in einer Liste ein paar Zeilen und fertig, aber du möchtest keine neuen Funktionen schreiben, keine neuen GUIs erstellen, keine neuen Ctrls erstellen, etc.


    Das klingt jetzt als würde ich dich angreifen, will ich aber wirklich nicht. Das sind alles Tips :thumbup:

    Man wächst an seinen Aufgaben, und einfache Programme sind super geeignet um etwas zu lernen ;)

    Anbei gibt es auch gleich ein Grundgerüst für "eine" Lösung des Problems (es gibt immer sehr viele verschiedene richtige Wege ein Problem zu lösen, hier wird nur "einer" gezeigt. Jeder hat einen eigenen Programmierstil). Das UserInterface (GUI) ist selbstverständlich nicht ausgereift, ich habe auch nicht alle Spiele hinzugefügt und der Text der angezeigt wird ist nicht schön formatiert, vielleicht sind auch noch Bugs drin, habe das jetzt nicht 5 Stunden getestet. Das sind alles Sachen an denen du dich austoben kannst 8o


    lg

    M

    1. Was willst du machen?

    2. Welche Hardware ist dafür geeignet?

    3. Welche Sprache benötige ich zur Programmierung?


    zu 2. Wenn eine Antwort Arduino ist: Dafür gibt es so viele Tutorials und eine unfassbar einfache (aber primitive) IDE (Damit kann man nichts falsch machen (und auch nichts richtig), das hier hätte ich anders formulieren müssen :D), dass du hier mit an Sicherheit grenzender Wahrscheinlichkeit besser aufgehoben bist als bei AutoIt, denn AutoIt ist primär zur Automatisierung von auf Windows laufenden Programmen geplant gewesen. Natürlich hat die Zeit und die vielen UDFs diese Sprache zu etwas ganz anderem werden lassen, aber das Verhalten eines Arduino mit AutoIt via Windows auf einem PI zu realisieren ist wesentlich komplizierter als direkt einen Arduino zu nutzen.

    Also beantworte wenigstens die erste der 3 Fragen, damit kann man schonmal mehr anfangen als mit 0 Antworten.

    Immer alle über einen Kamm scheren ist auch nicht soooo gut.
    Ich möchte mich z.B. nicht impfen lassen, weil die Kombination aus wenig Kontakt & auf dem Land leben & sehr selten Einkaufen mich nicht unbedingt zu den gefährdesten Leuten zählen lässt. Weiterhin vertraue ich keinem Impfstoff den es vor einem Jahr noch nicht gab, natürlich wurde alles anständig geprüft, aber wie bei Zigaretten, den Krebs bekommt man erst in 20 Jahren, wer weiß was da noch so passiert.


    Zusätzlich gibt es tonnenweise Leute (die mehr Kontakt zu Menschen haben) die es wichtiger brauchen als ich.


    also Abwarten & Tee trinken.

    Moin,


    Nachdem das Thema kurz in der Shoutbox aufgetaucht ist und ich einige gute Hinweise bekommen habe wie man ein solches Problem angehen könnte, habe ich mich hingesetzt und eine (mehr oder minder) funktionierende Lösung gebastelt.


    Was kann das Skript:

    Es zerlegt Bilder in einfarbige Rechtecke die in einer gewissen Reihenfolge übereinandergestapelt werden und im Endeffekt eine verlustfreie Repräsentation des Bildes liefern.


    Vorgehensweise:

    1. Zähle die Farben im Bild

    2. Erstelle für jede Farbe eine "bit"Map (also ein 2D Array aus 0 und 1) in derselben Größe wie das Bild (ab hier Layer genannt).

    3. Erstelle aus den Layern eine 012Map (0 = darf nicht überzeichnet werden, 1 = darf überzeichnet werden, 2 = MUSS überzeichnet werden) für jede Farbe.

    4. Erstelle aus jeder 012Map eine möglichst minimale Dekomposition

    5. Stapel nun alle Dekompisitionen (jeweils korrekt gefärbt) übereinander et voilà, das Originalbild entsteht wie durch Zauberhand.

    Das Problem ist nicht die Vorgehensweise ansich, sondern, dass es viele Schritte gibt die keine "schnellen" Lösungsalgorithmen erlauben, oder Schritte bei denen man eine Lösung nicht auf Optimalität prüfen kann ohne alles durchzuprobieren (brute Force).


    Schritt 3: Layer pro Farbe -> 012Map pro Farbe

    - Klingt als könnte hier nichts schiefgehen, aber welche Reihenfolge der Layer ist denn nun optimal?

    - Bei einem 8 Farben Bild wären das schon 8! = ca. 40.000 Möglichkeiten, die will man nicht alle durchprobieren.

    - Zur Optimierung wird hier eine Startlösung verwendet und immer wieder 2 Layer vertauscht, wenn das etwas bringt -> weiter, wenn nicht -> zurücktauschen.


    Schritt 4: Dekomposition der 012Map

    - Es gibt oft keine eindeutige Lösung, das ist super, weil es reicht "eine" optimale Lösung zu finden, aber woher weiß man ob die Lösung optimal ist?

    - Wird durch glorifiziertes Ausprobieren gelöst (genau wie der vorherige Teil)


    Die Methode ist relativ langsam (vllt in C++ umschreiben, aber dafür bin ich jetzt zu faul), für kleine Sprites mit wenigen Farben ist sie aber nützlich ;)

    Da ich nicht nochmal 50 Seiten schreiben will (das Skript zum Programm hat ja schon einige wenige Zeilen) gibt es hier einfach das Skript zum Ausprobieren. Wenn Fehler/Fragen/Anregungen/etc. auftauchen, her damit :thumbup:


    PS: Es ist Absicht, dass Layerweise gearbeitet wird (also 1 Layer/Farbe) und die Rechtecke nicht vollkommen z-Unabhängig sind, so kann man "1x Farbe setzen -> 10 Rechtecke Zeichnen, 1x Farbe setzen -> xyz Rechtecke Zeichnen" und muss nicht für jedes Rechteck den Farbwert einzeln speichern (obwohl er der Einfachheithalber angehängt wurde)


    lg

    M

    Moin,


    Ich weiß nicht wie viele Leute es hier gibt die Mindustry spielen, aber der ein oder andere wird es vermutlich sein ;)


    Mit Mindustry 6.0 wurden Logikprozessoren eingeführt, das sind Gebäude die mit einer gewissen Geschwindigkeit (z.B. 120 Instruktionen/Sekunde) eine Assemblerähnliche Sprache ausführen. Diese Sprache bietet die Möglichkeit viele Objekte im Spiel zu kontrollieren:

    - Ein Lager soll immer den Rohstoff der am häufigsten drin ist ausgeben, oder abwechselnd 2 Rohstoffe, und das alles aus demselben Entlader.

    - Auf einem Display (auch ein Gebäude im Spiel) will jemand unbedingt Snake/Tetris/Pacman/Paddlewar/etc. spielen.

    - In einer Nachricht (ein Gebäude im Spiel das Text anzeigt) steht wie viele Rohstoffe rein- und rausgehen.

    - Auf einem Display wird dieselbe Info aus der obigen Zeile grafisch als Balkendiagramm + Farbe + Icons angezeigt

    - Jemand will unbedingt Primzahlen ausrechnen.

    - usw usw. Es gibt unzählige Sachen die man tun kann.


    Der Rückschlag für jeden Programmierer kommt aber sofort mitgeliefert: Die ASM-Ähnliche Sprache ist extrem "klein". Es gibt ausschließlich eine einzige Instruktion zur Flussregelung, JumpIf. Diese akzeptiert zusätzlich ausschließlich Dezimalzahlen als Sprungadresse:

    - JumpIf a < 5 to 5 (Springt zu Zeile 5, wenn a < 5, die echte Syntax ist: "jump 5 lessThan a 5")


    Das ist wahrlich nicht schon zu lesen, oder zu schreiben. Zusätzlich gibt es KEINE Labels (also ich kann nicht "JumpIf a < 5 To #label" schreiben, und wer schonmal programmiert hat weiß, dass sich Zeilennummern andauernd ändern, wenn man etwas oberhalb entfernt oder einfügt.


    Also habe ich vor einigen Tagen angefangen einen Compiler zu schreiben, um zumindest die grundliegende Funktionalität die man zum Programmieren braucht bereitzustellen. (da ich keine Ahnung im Compilerbau habe habe ich mir alles selbst ausgedacht, falls jemand sich damit auskennt: Code lesen auf eigene Gefahr, vermutlich werden die Haare zu Berge stehen ^^)


    Version 0.1 was geht:

    - Syntax vollständig befreit von Whitespaces, alles wird über Klammern und Zeilenumbrüche geregelt -> If (a < 5) goto (5)

    - Übersetzung sämtlicher Arithmetik und aller Builtin Funktionen die von der Sprache unterstützt werden (außer Units und Radar, was das genau macht und wie man es verwendet weiß ich noch nicht, habe ich nicht getestet und dementsprechend nicht implementiert)

    - Einführung von Labels (beginnen mit #) & Labelarithmetik (vereinfacht, es gehen Sachen wie goto(#label+2), ausschließlich mit "+" und "-")

    - Sämtliche JumpIf Variationen sind gewrappt und ergeben sowas wie If (a = 5) goto (#label)

    - Einführung von If

    - Einführung von For (in einer Kombi aus C++ und AutoIt Syntax, For (i = 0; i < 4; i++) ... Next, das war mit Abstand am einfachsten und es lässt sich auch gut schreiben. Die Semikolons nerven ggf manche Leute, man kann stellvertretend auch "," nutzen, in Zukunft soll aber auch Inlinen möglich sein, sodass For (i = MyFunc(1, 2); i < 5; i++) mehr Kommas besitzt und das Zerlegen wieder komplizierter wird, deshalb bleibt es zumindest vorerst bei Semikolons.

    - Eingie Syntax ist redundant (z.B. kann man == oder = verwenden, und <> oder !=)

    - Einige Syntax ist doof (z.B. beinhaltet die ASM-Sprache "idiv", was durch "//" symbolisiert werden müsste, das ist aber bereits für Kommentare reserviert, also wird "/%" = "idiv", oder "pow" sollte eigentlich durch "^" gekennzeichnet werden, das ist aber schon BitXOR, also wird hier "**" verwendet)


    Version 0.1: was nicht geht:

    - Sämtliche Verkettungen (a = Sqrt(a + b)), JEDE Operation muss nacheinander einzeln ausgeführt werden. Es gibt lustigerweise in der ASM Sprache Sachen wie a = Sqrt(b^2+c^2), manches lässt sich also umformen um operationen einzusparen

    - Die original Syntax basiert auf Leerzeichen zur Argumententrennung, außerdem enthält sie oft ungenutzte Argumente (z.B. "draw color r g b a 0 0", die Nullen am Ende). Sie wird als Input nicht unterstützt.

    - Vermutlich eine ganze Menge die ich nur noch nicht kenne ;)


    Ich habe bisher kaum Programme geschrieben und ausprobiert, weil ich die Priorität darauf gesetzt habe, dass die Grundlagen erstmal funktionieren, Testen und Bugs Fixen ist also noch nicht weit fortgeschritten, wenn ihr das Programm verwendet wird es zu 100% irgendwelche Crashes geben (dabei geht auch der Code verloren, ab und zu in ein Textdokument kopieren hilft). In diesen Fällen bitte unbedingt hier im Thread das Beispielprogramm welches den Crash verursacht posten, dann schaue ich mir das an, eigentlich sollte es wenn überhaupt Errormeldungen geben und keine Crashes.


    Außerdem ist das UI extrem rudimentär (da kenne ich mich nicht gut aus, vielleicht will ja irgendjemand etwas basteln :)), hauptsache war dass es "geht".


    Es gibt von meiner Seite aus auch keine vollständige Erklärung zum Sprachumfang, um zu wissen was alles geht und was nicht geht bitte hier nachschlagen:

    Mindustry Logic 6.0 Reddit

    Selbstverständlich muss man mit der ganzen Sache erstmal warm werden bevor man anfängt großartige Programme zu schreiben. Für Leute die etwas grafisches machen wollen empfehle ich einen Blick in die "draw" Befehle. PS: Sämtliche Print und Draw Befehle laufen in einen Puffer, via drawflush und printflush kopiert man diesen Puffer ins jeweilige Gebäude (Message oder Display). Außerdem ist es wissenswert, dass ALLE Variablen im globalen Scope liegen und static sind. Bei jedem Durchlauf des Programms haben die Variablen zu Beginn also die Werte die sie zuletzt bei Programmende hatten. Das lässt sich via "exit" (bzw. "end" in der ASM-Sprache) im Code resetten.


    So genug der langen Rede, hier ein kleines Tutorial mit dem einzigen Programm das ich bisher geschrieben habe:


    [1]: Hier schreibt man seinen Programmcode hinein

    [2]: Hier kommt das was man in Mindustry verwenden kann heraus

    [3]: Hier kommen Errormeldungen heraus

    [4]: Hier gibt es (aktuell genau 1) Beispiele für Programmcode
    [5]: Das ist der Compile Button (F5 geht auch)


    [1]: Nachrichtenblock (den verknüpft man indem man zuerst auf den Prozessor und dann auf den Nachrichtenblock klickt)

    [2]: Mikroprozessor (hier klickt man auf das Symbol unter dem Gebäude um den Code zu bearbeiten)


    Im Menu des Prozessors klickt man unten in der Mitte auf bearbeiten. Anschließend kann man seinen Code importieren.


    Das sieht dann in etwa so aus. Wenn man dieses Menu via "Zurück" verlässt fängt der Prozessor an zu arbeiten, da er nur 120 Instruktionen/Sek schafft dauert es ein paar Sekunden (ca. 10) bis die Berechnung fertig ist.


    So sieht das Endergebnis dann aus.


    Das Programm gibts im Anhang.


    lg

    Mars

    Moin,


    leider bin ich wirklich nicht fit in Python, ein MultilayerNN habe ich dort aber (from scratch) schonmal implementiert (war eine Hausaufgabe, da muss man wohl oder übel durch :D). Leider habe ich wie gesagt von Python keinen Dunst und daher meine Inspiration aus youtube gezogen:

    - relativ theoretisch (aber sehr einfach erklärt) wie man ein NN baut: 3B1B

    - Python NN (nur der Anfang, in den Links/Kommentaren ist aber ein fertiges was funktioniert): SL


    Ich bin mir fast sicher, dass du die Videos bereits kennst, aber falls nicht hilft dir das möglicherweise. So wie ich das sehe bist du mit einem simplen NN (und z.B. Sigmoid + ((8), 13, 7, 3, (1)) das du selbst gebastelt hast besser bedient, als wenn du mit Kanonen auf Spatzen schießt (pytorch). Dann verstehst du auch woher jeder Wert kommt, wie alles zustandegebracht wurde etc. Ggf fällt dir dann eine Methode ein wie du dein selbst gebasteltes NN an die Bedingungen die du hast anpassen kannst.


    Ein paar Tips:

    - Skaliere deinen Input/Output immer zwischen 0 und 1 (oder -1 bis 1, je nach Aktivierungsfunktion), da ist die Ableitung der Aktivierungsfunktion am brauchbarsten.

    - Größere Netze brauchen viele Trainingsdaten, wenn man ihnen zu wenige gibt "lernen" sie die Daten und nicht das Prinzip dahinter

    - (vorallem) Kleine Netze fressen sich manchmal auf unbestimmte Zeit fest. Danach verbessern sie sich um einen unvorhersehbaren Betrag. Es ist ziemlich schwierig (bzw. ich wüsste keinen Ansatz dazu) nach einer festgelegten Zeit T herauszufinden welches Modell "gut" ist und welches "schlecht" ist. Man kann sehr grob aussortieren (ggf. die "schlechtesten" 50% ausschließen), das ist aber keine Garantie dafür, dass die "besseren" 50% auf lange Sicht "gut" bleiben.


    Es tut mir leid, dass ich nicht wirklich konkret helfen kann, vielleicht konnte ich aber einen Anstoß bieten, dann hat sich dieser Beitrag bereits gelohnt. Neurale Netze sind nicht unbedingt das am besten abgedeckte Fachgebiet hier im Forum :D


    lg

    M

    Ich weiß nicht ob das Hilft, aber bei Fenstern "selbstgebauter Titelleiste" (also z.B. Labels mit NCHITTEST zum Bewegen, eigene Buttons, etc) passiert keines dieser Events (allerdings werden wahrscheinlich auch nützliche Events verschluckt).

    Falls dein Fenster also keine Menuzeile hat (die ist sonst ganz oben, wobeeeeei, die kann man doch bestimmt als Pseudotitelleiste missbrauchen, wenn man ihren Grafikpuffer geschickt übermalt :D), kannst du via WS_POPUP ein "nacktes" Fenster erzeugen und die von dir gewünschten zulässigen Events (Resize wenn der User es will, Minimieren, Maximieren, Exit, Verschieben, etc) manuell verarbeiten.


    Kann gut sein, dass das viel zu viel arbeit ist, ist nur eine Überlegung :)


    lg

    M

    Ja das ist ärgerlich, heutzutage wird so viel über Skripte dynamisch nachgeladen, dass man kaum noch an alle Infos kommt wenn man "nur den Quellcode" hat.

    Im Prinzip ist der "richtige" Weg grundsätzlich NICHT im Browser irgendetwas per Maus anzuklicken, sondern so weit es geht nur Text zu verarbeiten bis man ans Ziel kommt. Hast du mal versucht die Webseite mit einem Textbasierten Browser zu öffnen? Das ist ggf. auch nicht super, aber vielleicht findet so ein Browser (der üblicherweise auch sehr schnell und leichtgewichtig ist) deinen Text auch ohne Mousehover (je nach nachlademethode und je nach Textbrowser).


    Da ich mich mit Webseiten usw. nicht auskenne kann ich nicht wirklich helfen. Die idee mit dem Textbrowser kam mir spontan, vielleicht ist die auch Unfug, Versuch macht Klug :)


    lg

    M

    Sowas ähnliches ist mir auch schonmal passiert. Da hing es aber nicht mit AutoIt zusammen, sondern mit irgendeiner anderen Seite (kann mich nicht mehr erinnern). Hatte einen riesen Beitrag geschrieben und anschließend ausversehen die eine seitliche Maustaste meiner Maus gedrückt die dem "Zurück Button" entspricht, sodass ich auf die vorherige Seite zurückgeleitet wurde. Alles futsch...


    Seitdem schreibe ich alles wichtige in Word (online) oder einem beliebigen anderen Onlinedienst (z.B. auch Google Docs) vor, da speichert es automatisch jede Änderung ohne mein Zutun und wenn ich ausversehen die Seite zumache, der Strom ausfällt oder irgendwas anderes dummes passiert ist alles geschriebene noch da.


    Blöde Sachen passieren hin und wieder, da ist niemand wirklich sicher ;(


    lg

    M

    Ein kleiner Tip zum EventMode: Wenn du keine Lust hast für jeden Button eine eigene Funktion zu schreiben kann man auch eine übergeordnete Funktion für alle Buttons (z.B. "Gui_Button_Event") registrieren und innerhalb dieser Funktion via "Switch @GUI_CtrlId" bestimmen welches Ctrl man verwalten möchte (und dann die Aktionen aus Gui_button_start/stop ausführen). Das ist manchmal sinnvoll wenn man den Überblick behalten will und die Funktionen allesamt sehr klein sind, sodass es sich nicht lohnt 20 Einzeiler-Funktionen zu haben. Aber das entscheidet im Endeffekt jeder für sich selbst :)


    lg

    M

    Hah, das ist ja super ^^


    Da fühle ich mich gleich schlecht, dass ich soetwas ähnliches in der SB nachgefragt habe, ich wollte damit nicht veranlassen, dass mir jemand die Arbeit abnimmt, sondern nur nachfragen ob es sowas gibt :S


    Vielen Dank ;)


    lg

    M

    Vor langer Zeit habe ich mal eine Funktion gebastelt die einen String -> Array verwandelt (und umgekehrt). Dabei wird (nahezu) jeder Datentyp unterstützt. Man kann also z.B. ein Array aus Arrays vom Typ [String, float, int, Filepath, int int] haben und daraus einen einzelnen String machen, bei der rückumwandlung werden die Datentypen auch wiederhergestellt (also es ist nicht alles "String", sondern ehemalige ints bleiben ints).


    Ich weiß nicht genau was du vorhast, aber ich selbst nutze diese Funktion ziemlich oft um Sachen auf der Festplatte zwischenzuspeichern. Dann hat man im Skript ein großes Array das alles relevante enthält und dieses schreibt und liest man bei Bedarf auf die Platte. Der hierbei entstehende String ist aber NICHT für Menschen nachvollziehbar, man kann also nicht von Hand darin herumschreiben.


    _ArrayToStringEx


    lg

    M

    Unter der Annahme, dass das "perfekte Demokratie" ist, ist diese Aussage tatsächlich nicht allzufalsch. Was mich stört ist folgendes: Es gibt sagen wir mal 10 Millionen Zitate von irgendwelchen wichtigen Leuten aus der (teils fernen) Vergangenheit. Es wurde vermutlich jede beliebige potentiell mögliche Zukünftige "Version" einer Präsidentschaft vorausgesagt (ich nenne das mal "Version" weil mir kein guter Begriff dafür eingefallen ist. Es geht hier um die "Art" der Regentschaft, also ein Schauspieler, ein Bauer oder ein Holzkopf, oder oder oder). Es ist vollkommen egal wer wann wo wie und warum gewählt wird, irgendwer innerhalb der letzten 200 Jahre hat es vorhergesagt, und dank Internet ist es heutzutage möglich effizient nach solchen Zitaten zu suchen, sodass man für jedes beliebige Ereignis eine passende Vorhersage findet, sofern man die Zeit investiert ein bisschen nachzuforschen.


    Ich hoffe das war verständlich^^


    M