Hallo Forum,
habe gerade viel mit etwas zu tun, was ich am wenigsten kann StringRegExp.
Mit der Hilfe von Oscar habe ich folgenden Ausdruck gebastelt.
$aOut_c = StringRegExp($sData_c, '.+\((.+?),\s*(-*\d+)\);', 3)
[/autoit]
hier ein Ausschnitt meines Teststrings
s32_error |= ba_llt_writeTempEEPROM(PWM1_MIN, 200);
s32_error |= ba_llt_writeTempEEPROM(PWM1_MAX, -800);
s32_error |= ba_llt_writeTempEEPROM(DIOM_1_DIOS_1_PWM1_MAX, 1200);
s32_error |= ba_llt_writeTempEEPROM(AE10_0,730);
das Ergebnis in dem Array sieht dann so aus:
$aOut_c[0] ;= PWM1_MIN
$aOut_c[1] ;= 200
$aOut_c[2] ;= PWM1_MAX
$aOut_c[3] ;= -800
$aOut_c[2] ;= DIOM_1_DIOS_1_PWM1_MAX
...
Nun muss der SRE-Ausdruck aber erweitert werden, dass auch folgende Strings so eingelesen werden.
s32_error |= ba_llt_writeTempEEPROM(DIOM_1_DIOS_3_PREOPERA_OUT,PREOPERA_OUT);
s32_error |= ba_llt_writeTempEEPROM(PWM2_MIN,GD_GEBER_ANALOG);
s32_error |= ba_llt_writeTempEEPROM(PWM2_MAX, true);
s32_error |= ba_llt_writeTempEEPROM(PWM3_MIN,((word) 200);
s32_error |= ba_llt_writeTempEEPROM(PWM3_MAX,((word)-800);
zu Zeile 1-4) das letzte Komma trennt die beiden Parameter
zu Zeile 3) nach dem Komma können keines oder mehrere Leerzeichen stehen, und natürlich auch "false" o.ä
zu Zeile 4-5) der Datentyp ist nicht wichtig "((word)" oder andere Typen ignorieren, generell alles was keine Zahl ist
Und das soll herauskommen
[autoit]$aOut_c[0] ;= DIOM_1_DIOS_3_PREOPERA_OUT
$aOut_c[1] ;= PREOPERA_OUT
$aOut_c[2] ;= PWM2_MIN
$aOut_c[3] ;= GD_GEBER_ANALOG
$aOut_c[4] ;= PWM2_MAX
$aOut_c[5] ;= true
$aOut_c[6] ;= PWM3_MIN
$aOut_c[7] ;= 200
$aOut_c[6] ;= PWM3_MAX
$aOut_c[7] ;= -800
...
Ich hoffe ich konnts verständlich erklären
Vielen Dank
Michael