Regulärer Ausdruck für StringRegExpReplace Umsetzung in AutoIt

sanni74

Lt. Junior Grade
Registriert
Aug. 2011
Beiträge
304
:confused_alt:
Boah, Hilfe, krieg die Kriese gerade. Ich versuch mich schon seit STUNDEN an der richtigen Form, ev. könnt ihr mir helfen, eigentlich sollte es doch nicht so schwer sein ....

Für eine Dateiformatänderung hab ich mit AutoIt und Hilfe nen kleines Progrämmchen gebastelt, soweit alles schick. Damit sollen Dateien umformatiert werden, hab ich eig. alles fertig; nur die eigentliche Umsetzung via StringRegExpReplace hapert.
Das einzige, was ich so die ganze Zeit nicht hinbekomme ist der reguläre Ausdruck.

alt:xyabcdeeff900123 klmN717.968 opqR453.375 123.456

Code:
$sText = StringRegExpReplace($sText, '(hier muss er rein)','ev. hier auch noch was') ;

neu:________NR900123 klmN717.968 opqR453.375 123.456 (_ steht für 8 Leerzeichen am Anfang)
Das soll StringRegExpReplace einfach von alt: zu neu: umsetzen. Kann mir bitte jemand den Ausdruck dazu geben ?
Das übernehmen von N und R nach vorne macht mich fertig ...:freak:
PS: die Leerzeichen am Anfang sind wichtig, aber die krieg ich zur Not hin
 
Zuletzt bearbeitet:
Hallo sanni74,

die Aufgabenstellung ist reichlich ungenau:
Es sollen also IMMER die ersten 8 Zeichen zu Leerzeichen umgewandelt werden? Und dann?

Wie ermittelst du das N und R? Willst du also das Zeichen an der 11. Position und 23. Position am Anfang stellen?
Sind N und R fix oder nur Beispiel-Argumente?

Werd mal bitte ein wenig genauer...
 
@sprodanit. Jupp, alle deine Aussagen sind zutreffend.
An den Anfang sollen immer 8 Leerzeichen, alle Zeichen in den Dateien sind variabel, nur die Positionen sind fest. N und R beschreiben die Zeichen an den Stellen 11 und 23 und sind nur Argumente.
Genau an N und R knabber ich ............... Die Leerzeichen sind ja nich so schwer via einer 2. Zeile.
 
Ok, letzte Frage: bilden N und R nur jeweils ein Zeichen oder können sie auch mehrere beinhalten? Mehr als 2 Argumente gibt es nicht?
 
Alle Argumente haben exakt nur 1 Zeichen, auch R und N haben immer nur eins und stehen immer an der selben Stelle.
Ist faktisch wie eine Formatänderung.
 
okay.. mal schaun...

Ich würde aus Gründen der höheren Geschwindigkeit und vor allem der enorm hohen Flexibilität mit Autoit-String-Funktionen arbeiten, z.B.

Code:
$var1 = '        900123 klmN717.968 opqR453.375 123.456'


MsgBox(0, 'Info', meineFunk1($var1))
MsgBox(0, 'Info', meineFunk2($var1,'N','R'))

Func meineFunk1($string) ;Zeichen an 11. und 23. Stelle wird nach vorne versetzt
	Return StringMid($string, 19, 1) & StringMid($string, 31, 1) & StringTrimLeft($string, 8)
EndFunc

Func meineFunk2($string, $arg1, $arg2) ;Zeichen an Positionen arg1 und arg2 ermitteln
	$arg1 = StringInStr($string, $arg1, 2)-8
	$arg2 = StringInStr($string, $arg2, 2)-8
	Return 'Position: ' & $arg1 & ' & Position: ' & $arg2
EndFunc

Habe gleich 2 Aufgabenstellungen eingefügt...
 
Zuletzt bearbeitet: (Code eingefügt)
Danke, das ist echt lieb von Dir, aber bzgl des Einpflegens sollte es über StringRegExpReplace laufen.
Damit lassen sich ja dann auch ganze Dateien auslesen, ohne Zeilenweise alles durchzuschleifen.
Auch ist mein Wissen in AutoIt leider noch so beschränkt, das ich noch verstehen will, was da eig. passiert um es andereweitig zu replizieren und mehr zu lernen.
Hier kämpf ich gerade:
http://www.autoit.de/dokumentation_aktuell/functions/StringRegExp.htm

Hast du eine Ausdrucksidee für StringRegExp, auch wenn es dir langsamer und unflexibler erscheint ? Dein Skript ist wohl eher was für Fortgeschrittenere, als ich einer bin ... :heul:
 
Brauchst du denn meineFunk1 oder meineFunk2 als Regex?

Brauchst du nur ein Rückgabewert (trifft zu, trifft nicht zu ---> schneller) oder den kompletten String zurück?
 
Weder noch, ich brauche nur den Wert. Nicht mal eine Prüfung.
Ich krieg halt für StringRegExpReplace die richtige "Rechtschreibung" des Audrucks nicht hin.
Sind halt lange Dateien, die im Format geändert werden sollen, wie ein Spalteneditor quasi.
 
Hmm heute schaff ich es nicht mehr,

EVTL. (!) morgen.

Ich habe ein Programm rausgekramt, selber in Autoit vor über 3 Jahren geschrieben. Damit kannst du sehr bequem diverse Regex überprüfen (wird man später garantiert nochmal draufstoßen). War dann vielleicht nicht ganz umsonst das Programm ;)
 
Mir wurde geholfen ! :) Danke für´s Bemühen.
Dein Prüfprogramm seh ich mir auf jeden Fall mal an, das wird mir bestimmt zukünftig weiterhelfen.
Danke schön!
 
Code:
$sText = StringRegExpReplace($sText, '.{10}(\d{6}) (.{3})(.)(.+?) (.{3})(.)(.+?) (.+?)', '        $3$6$1 000 $2$3$4 $5$6$7 $8')
So siehts aus, hätt ich aber alleine nicht hinbekommen. :D
Jetzt bin ich da schon mal sehr viel schlauer.
 
Zurück
Oben