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:
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")
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)
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