1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. tapester

Beiträge von tapester

  • BricsCAD UDF - Automatisierung von BricsCAD

    • tapester
    • 7. Juli 2017 um 16:53

    Hallo, :)

    es ist ewig her seit ich mit Auto-It gearbeitet habe. Und prompt finde ich hier (wieder mal) einen Hinweis. :)

    Wir nutzen BricsCAD eigentlich nur um DXF Dateien anzusehen und ggf Kleinigkeiten daran zu ändern (z.b. in einem anedern Format zu speichern). Meist extrahieren wir über ein Zusatztool nur die Texte heraus, um diese zu übersetzen und dann wieder einzulesen.

    Jetzt habe ich von einem Kunden >500 Dateien (in 10 Verzeichnissen) bekommen, die aber bereits mehrsprachig sind. Und muss die nicht benötigten Layer löschen.
    Die Layer die zu entfernen sind haben immer die selben Namen, aber nicht jede Datei hat immer alle Layer.

    Layernamen sind:
    Sprache_Deutsch
    Sprache_Polnisch
    Sprache_Rumaenisch
    ....

    Der Layer Sprache_Deutsch ist immer vorhanden, die anderen nicht. Ich kann natürlich jede Datei öffnen und die Layer manuell löschen. Aber bei der Dateianzahl wäre ich ein paar Tage unterwegs. :)

    Kannst Du uns hier unterstützen? Würde mich über eine PN freuen.

    Herzlichen Gruß aus dem Schwarzwald (bald Leipzig)
    Anton

  • Strings in Quellcode austauschen (mit RegEx)

    • tapester
    • 29. Juni 2010 um 10:01

    puh.. der Chef ist erstmal in Urlaub, da müssen Projekte für "fame and glory" warten. Ich mache aber bald wieder weiter.

    Anton

  • Strings in Quellcode austauschen (mit RegEx)

    • tapester
    • 15. Juni 2010 um 09:14

    Hmm.. scheint so rum besser zu sein, werde ich später versuchen und auch gleich auf zeilenweises lesen ändern. Hatte meinen letzten Beitrag gerade geändert als Du deinen geschreiben hattest, Zeile 9 mit dem nicht geänderten Text war wg. _StringBetween.

    Anton

  • Strings in Quellcode austauschen (mit RegEx)

    • tapester
    • 15. Juni 2010 um 08:46

    Das Problem mit Zeile 9 liegt am

    Code
    $aLine = _StringBetween($aFile[$i], 'L"', '"')


    Da der Quellcode hier den String nicht mit einem ", beendet hatte.

    Ich hatte versucht die Anzahl der zu überprüfenmden Zeilen zu minimieren indem ich Strings suche die in [L"...",] eingeschlossen sind. Das scheint aber nicht optimal zu sein. Ändere ich den _StringBetween aber auf

    Code
    $aLine = _StringBetween($aFile[$i], '"', '",')


    Dann hagelt es nur noch die Fehlermeldungen. Das scheint für den RegEx zuviel zu sein..?!

    Den momentanen RegEx habe ich noch nicht ganz verstanden, ich sehe nicht ob/wo er den String durch " begrenzt. Müsste er nicht folgendes abfragen (auch um den vorherigen _StringBetween einzusparen): Suche String der mit einem " beginnt, ein oder mehrere "\x" mit folgenden 2-3 stelligen beinhaltet und der mit einem " beendet wird? Uh.. das war jetzt nicht"RegEx mäßig ausgedrückt.. :)

    Guten Morgen aus Lubu :)
    Anton

  • Strings in Quellcode austauschen (mit RegEx)

    • tapester
    • 15. Juni 2010 um 08:46

    Das Problem mit Zeile 9 liegt am

    Code
    $aLine = _StringBetween($aFile[$i], 'L"', '"')


    Da der Quellcode hier den String nicht mit einem ", beendet hatte. Einen hätte ich also schon.. sigh

  • Strings in Quellcode austauschen (mit RegEx)

    • tapester
    • 15. Juni 2010 um 02:40

    Super, das letzte Codebeispiel hat funktioniert. Ich werde mich wohl oder übel doch intensiver mit RegEx auseinander setzen müsssen, auch wenn es das letzte Haupthaar kostet. Und ja, es müsste im Code natürlich ein chrW() sein da ich fremde Zeichensätze (hier z.B Kyrillisch) erwarte.

    Beim Lesen einer kompletten RC Datei (4900 Zeilen) treten aber dennoch zwei/drei Fehler auf: einmal wird ein einzelner (!) Wert "übersehen", einmal ganze Zeilen und an einer anderen Stelle bricht das Programm der folgenden Fehlermeldung ab.

    C:\Users\tape\Desktop\ZSK\rc2utf.au3 (29) : ==> Variable must be of type "Object".:
    For $j in StringRegExp($aFile[$i], "(?m)\\x([\da-f]+)(?!.*?\\x\1.*?)", 3)
    For $j in StringRegExp($aFile[$i], "(?m)\\x([\da-f]+)(?!.*?\\x\1.*?)", 3)^ ERROR

    Hier ist die "Musterdatei":

    Code
    CTEXT       	L"\x20\x20\x20\x20\x20\x20\x20\x20\x20\x44\x49\x50\x20\x43f\x435\x440\x435\x43a\x43b\x44e\x447\x430\x442\x435\x43b\x438\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20",IDST_TITEL,0,0,
    	CTEXT       	L"\x20\x20\x20\x20\x20\x20\x20\x20\x20\x44\x49\x50\x20\x43f\x435\x440\x435\x43a\x43b\x44e\x447\x430\x442\x435\x43b\x438\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20",IDST_TITEL,0,0,	
    	LTEXT       	L"\x412\x432\x435\x434\x438\x442\x435\x21\x20",IDST_EINGABEFEHLER,330,444,136,26,NOT 
                    	WS_VISIBLE
    	CONTROL     	L"\x412\x44b\x445\x43e\x434\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20",IDPB_ESC,"T8Pushbutton",
                    	WS_TABSTOP,410,497,380,47
    	CONTROL     	L"\x423\x441\x442\x430\x43d\x43e\x432\x43a\x430\x20\x438\x437\x43c\x435\x43d\x435\x43d\x438\x439\x20\x20\x20",IDPB_RETURN,"T8Pushbutton",
                    	WS_TABSTOP,10,497,380,47
    					IDS_MAX_DREHZAHL_PAILLETTEN L"\x41c\x430\x43a\x441\x438\x43c\x430\x43b\x44c\x43d\x430\x44f\x20\x441\x43a\x43e\x440\x43e\x441\x442\x44c\x20\x431\x43b\x435\x441\x442\x43e\x43a\x20\x20\x20\x20\x20"
    	CONTROL     	"0",IDPB_0,"T8PicPushbutton",WS_TABSTOP | 0x300,729,558,
                    	54,23
    	CONTROL     	"1",IDPB_1,"T8PicPushbutton",WS_TABSTOP | 0x300,650,558,
                    	54,23
    	CONTROL     	"DEL",IDPB_BACKSPACE,"T8PicPushbutton",WS_TABSTOP | 
                    	0x300,571,558,54,23
    Alles anzeigen

    In den Zeilen 1 und 2 wird der Wert "\x44" nicht gefunden/übersetzt, Zeile 9 wird nicht übersetzt und bei Zeile 13 bricht das Programm mit der obigen Fehlermeldung ab. Kommt da der Regex durcheinander??


    Bei den Zeilen 1 und 2 erhalte ich folgendes Ergebnis ("\x44" wird nicht übersetzt, in allen (5) Vorkommen in der Datei):

    Code
    CTEXT       	L"     	\x44IP переключатели      	",IDST_TITEL,0,0,
    	CTEXT       	L"     	\x44IP переключатели      	",IDST_TITEL,0,0,

    Zeile 9, ist unverändert

    Code
    IDS_MAX_DREHZAHL_PAILLETTEN L"\x41c\x430\x43a\x441\x438\x43c\x430\x43b\x44c\x43d\x430\x44f\x20\x441\x43a\x43e\x440\x43e\x441\x442\x44c\x20\x431\x43b\x435\x441\x442\x43e\x43a\x20\x20\x20\x20\x20"

    Das Problem aus Zeile 13 tritt in der großen Datei mehrfach auf, wenn ich dort jeweils das Komma am letzten Anführungszeichen entferne , dann geht es ohne Fehler weiter.

    Hier mal zur Ansicht, alle Vorkommen bei denen dieser Fehler auftritt:

    Code
    CONTROL     	"DEL",IDPB_BACKSPACE,"T8PicPushbutton",WS_TABSTOP | 
    	CONTROL     	"DEL",IDPB_BACKSPACE,"T8PicPushbutton",WS_TABSTOP | 
    	CONTROL     	"Cancel",IDPB_ESC,"T8Pushbutton",WS_TABSTOP,410,497,380,
    	CONTROL     	"Cancel",IDPB_ESC,"T8Pushbutton",0x0,470,497,320,47
    	CONTROL     	"Simuliere Kopfartwechsel",IDCB_KOPFART_WECHSEL,"Button",
    	CONTROL     	"Simuliere Stichartwechsel",IDCB_STICHART_WECHSEL,"Button",

    Und zu guter Letzt, einmal dat janze Programm.

    [autoit]

    #include <String.au3>
    #include <file.au3>
    #include <array.au3>
    #include <Constants.au3>

    [/autoit][autoit][/autoit][autoit]

    Dim $sDrive, $sDir, $sName, $sExt

    [/autoit][autoit][/autoit][autoit]

    ; Select file to convert
    $file = FileOpenDialog("Select RC file", ".\", "RC files (*.RC)", 1 + 2)
    If @Error Then
    MsgBox(4096, "Error", "No file(s) chosen")
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    ; create new file name based on the previous selected
    $aArray = _PathSplit($file, $sDrive, $sDir, $sName, $sExt)
    $sNewFile = $aArray[1] & $aArray[2] & $aArray[3] & "_utf.rc"

    [/autoit][autoit][/autoit][autoit]

    ; create new text file
    $newfile = FileOpen($sNewFile, 2+256)

    [/autoit][autoit][/autoit][autoit]

    Local $aFile = StringSplit(FileRead($file),@CRLF,3)

    [/autoit][autoit][/autoit][autoit]

    For $i = 0 to Ubound($aFile)-1
    $aLine = _StringBetween($aFile[$i], 'L"', '",')
    If @error Then
    FileWrite($newfile, $aFile[$i] & @CRLF)
    Else
    For $j in StringRegExp($aFile[$i], "(?m)\\x([\da-f]+)(?!.*?\\x\1.*?)", 3)
    $aFile[$i] = StringReplace($aFile[$i], "\x" & $j, ChrW(Dec($j)))
    Next
    FileWrite($newfile, $aFile[$i] & @CRLF)
    EndIf
    Next

    [/autoit]

    Ich vermute ein kleines Durcheinander beim RegEx, zumal es ja "fast immer" funktioniert.

    Gruß aus Ludwigsburg
    Zzzzzzz
    Anton

  • Strings in Quellcode austauschen (mit RegEx)

    • tapester
    • 14. Juni 2010 um 08:55

    n´morgen :)

    ja, sorry.. ich nehme an ich war um die Uhrzeit nicht klar beim Formulieren.

    Ich will in dem Text die Hex Zahlenwerte durch UTF tauschen, daher hatte ich die StringRegExReplace Funkion verwendet.

    Das finden der Zahlenwerte mit StringRegEx funktioniert mit dem von mir verwendeten Ausdruck, der selbe Ausdruck in StringRegExReplace liefert aber ein anderes Ergebnis.

    Oder anders: Bei "\x20" als String liefert mir StringRegEx die "20" in einem Array, soweit OK. Ich will die aber diese "20" ersetzen lassen durch z.B. ein chrW(20), also nehme ich dafür StringRegExReplace mit der selben RegEx., das ersetzt mir aber das "\x" und nicht die "20". Bin ich nun total auf dem Holzweg??

    Gruß aus Ludwigsburg :)
    Anton

  • Strings in Quellcode austauschen (mit RegEx)

    • tapester
    • 14. Juni 2010 um 04:15

    Hall, :)

    ich versuche in Resource Quelldateien Textstrings die Hex kodierten Unicode enthalten in normale Unicode Zeichen zu konvertieren.

    Dazu lese ich eine *.rc Datei ein, suche zeilenweise nach Texten (erkennbar am L" und ", für Anfang/Ende) und suche dann im gefundenen String nach Hexwerten (Anfang mit \x und Ende mit \x oder ",).

    Das Problem ist: verwende ich zum Suchen der Hexwerte StringRegEx werden alle Fundstellen richtig ins Array geschrieben, verwende ich zum Suchen/Ersetzen StringRegExpReplace dann wird der falsche Teil ersetzt.

    Hier ein als Beispiel Auszug aus einer RC Datei:

    Code
    CTEXT       L"\x20\x20\x20\x41f\x43e\x43b\x43e\x436\x435\x43d\x438\x435\x20\x433\x43b\x430\x432\x43d\x43e\x433\x43e\x20\x432\x430\x43b\x430\x20\x20\x20\x20\x20\x20\x5b\x413\x420\x410\x414\x5d",IDST_TITEL,0,0,
                    800,26
    CONTROL     "",IDFR_HW_BREMSE_RECT,"Static",SS_BLACKFRAME | NOT

    Im folgenden (StringRegEx) Beispiel wird der Teststring richtig zerlegt und finden alle Hexwerte

    [autoit]

    #include <array.au3>
    $sString = ' CTEXT L"\x20\x20\x20\x41f\x43e\x43b\x43e\x436\x435\x43d\x438\x435\x20\x433\x43b\x430\x432\x43d\x43e\x433\x43e\x20\x432\x430\x43b\x430\x20\x20\x20\x20\x20\x20\x5b\x413\x420\x410\x414\x5d",IDST_TITEL,0,0,'
    $aArray = StringRegExp($sString, '\\x(.*?)\\x', 3)
    _ArrayDisplay($aArray, "Titel")

    [/autoit]

    Im (StringRegExReplace) Beispiel wird der Teil um den Wert herum ersetzt!!

    [autoit]

    #include <array.au3>

    [/autoit][autoit][/autoit][autoit]

    $sString = ' CTEXT L"\x20\x20\x20\x41f\x43e\x43b\x43e\x436\x435\x43d\x438\x435\x20\x433\x43b\x430\x432\x43d\x43e\x433\x43e\x20\x432\x430\x43b\x430\x20\x20\x20\x20\x20\x20\x5b\x413\x420\x410\x414\x5d",IDST_TITEL,0,0,'
    $aArray = StringRegExpReplace($sString, '\\x(.*?)\\x', "kk")
    MsgBox(0, "tt", $aArray)

    [/autoit]

    Hier werden alle "\x" durch "kk" ersetzt!!!

    Das ganze sieht im Moment so aus:

    Spoiler anzeigen

    #include <String.au3>
    #include <file.au3>
    #include <array.au3>
    #include <Constants.au3>

    Dim $sDrive, $sDir, $sName, $sExt

    ; Select file to convert
    $file = FileOpenDialog("Select RC file", ".\", "RC files (*.RC)", 1 + 2)
    If @Error Then
    MsgBox(4096, "Error", "No file(s) chosen")
    Exit
    EndIf

    ; create new file name based on the previous selected
    $aArray = _PathSplit($file, $sDrive, $sDir, $sName, $sExt)
    $sNewFile = $aArray[1] & $aArray[2] & $aArray[3] & "_utf.rc"

    ; create new text file
    $newfile = FileOpen($sNewFile, 2+256)

    Local $aFile = StringSplit(FileRead($file),@CRLF,3)

    For $i = 0 to Ubound($aFile)-1
    $aLine = _StringBetween($aFile[$i], 'L"', '",')
    If @error Then
    FileWrite($newfile, $aFile[$i] & @CRLF)
    Else
    $aUTFChars = StringRegExpReplace($aFile[$i], '\\x(.*?)\\x', chrW('i'))
    FileWrite($newfile, "XXX" & $aUTFChars & @CRLF)
    EndIf
    Next

    Hmm.. ich versuche nun schon seit Stunden einen Weg zu finden, und vermute ich mache etwas bei den regEx falsch. Hat mir hier jemand einen Tipp? Bin ich mit StringRegEx/Replace auf dem Holzweg??

    Gruß aus Ludwigsburg
    Anton


    Zzzzzzzzz

  • Wie kann ich eine Textdatei im Zeichssatz Windows-1251 (Kyrillisch) lesen/schreiben

    • tapester
    • 9. Juni 2010 um 23:50

    ahh.. klappt.. wieder ein Stückchen weiter. Vielen Dank.
    Ich melde mich wenns fertig ist mit dem ganzen.

    Anton

  • Wie kann ich eine Textdatei im Zeichssatz Windows-1251 (Kyrillisch) lesen/schreiben

    • tapester
    • 9. Juni 2010 um 01:15

    Hallo :)

    ich versuche eine Textdatei in eine XML zu konvertieren. Die Textdatei ist mit dem Charset Windows-1251 gespeichert und enthält abwechselnd Deutsche und Russische Texte jeweils zeilenweise getrennt.

    Beispieltext (Auszug)
    --
    " OK "
    " Äà "
    " OK "
    " Äà "
    " OK "
    " Äà "
    ...
    ...
    --

    Zeilenweise einlesen/verarbeiten ist einfach, aber die Zeichensatzkodierung bringt mich um den Verstand. In der Dokumentation habe ich bisher nur einen Hinweis auf das Öffnen von UTF-8 Texten gefunden.

    Ziel ist es später, die Textdatei zu lesen und zwei XML (UTF-8) Dateien (Deutsch/Russich) zu schreiben, diese werden dann in Übersetzertools weiterverwendet.

    Hier mein kleines Beispiel: ich versuche zum Test eine Textdatei
    zeilenweise zu lesen und die Texte in einer msgBox auszugeben damit ich
    sehe kann was es für Änderungen in der Darstellung gibt.

    Spoiler anzeigen


    $file = "RUSSISCH.WBU"
    $sFile = FileOpen($file)

    ; Prüfen ob Datei lesbar
    If $sFile = -1 Then
    MsgBox(0, "Fehler", "Die Datei " & $file & " wurde nicht gefunden")
    Exit
    EndIf

    Local $aFile = StringSplit(FileRead($sFile),@CRLF,3)

    For $i = 0 to Ubound($aFile)-1
    MsgBox(64,"Inhalt von Zeile "&$i+1,$aFile[$i])
    Next

    Hat mir jemand eine Idee wo ich was dazu finde, oder einen Tip wie ich es machen kann?

    Herzlichen Gruß aus Ludwigsburg
    Anton

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™