Thread Regex-Problem mit Backreferences
(44 answers)
Opened by DemoFreak at 2004-02-04 14:37
[quote=DemoFreak,04.02.2004, 15:18][quote=Crian,04.02.2004, 15:01]ich würd es trotzdem splitten und das Array dann wieder korrigieren.
Wenn da eine Null steht weißt Du ja, dass ein Element fehlt. Dann füg einfach ein leeres ein. Wenn da eine 216 steht und das nächste Element keine 216 Elemente hast, spliced Du das übernächste raus und joinst es mit ' ' ans nächste, solange, bis das lang genug ist.[/quote] Da komm ich jetzt grade nicht ganz mit ;) Könntest Du mir mal eine Richtung bzw. ein Snippet geben?[/quote] Ich meinte das so: Erstmal erzeugst Du Dir aus der Zeile mit Code: (dl
)
my @parts = split; ein Array. Dann weißt Du ja, an welcher Stelle von vorn die erste Längenangabe für den nachfolgenden String kommt. Sagen wir, es ist die sechste Stelle, also Index 5. Fall 1) $parts[5] = 0 Nun erzeugst Du ein neues Arrayelement mit Code: (dl
)
@parts = (@parts[0..5], '', @parts[6..$#parts]); Fall 2) $parts[5] > 0 Nun musst Du sehen, ob Dein Teil lang genug ist, bzw. weitere Teile heranziehen: Nun hast Du diesen Teil gefixt, und Du weist wieder, wo die nächste Nummer bzw. Index ist, die eine Länge des danach folgenden Teiles angibt und wiederholst es für diesen. Ich würde mir diese Indices in ein Array packen und obiges in einer Schleife von vorn nach hinten durchlaufen lassen. Dadurch, dass die Elemente aufgefüllt bzw. gespliced werden, stimmt dann beim nächsten auch immer wieder Dein Index. Wenn ich auf Deine Beispielstrings schaue, könnte folgende Liste richtig sein: 5, 9, ... danach weiß ich nicht, welche Nullen Längenangaben sind. Ich hoffe, das hilft Dir weiter. Der Code ist nur eine Skizze, kann sein, dass Tipp- oder Denkfehler drin sind. Aber etwas Arbeit sollte ja auch noch bleiben ;)\n\n <!--EDIT|Crian|1075915520--> s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite |