Beiträge von Sven-Seyfert

    Hallo Mars,

    vielen Dank für die Erläuterungen :) . Was den Scope angeht verhält sich AutoIt wirklich etwas seltsam, im Vergleich mit anderen Sprachen, aber ich kann damit leben. Sehr gut war auch der Tipp mit den diagonalen Bewegungen mittels Sqrt( 2 ). Habe ich in meinem Game gleich untergebracht. Die Fragen die ich hier zu GDI+ usw. stelle, sind zumeist kleine Bausteine auf dem Weg ein Spiel sinnvoll, refaktorisiert und erweiterbar zu erstellen. Wird mich sicherlich in Zukunft auch noch eine ganze Weile beschäftigen.

    Merci auch für den Tipp mit dem Enums. Mir war nicht bewusst, dass ich solche in AutoIt verwenden kann bzw. das es sie gibt - super! Was die Verschachtelung angeht (auf dein Beispiel bezogen) kraust es micht schon ein wenig ;) , jedoch sehe ich mir es mal nach und nach durch und refaktorisiere so gut ich kann. Die größte Hürde ist mein Anspruch die meisten Objekte dynamisch aufzubauen, zu laden und sie zu nutzen ... Assign(), Eval(), Execute() etc.

    Ich komme sicherlich demnächst wieder mit einer Frage um die Ecke - aber falls dieses Projekt irgendwann mal zeigbar sein wird, steht Mars, UEZ und noch ein paar weitere Helfende in den Credits!

    Danke für die Unterstützung und die Erläuterungen.
    Sven

    Hallo ihr beiden,

    vielen Dank dir Mars für deine konstruktive Kritik :) und die Hilfe an sich. Habe deine vier angesprochenen Empfehlungen berücksichtigt und meinen post #1 Code seitig aktualisiert. Ich gehe davon aus, dass dies nun so passt, wie du erwarten würdest (hoffentlich). Ehrlich gesagt muss ich zugeben, dass die Umstellung von Local zu Global für mich wenig Sinn macht, da ich bisher dachte, dass außerhalb von functions bspw. sowieso ein globaler Kontext (auch mit Local) gegeben ist - aber gut, wieder was gelernt!

    Dir natürlich ebenfalls vielen Dank UEZ . Die Variante mit _GDIPlus_PathIsVisiblePoint habe ich mir von dir im engl. Forum angeschaut, aber wie du bereits selbst erwähntest, habe ich den Gedanken dies so zu machen verworfen und die "einfacherer" Variante laut Vorschlag Mars umgesetzt. Danke aber für die Ergänzung wie es über paths funktionieren würde.

    Übringens werde ich zukünftig keine memory leaks mehr erzeugen, so wie ihr beide direkt ermahnend darauf hin gewiesen habt :D .

    Dankeschön für die Unterstützung!

    Sven

    Hallo Community,

    ich habe bereits eine Kollisionserkennung für ein GDI+ Spiel, an dem ich noch eine ganze Weile dran sein werde, erstellt. Jedoch möchte ich meine eigene Erkennung (leider viel zu komplex und nicht gerade dynamisch) durch die Möglichkeiten mit _GDIPlus_PathIsVisiblePoint() ersetzen. Auf der Suche nach passenden Beispielen bin ich über einen Thread im englischen Forum von UEZ gestoßen, den ich nun (den Code daraus) für meine Bedürfnisse angepasst habe.

    Leider tritt auf einer bestimmten Höhe (Y Pos) für die links --> rechts Bewegung oder auch für die rechts <-- links Bewegung keine Kollision auf. Warum?

    Die Hintergründe der beiden Bilder sind nur zur Darstellung wo die Grenzen der Vierecke sind. Die eigentliche Kollision bezieht sich auf das rote Viereck. Der Player soll nicht in diesem Bereich eintreten können (Bewegung stop).


    Danke für Vorschläge, Tipps und Hilfe - ich bin dankbar!

    Sven

    [Solved] Finale Lösung:
    Danke der Community.

    Bilder

    • player01_01.png
    • tree01_01.png

    Falls du nicht in die SB schaust: Großes Lob an Dich. Das hier ist ein Vorbildlicher H&U Thread in welchem das Problem sauber beschrieben, mit Beispielskript und Bildchen versehen und anschließend eine Lösung für jeden zugänglich gemacht wurde. So sollte ein guter H&U Thread aussehen :)


    lg

    Mars & Musashi

    Hallo Mars, hallo Musashi,


    habe nun extra ins SB Archiv geschaut - Dankeschön! Solch ein Lob freut mich natürlich.
    Aus meiner Sicht gab es auch keinen einfacheren/deutlicheren Weg Mißverständnisse zu minimieren.


    Nun zu dir UEZ :)
    Ebenfalls vielen Dank! Super Lösungsvorschlag!
    Das du dich im EN Forum gewundert hast (... and I'm wondering why the solution #2 works properly for him!?!?.), warum dies für mich bereits reicht, bitte ich zu entschuldigen.

    Hatte im Post #9 (DE) geschrieben:

    Danke allen Helfenden. Der transparente GUI Hintergrund ist nun vorhanden. Das die PNGs sich noch überlappen löse ich dann mit einem GDI+ Buffer System.

    Jedoch hilft mir dein Ansatz/Lösungsvorschlag viel mehr :) .

    Bis zur nächsten Frage dann, klasse Community!

    Sven

    Okay, gelöst.

    Danke allen Helfenden. Der transparente GUI Hintergrund ist nun vorhanden. Das die PNGs sich noch überlappen löse ich dann mit einem GDI+ Buffer System.

    Problem war:

    _WinAPI_SetLayeredWindowAttributes( $oMain, $vGuiBkColor, 255 )
    muss nach

    _GDIPlus_BitmapCreateHBITMAPFromBitmap( $hImage )

    aufgerufen werden, damit der GUI Hintergrund transparent wird. Denn die GDI+ Funktion setzt erneut den Background der GUI.

    Im Post #1 füge ich den korrekten Code nochmals ein, damit bei Interesse man dies nachvollziehen kann. Danach schließe ich den Thread.

    Danke,
    Sven

    Hallo nochmal Zeitriss,

    entschuldige, ich habe dir Unrecht getan. Generell müsste es mit WS_EX_LAYERED funktionieren, ja. Habe diverse andere Skripte mal versucht und da geht es mit der GUI Transparenz. Nur eben bei diesem Skript irgendwie gerade nicht. Wenn ich nach GUISetState() ein Sleep( 5000 ) bspw. einbaue, sieht man, dass es mit der Transparenz funktioniert.

    Nach der Zeit wird diese Eigenschaft durch irgendeinen Aspekt wieder überschrieben und ich habe wieder ein GUI Hintergrund. Na mal sehen, dass bekomme ich schon raus.

    Melde mich sicherlich nochmals hier, um möglichen Interessenten etwas für die Nachwelt zu hinterlassen ;) .

    Nur weil man an einigen Stellen Arrays verwenden kann um paar Zeilen zu sparen, sollte man ab und zu darauf verzichten um die Lesbarkeit des Codes zu gewährleisten oder die dahinterliegende Semantik schneller nachvollziehen zu können.


    Sven-Seyfert du solltest noch eine Abfrage einbauen, ob der Mausklick im Fenster liegt oder nicht. Wenn du außerhalb des Fensters klickst, crasht dein Script.

    Hallo Alpines,

    ja ganz genau, dies ist einer der Punkte um den es mir beim Refaktorisieren, Richtung Clean Code bspw. geht. Danke für die Erläuterung in anderer Ausdrucksweise :) .

    Was den Fenster-Crash angeht, habe ich dies bereits gefixed, ist mir auch aufgefallen - merci!

    Darf man fragen was das für Empfehlungen sind und wo man diese nachlesen kann?

    Natürlich darf man fragen: Bspw. in Clean Code by Robert C. Martin, näher im Zusammenhang mit readability und structured handover in a team. Nicht falsch verstehen, geht nicht im speziellen um Arrays. Für Skriptsprachen sind viele Empfehlungen auch gar nicht vollends umsetzbar. Ich möchte aber keine Grundsatzdiskussion führen müssen oder diese anleiern oder so.

    Mir ging es in erster Linie nur um die Transparenz der PNG Bilder auf der GUI, welche nicht wirklich transparent sind - warum nicht?

    Danke für weitere Vorschläge, Tipps und Hilfe.

    Sven

    Hallo Zeitriss,

    vielen Dank für deine Hinweise. Leider schade, dass du offensichtlich es nicht versucht/getestet hast. Wenn ich die GUI mit dem Style erstelle, habe ich noch immer das gleiche Verhalten (keine Besserung). Habe den Code und die Images extra zu Verfügung gestellt, damit man direkt damit probieren kann. Aber dennoch Danke.

    Was das Buffer System angeht, wollte ich dies nicht extra für den kleinen MapEditor, den ich da baue, einführen. Wenn es aber nicht anders geht, muss ich wohl. Zu deiner Anmerkung mit den Stellen, die besser Arrays sein könnten danke ich dir. Ich habe das Skript noch nicht refactored, aber werde es dann dabei berücksichtigen.

    Leider wiedersprechen Arrays ein Stück weit verschiedener Clean Code Empfehlungen, welche ich umzusetzen bemüht bin.


    Danke für weitere Vorschläge, Tipps und Hilfe - ich bin dankbar!

    Sven

    Hallo Community,

    ich habe ein Problem wenn ich ein mit GDI+ geladenes Bild (*.png), auf der GUI, auf eine andere Position ziehe (drag). Wenn ich das nächste Bild (von insgesamt drei) in die unmittelbare Nähe des ersten gezogenen Bildes ziehe, habe ich einen Überlappungseffekt, der nicht transparent ist, wie ich ihn gern hätte.

    Das animierte GIF sollte hoffentlich mein Problem weiter erklären (wie auf GitHub).

    Warum sind die GDI+ PNG Bilder nicht transparent auf der GUI?

    Ich möchte nicht unbedingt ein Buffer System zur Darstellung einsetzen oder muss ich dies?

    Danke für Vorschläge, Tipps und Hilfe - ich bin dankbar!
    Sven

    [Solved] Finale Lösung:

    Danke der Community und besonders UEZ und @argumentum (EN Forum).

    Bilder

    • tree01_01.png
    • tree02_01.png
    • tree03_01.png

    Hallo zusammen,


    hier also die durch @AspirinJunkie angeregte, für mich praktikable, Lösung.


    INI (Beispiel.ini):

    [Sektion1]
    Obstsorte1=Apfel
    Obstsorte2=Birne
    Augenfarbe=Grau
    Add1=35


    [Sektion2]
    Key1=Value1
    Key2=Value2
    Schlüssel1=Wert1
    Schlüssel2=Wert2
    Add2=15

    Skript:

    ; ------------------------------------------------------------------------------
    ; idea: by "AspirinJunkie" (http://www.autoit.de)
    ; note: this is a version without exception handling
    ; ------------------------------------------------------------------------------
    ; read INI file in a Dictionary[Dictionary] structure
    Func _iniToDict( $sIniPath )
    Local $aIniSections = IniReadSectionNames( $sIniPath )
    Local $oDictRet = ObjCreate( 'Scripting.Dictionary' )


    For $i = 1 To $aIniSections[0] Step 1
    Local $oDictSec = ObjCreate( 'Scripting.Dictionary' )
    Local $aIniSection = IniReadSection( $sIniPath, $aIniSections[$i] )


    For $j = 1 To $aIniSection[0][0] Step 1
    $oDictSec( $aIniSection[$j][0] ) = $aIniSection[$j][1]
    Next


    $oDictRet( $aIniSections[$i] ) = $oDictSec
    Next


    Return $oDictRet
    EndFunc


    ; get dict
    Global $oIni = _iniToDict( 'Beispiel.ini' )


    ; whole section in variables
    $sSection1 = $oIni( 'Sektion1' )
    $sSection2 = $oIni( 'Sektion2' )


    ; example, use the values of section variables
    ConsoleWrite( $sSection1( 'Obstsorte1' ) & @CRLF )
    ConsoleWrite( $sSection1( 'Augenfarbe' ) & @CRLF )
    ConsoleWrite( $sSection2( 'Key2' ) & '|' & $sSection2( 'Schlüssel1' ) & @CRLF )
    ConsoleWrite( $sSection1( 'Add1' ) + $sSection2( 'Add2' ) & @CRLF )
    ; ------------------------------------------------------------------------------

    Damit kann ich lesbar die Variablen aus der INI sehen (als Concat-Variable) und kann sie zusätzlich genau nur dort verwenden, wo ich sie sprechend benamt verwenden möchte. Danke nochmals an @AspirinJunkie, aber auch an alle anderen.


    Damit ist der Thread für mich erledigt.


    Einen angenehmen Tag noch!


    UserIsGrateful 【ツ】

    Hallo zusammen,


    @AspirinJunkie:
    Bin gerade nochmals deinen Ansatz durchgegangen. Ja das ist eigentlich genial! Ich benenne alles sprechend und kann dann einfach die ganze Sektion in eine Variable packen, dann die nächste Sektion in eine weitere usw. Damit kann ich dann mit dem Variablennamen und dem eigentlichen INI-Key-Namen (genau wie in der INI dargestellt) eine neue Variable einsetzen, die ich dann verwende.


    Ich bereite mal ein Beispiel vor, damit alle verstehen was ich meine.


    Danke - das ist es!


    Einen angenehmen Tag noch!


    UserIsGrateful 【ツ】

    Hallo zusammen,


    @AspirinJunkie:
    Zum Post #2 - werde mich mal mehr mit den Dict-Objects beschäfftigen, Danke für den Tipp. Zum Post #6 - ja gar nicht schlecht, coole Möglichkeiten die sich da aufbieten (aktuell jedoch nicht meine favorisierte Lösung.


    @Bioshade:
    Hatte im Post #1 erwähnt, dass ich genau eben mit Assign, Eval und Co. gearbeitet habe. Mein Ansatz war fast der Gleiche wie du ihn vorschlägst. Nur das leider auch in der Hilfe steht, dass bei Assign keine Arrays verwendet werden können. Vielen Dank aber für deinen guten Rat und deine Einschätzung zur Verwendung und Lesbarkeit! Finde auch, dass ich wahrscheinlich bei den sprechenden Namen (echten Variablen bleibe).


    @autoBert:
    Vielen Dank auch dir, dass muss ich mir mal genauer anschauen.


    @water:
    Vielen Dank dir natürlich auch. Es sind gute Argumente nur eines spricht meiner Ansicht nach stark gegen diese Variante: Was wenn in der jeweiligen Sektion ein neues Key-Value-Pair nicht unten dran sondern mitten rein eingefügt wird. Dann müsste ich alle Stellen anpassen, die von dieser Sektion betroffen sind.


    Insgesamt gesehen, vielen Dank! Habe mich noch nicht entschieden und auch noch nicht alles probiert, aber ich würde mein Feedback dazu noch geben, wenn ich einen für mich praktikablen Ansatz umgesetzt habe.



    Vielen Dank für etwaige Unterstützung (Ideen, Verbesserungsvorschläge, Kritik und Zustimmung).



    Einen angenehmen Tag noch!



    UserIsGrateful 【ツ】

    Hallo werte Community,



    ich bitte euch um Hilfe bzw. Unterstützung, da ich leider nicht mehr weiter komme. Vielleicht ist es auch einfach gar nicht möglich, belehrt mich doch bitte eines Besseren ;) .


    Problemstellung:
    Ich möchte aus einer Standard-INI-Datei die bspw. wie folgt aufgebaut ist (Achtung nur ein Beispiel)...

    [Sektion1]
    Obstsorte1=Apfel
    Obstsorte2=Birne
    Augenfarbe=Grau


    [Sektion2]
    Key1=Value1
    Key2=Value2
    Schlüssel1=Wert1
    Schlüssel2=Wert2
    ... flexibel den Key- oder eben den Valuenamen als Variable erzeugen lassen (dynamisch eben). Hintergrund ist der, dass ich nicht für jeden einzelnen Eintrag etwa folgendes Konstrukt nutzen möchte, um den Variablennamen genauso zu benennen (bis auf das "$s" als Prefix) wie es in der INI als Key entsprechend steht.

    Local $sObstsorte1 = IniRead( 'Beispiel.ini', 'Sektion1', 'Obstsorte1', '' )
    Local $sObstsorte2 = IniRead( 'Beispiel.ini', 'Sektion1', 'Obstsorte2', '' )
    Local $sAugenfarbe = IniRead( 'Beispiel.ini', 'Sektion1', 'Augenfarbe', '' )
    ...
    Mir ist bewusst, dass ich mit IniReadSection die kompellte Sektion in ein 2D Array einlesen kann und damit hätte ich auch die Werte, die ich bräuchte um die Values dann entsprechend im Programm sinnvoll zu nutzen. Mir kommt es aber auf gut lesbaren Code (CCD) an (da weitere Personen die Implementierung verstehen und upgraden müssen). Wodurch ich gern die sprechenden (dynamischen) Variablennamen nutzen würde, anstatt der Array-Konstruktion.
    Hier nochmals deutlicher:

    ; bevorzugt hätte ich gern folgende Variablen dynamisch deklariert und gesetzt (aus der INI heraus zur Laufzeit)
    Local $sObstsorte1
    Local $sObstsorte2
    ...


    ; anstatt mit IniReadSection so was nutzen zu müssen
    Local $aSektion1[1][1]
    Local $aSektion1[2][1]
    ...


    ; evtl. sollte es dynamisch so angelegt sein, dass ich via For-Schleife bspw. die INI durchgehen kann und so die dynamischen Variablen; erzeugen kann, dessen Inhalt (auch aus der INI, als Value eben) ebenfalls bereits den dynamischen Variablen zugewiesen wird
    Nun vielleicht nur noch der Hinweis, dass ich mich mit Assign, Eval und Execute dazu beschäftigt habe, aber leider keinen Erfolg damit erzielen konnte. Ich bitte euch mir Tipps zu geben oder einfach eure Einschätzung ob es überhaupt machbar ist. Falls ich detailierter oder auf einen anderen Weg mein Problem bzw. Wunsch beschreiben soll, dann sagt bitte einfach Bescheid, Danke.


    Vielen Dank für etwaige Unterstützung (Ideen, Verbesserungsvorschläge, Kritik und Zustimmung).


    Einen angenehmen Tag noch!


    UserIsGrateful 【ツ】

    Hallo EGuhrm, hallo RogerSt 【ツ】 ,



    vielen Dank EGuhrm für die Links usw. Die Seiten hatte ich mir ebenfalls bereits angeschaut, wollte jedoch eine Meinung aus der Community - hätte ja vielleicht Erfahrungswerte geben können.


    Nachdem ich nun einige Tools ab und an mal getestet habe, bleibt leider das gleiche Ergebnis - keine Erkennung, trotzdem Danke für die Tipps ;) .


    Auch dir RogerSt danke ich, denn wenn dieser Ansatz tatsächlich auch für mein Vorhaben funktioniert, wäre das genial. Vielleicht baue ich dann aus C# heraus ein für AutoIt ansteuerbares Framework, welches ich für mehrere Projekte dann verwenden kann - mal schauen wie es wird.


    Vielen Dank schon mal :) !


    Vielen Dank für etwaige Unterstützung (Ideen, Verbesserungsvorschläge, Kritik und Zustimmung).
    Einen angenehmen Tag noch!



    UserIsGrateful 【ツ】

    Hallo Community 【ツ】 ,



    hoffentlich bin ich mit dieser Frage in der richtigen Kategorie (falls nicht, dann bitte verschieben - Dankeschön).


    Ich möchte bei einem in C# geschriebenen Tool, welches mit "DevExpress" bzw. mit entsprechenden Grids usw. via Visual Studio implementiert wurde, Data Driven Testing durchführen. Unter anderem möchte ich gern AutoIt (zumindest für die Oberflächentests) nutzen. Denn dafür habe ich entsprechende Libraries und Wrapper erstellt, mit denen sowas eigentlich recht gut machbar ist und die Wartung nicht den Rahmen sprengt.


    Doch leider erkennt das "AutoIt v3 Window Info" Tool bis auf den Titel der Anwendung kein einziges Control bzw. Steuerelement. Hat jemand evtl. mit DevExpress diesbezüglich Erfahrung bzw. gibt es sinnvolle Alternativen, zum mitgelieferten Spy-Tool (AutoIt v3 Window Info)? Es sollte sich um Freeware handeln oder zumindest nicht hunderte von Euros kosten. Das Tool "Winspector" (war mal ein Tipp von BugFix vor einiger Zeit), hilft mir übrigens nicht wirklich.


    Zusammenfassung:
    Ist euch ein Spy-Tool bekannt, welches mit DevExpress Control umgehen kann und was dann auch per AutoIt entsprechend genutzt werden kann?


    Vielen Dank für etwaige Unterstützung (Ideen, Verbesserungsvorschläge, Kritik und Zustimmung).
    Einen angenehmen Tag noch!



    UserIsGrateful 【ツ】

    Hallo Bioshade, hallo Community 【ツ】 ,


    vielen Dank für eure Antworten und Ideen. Ich habe auf Grund von anderen Prioritäten dieses Thema aus den Augen verloren (verlieren müssen). Trotzdem war es lehrreich und im Post #7 gibt es ja zum Thema auch eine Teillösung (falls jemand ein ähnliches Szenario mal haben sollte).


    Ich werde den Thread schließen, da ich auch in absehbarer Zeit nicht dazukommen werde, mich darum zu kümmern. Evtl. werde ich das Problem nochmals in C# angreifen oder wie auch immer. Danke und bis später, zur nächsten kniffligen Frage :D .


    Vielen Dank für etwaige Unterstützung (Ideen, Verbesserungsvorschläge, Kritik und Zustimmung).
    Einen angenehmen Tag noch!


    UserIsGrateful 【ツ】

    Hallo Oscar 【ツ】,



    auch dir vielen Dank für dein Skriptbeispiel bzw. deine Lösung, merci. Es geht deutlich schneller als mein Ansatz und sah auf dem erstem Blick auch ganz gut aus und lief sehr gut ( RegEx hast du ja anscheinend bestens drauf #neid :) ).


    Aber:
    Als ich den StartTAG "w:body" in "w:body1" und den dazugehörigen EndTAG in "w:body2" umbenannt habe (siehe Post #7), brachte mir deine Lösung die richtigen Ausgaben. Jedoch wenn ich einen EndTAG entferne oder einen hinzufüge, kommt "XML OK? True" zurück bzw. wird ausgegeben. Daher glaube ich, dass es noch nicht einwandfrei funktioniert!


    Bitte nutze mal mein Skript vorher (Post #7), um die "Formatted.xml" (aus der "Unvalid.xml") zu generieren, damit wir die gleiche Ausgangslage haben und lass dann nochmals dein Skript mit einem zusätzlichen EndTAG (welchen du in die generierte "Formatted.xml" einfügst) laufen. Nun solltest du ebenfalls -> alles Okay zurückbekommen, was ja falsch ist.


    Mein Ziel:
    1.) Ich möchte die Zeilennummer und TAGName, der nicht passenden Start- bzw. EndTAGs erhalten, bei dem entweder kein EndTag zum StartTAG vorhanden ist oder umgekehrt (also kein StartTAG zum EndTAG).
    2.) Ich möchte irgendwie sicherstellen, dass strukturell (wenn allen StartTAGs je ein EndTAG zugeordnet ist) die Anordnung passt.


    Beispiel:
    Hier stimmt bspw. "1.)", "2.)" jedoch nicht:


    <TAG1>
    <TAG2>
    <TAG3>
    ...
    ...
    ...
    </TAG1>
    </TAG3>
    </TAG2>


    Danke weiterhin an alle mit Miträtselnden!


    Vielen Dank für etwaige Unterstützung (Ideen, Verbesserungsvorschläge, Kritik und Zustimmung).
    Einen angenehmen Tag noch!



    UserIsGrateful 【ツ】

    Hallo Make-Grafik 【ツ】, hallo Community 【ツ】,



    zunächst mal vielen Dank für deinen Ansatz. Werde diesen nochmals durchgehen und evtl. auch verwenden, doch zunächst (aus Zeitgründen) habe ich eine Lösung mit Arrays geschrieben (dies fiehl mir auf die Schnelle leichter) ;) .


    Meine Lösung:


    Hinweis:
    Eine Ausgabe kann man durch Veränderung der "Unvalid.xml" bspw. bekommen. Dort einfach den öffnenden TAG "w:body" durch "w:body1" und den schließenden TAG durch "w:body2" ersetzen. Somit bleibt die Anzahl (zwischen Start- und EndTAGs) trotzdem gleich, aber es sind Unterschiede.


    Aber:
    Dadurch habe ich nun festgestellt, dass es gar keine Differenzen zwischen Start- und EndTAGs gibt. Also es gibt genauso viel Start- wie EndTAGs. Ausgenommen die Zeilen (in der generierten "Formatted.xml.txt"), die nicht den folgenden Aufbau haben:
    <TAG/> oder <TAG>STRING</TAG> (diese lasse ich gleich bei der Prüfung weg, da diese eindeutig sind.


    Hmmm ... es ist nun also so, dass ich kontrollieren muss, ob die Anordnung der TAGs in der Datei richtig ist. Also ob zu dem jeweiligen StartTAG auch ein richtiger EndTAG existiert und dieser an der richtigen Stelle in der XML steht.


    Wie mache ich dies nun #grübel #grübel #grübel ... ?


    Vielen Dank für etwaige Unterstützung (Ideen, Verbesserungsvorschläge, Kritik und Zustimmung).
    Einen angenehmen Tag noch!



    UserIsGrateful 【ツ】

    Hallo BugFix 【ツ】,



    erstmal ja, ich stimme dir zu das MS wiedermal einen schönen Bockmist gebaut hat, welcher sicherlich sogar gewollt war! Naja, nun aber zu deinen Hinweisen (merci dafür).



    Im Post #1 habe ich einen MS-Support-Link hinterlegt, welcher die Problemlösung über eine FixIt-Exe von MS ermöglicht. Damit habe ich die *.docx-Datei auch wieder lauffähig bekommen. Trotzdem möchte ich diese Aufgabe lieber selbst erledigen und ein Tool dafür schreiben. Konkret tritt dieser Fehler in einem *.docx-Word-Dokument nur in der "document.xml" auf. Mir ist diese Fehlerstellung auch nicht erst seit gestern bekannt, da ich manuell schon einige Word-Dokumente erneut gängig machen musste. Über manuellen Abgleich der TAGs -> nun soll es ein Tool werden.



    Die Datei "Unvalid.xml.txt" (ehemals "document.xml") sieht repariert so aus, dass diese ordentlich formatiert und mit passenden Start- und EndTags (Anzahlen stimmen) versehen ist. Dazu siehe Anhang:
    - "RepairedByMSFixIt.xml.txt" (ehemals "document.xml" aus der reparierten *.docx)



    Das "Wie" ist die Frage:
    Mir geht es darum, wie ich sinnvoll zu dem Ergebnis komme, welches das Tool von MS produziert hat. Bzw. kann ich somit einen generellen Check von XML-Dateien machen (zumindest für Start- und EndTags). Nur eben das Herausfinden der Position und welche(n) TAG(s) es betrifft, ist nicht so einfach.



    Vielen Dank für etwaige Unterstützung (Ideen, Verbesserungsvorschläge, Kritik und Zustimmung).
    Einen angenehmen Tag noch!



    UserIsGrateful 【ツ】