1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

String auf numerische Zeichen prüfen in Perl ?

  • NickK
  • 19. November 2013 um 10:42
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • NickK
    Punkte
    310
    Beiträge
    46
    • 19. November 2013 um 10:42
    • #1

    Hallo

    da ich ein Perl Programm ändern soll ohne wirklich selbiges zu sprechen:

    kann mir jemand einen Tipp geben wie
    ich einen String ($_) prüfen kann, ob er mit n numerischen Zeichen beginnt ?

    der Programmierer hat einfach 14 digits am anfang vom rest abgetrennt...
    was später probleme gibt wenn die Zeile nicht mit 14 davon beginnt...


    next if (length($_) < 16); # 14 digits + rest

    s/(\d{14})(.*)/$1=$2;/g; # put a "=" after 14 digits + ";" on the end

    %values = ();
    %values = split(/[=;]/, $_);# put pairs into a hashtable

    danke, lg

  • Alex_K
    Punkte
    2.465
    Beiträge
    487
    • 20. November 2013 um 22:06
    • #2
    Code
    if ( $_ =~ /^(\d+)/) {
        $die_ersten_n_zahlen = $1;
        $hat_soviele_zahlen_am_beginn = length($1)
    }

    Bei deinem Code-Ausschnitt sollte es reichen wenn du das {14} mit '+' ersetzt

    Code
    s/(\d+)(.*)/$1=$2;/g;
  • NickK
    Punkte
    310
    Beiträge
    46
    • 22. November 2013 um 11:15
    • #3

    danke !

    kann ich auch das da machen ?


    Code
    next if (length($_) < 16);     # 14 digits + rest
    
    
    s/(\d+)(.*)/$1=$2;/g;           # put a "=" after 14 digits + ";" on the end
    
    
    next if (length($1) < 14);     # write different as <> or !=   ???
    next if (length($1) > 14);
    
    
    %values = ();
    %values = split(/[=;]/, $_);  # put pairs into a hashtable
    Alles anzeigen

    3 Mal editiert, zuletzt von NickK (22. November 2013 um 11:22) aus folgendem Grund: Format (Code) changed

  • Alex_K
    Punkte
    2.465
    Beiträge
    487
    • 23. November 2013 um 16:55
    • #4

    Ja, es sollte zumdest so kompilieren.

    Der Code kommt mir trotzdem etwas umständlich und buggy vor. Einerseits deuten die Regexp, das split und der Hash darauf hin, dass Strings mit beliebig vielen Zahlen/Zeichen Paaren eigelesen werden sollen , andereseits funktioniert es dank den "next if" Vergleich sowieso nur ein Paar (ein String < 16 kann kein 2 Strings > 14 beinhalten). Ohne die genauen Anforderungen und den Code rundherum nicht zu kennen, kann ich auch keine eindeutige Aussage machen. Aber davon ausgehend, dass der Code bis auf das Problem mit den 14 Zeichen bis jetzt korrekt funktioniert hat, und das $_ nicht noch wo anders verwendet wird, würde ich es so schreiben:

    Code
    %values = ();
    if ($_ =~ /(\d{14})(.*)/) {
        $values{$1} = $2;
    }
    else {
        # optional, error handling wenn es nicht 14
        # Zahlen sind z.B:
        next;
    }

    Da werden nicht unnötige Strings erzeugt und wieder zerlegt, und man kann auf den ersten Blick erkennen was erreicht werden soll.

    Einmal editiert, zuletzt von Alex_K (23. November 2013 um 16:58)

  • NickK
    Punkte
    310
    Beiträge
    46
    • 26. November 2013 um 13:54
    • #5

    danke ! das ist ja gleich viel logischer !


    hab ja nicht mal gewusst, ob nach durchführung von

    s/(\d+)(.*)/$1=$2;/g; # put a "=" after 14 digits + ";" on the end

    oder

    s/(\d{14})(.*)/$1=$2;/g; # put a "=" after 14 digits + ";" on the end

    welches bei weniger als 14 Zeichen mit einer Warning trotzdem weiterläuft

    das $1 weiterhin definiert bzw weiter verwendbar ist ....

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum