Expertenwissen
Von: , 10.04.2010 09:56 Uhr
Hallo Zusammen,
ich hab ein Problem. Ich habe einen String mit einer zusammenhängenden Zeichenfolge

$string="AGHPQRTXHXSLOKPJGKLUA"

ich will diesen String nun an bestimmen Stellen schneiden:
Immer nach dem Buchstaben "K" oder "R" aber nur sofern auf diese Buchstaben kein "P" folgt!

Das Ergebnis sollte dann ein Array sein das in diesem Beispiel so aussieht:
"AGHPQR" "TXHXSLOKPJGK" "LUA"

Wie könnte ich sowas anstellen?

Gruß Jürgen

3 Antworten zu dieser Frage
  1. Antwort von nach 3 Stunden 0 hilfreich
    Re: perl string schneiden und in ein array speichern
    Hallo Jürgen,

    Ich denke mit Split ist es ein bisschen unglücklich, weil das ja die Grenzen nochmal extra separiert und ins Array speichert. Wie man das elegant lösen kann hab ich auch auf die Schnelle nicht rausgefunden, aber ich kann Dir eine unelegante Lösung anbieten:




    #!/usr/bin/perl


    my $string="AGHPQRTXHXSLOKPJGKLUAAGHPQRTXHXSLOKPJGKLUA";

    print"\n\nSo solls aussehen:\nAGHPQR TXHXSLOKPJGK LUA\n\n";

    my @array;
    while ($string =~ m/([^RK]+([RK]|(.+$)))/g) {
    my $grade = $1;
    if($grade =~ m/^[^P]\w+/) {
    push(@array, $grade);
    }else{
    my $grade2 = pop(@array);
    $grade2.=$grade;
    push(@array, $grade2);
    }
    }

    print "\n\n@array";




    Das sucht einfach die Rs und Ks raus und überprüft im zweiten Schritt, ob ein P folgt. Je nachdem wie lang die Strings sind, kann das aber länger bei der Ausführung brauchen, das konnte ich nicht so testen :)

    Liebe grüße
    Lena
  2. Antwort von nach 3 Stunden 0 hilfreich
    Re: perl string schneiden und in ein array speichern
    Hallo,

    eine Möglichkeit wäre z.B. diese:

    $string =~ s/([rk])([^p])/$1\n$2/gi;
    @array = split(/\n/i, $string);


    Tschö,
    Sascha
  3. Antwort von nach 2 Tagen 0 hilfreich
    Re: perl string schneiden und in ein array speichern
    so sollte es klappen

    #######################################################################
    # VBString2Array {
    # Aus VB-String einen Array machen
    der String wird bei jedem Vorkommen von xa0 oder x20 geschnitten und im Array abgelegt
    ################

    sub VB2A {
    my ($temp) = @_;
    my @out = split(/ /,$temp);
    for (@out) {
    if ($_) {
    s/\xa0/\x20/g;
    } else {
    $_ = '';
    }
    }
    return @out;
    }
    Jetzt auf diese Frage antworten!