1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • 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
  • NickK
    6
    NickK
    Mitglied
    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
    15
    Alex_K
    Mitglied
    Reaktionen
    10
    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;

    Total world domination is proceeding as planned.

  • NickK
    6
    NickK
    Mitglied
    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
    15
    Alex_K
    Mitglied
    Reaktionen
    10
    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.

    Total world domination is proceeding as planned.

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

  • NickK
    6
    NickK
    Mitglied
    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.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung