perl : geht es auch einfacher ?

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von Nano, 05.03.2008.

  1. Nano

    Nano Foren As

    Dabei seit:
    02.12.2006
    Beiträge:
    93
    Zustimmungen:
    0
    Hi ich habe folgende Aufgabenstellung und bin der meinung das ich sie wohl zu kompliziert gelöst habe, gibt es da einen einfacheren / saubereren weg ?

    Folgende Aufgabenstellung :

    Eine Datei enthält einen Text mit Kommentaren die durch stringAnfang und string Ende gekennzeichnet sind. Alle Kommentare sollen ausgegeben werden.


    hierfür habe ich den Text in ein array eingelesen und dann folgendes veranstaltet :

    Code:
    
      #komplette Datei aus dem Array in einen string schreiben, ohne \n
    
            my $arraystring = "";
            foreach my $x (@array){
                    chomp($x);
                    $arraystring = $arraystring.$x;
            }
    
            #kompletten string nach $stringAnfang.*$stringEnde ( kleinste folge ) absuchen, das Ergebnis in $1 speichern und den rest in $2
    
            while( $arraystring =~ m#$stringAnfang(.*?)$stringEnde(.*)# ){
                    print "$1 \n";
                    $arraystring = $2;
            }
    
    
    
    

    es funktioniert, allerdings bin ich mit dem Lösungsweg nicht wircklich zufrieden
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Gott_in_schwarz, 06.03.2008
    Zuletzt bearbeitet: 06.03.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    hm, ich hab das mal eben für c-style comments (/* bla */) gemacht. wobei damit das auch zeilenübergreifend funktioniert (trotz zeilenweisem einlesen der daten) hab ich mir da einen "longString" zusammengeschustert, der nach einem match immer wieder resettet wird. irgendwie auch noch nicht der gipfel der eleganz :s

    PHP:
    #!/usr/bin/env perl

    my $strStart '/\*';
    my $strEnd '\*/';

    my $longStr;

    while(<>)
    {
        
    $longStr .= $_;
        if (
    $longStr =~ m/$strStart(.+?)$strEnd/s
        {
            print 
    "$1\n";
            
    $longStr '';
        }
    }



    [edit]:
    eine sache noch, statt:
    PHP:
    my $arraystring "";
            foreach 
    my $x (@array){
                    
    chomp($x);
                    
    $arraystring $arraystring.$x;
            }
    geht einfach:
    PHP:
    my $arraystring join('', @array);
    siehe dazu auch -> klick mich <-
    wobei dann natürlich die newlines-chars ("\n") erhalten bleiben. wenn du einen string über mehrere zeilen matchen willst, kannst du bei den match-optionen 's' für 'singleline' angeben. dann matcht der punkt auch newlines.
    respektive wenn du einfach die zeilenumbrüche loswerden willst, geht das ja auch ziemlich einfach:
    PHP:
    $arraystring =~ s#\n##g;
     
  4. tr0nix

    tr0nix der-mit-dem-tux-tanzt

    Dabei seit:
    11.07.2003
    Beiträge:
    1.585
    Zustimmungen:
    0
    Ort:
    Schweiz, Opfikon/Glattbrugg
    Guter Ansatz, aber nicht 100%ig vollstaendig, da C ja auch noch // Kommentare erlaubt. Ich denke die Aufgabe muss genauer geschildert werden.

    Ansonsten kennt Perls Regex Engine noch die "m" Option, welche Newlines ignoriert.
     
  5. musiKk

    musiKk Dr. Strangelove

    Dabei seit:
    30.07.2006
    Beiträge:
    264
    Zustimmungen:
    0
    Ort:
    Leipzig
    Wenn man aber von der Aufgabenstellung, wie sie oben steht, ausgeht, dann gibt es keinen Hinweis auf C. Da steht nur "stringAnfang" und "stringEnde".
     
  6. #5 Gott_in_schwarz, 06.03.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    naja, die einzigen kommentare die ich kenne, die so etwas wie einen "start" und "end" string haben, sind halt diese /* fn0rd */ kommentare. und das newline zeichen bei den "//" kommentaren würde ich nicht als string bezeichnen. (kann man natürlich und man würde nicht falsch damit liegen..)
    deswegen hab ichs halt nur für diese kommentare gemacht.

    und soweit ich weiß beeinflusst das "m" flag nur das verhalten von den "^" und "$" anchors. die matchen dann nämlich statt nur am anfang und am ende des strings am anfang und ende jeder zeile des strings. wenn man mit "m" noch anfang und ende des strings mitmatchen will muss man "\A" und "\Z" benutzen. (beziehungsweise "\Z" matcht auch vor newlines. will man wirklich nur das ende matchen nimmt man "\z".)
     
Thema:

perl : geht es auch einfacher ?

Die Seite wird geladen...

perl : geht es auch einfacher ? - Ähnliche Themen

  1. Quelltext von Perl Modulen anzeigen/bearbeiten, geht das?

    Quelltext von Perl Modulen anzeigen/bearbeiten, geht das?: Hey Leute, kurze Frage hätte ich, gibt es eine Möglichkeit an den Quelltext von eingebunden Modulen ranzukommen? Ich würde gern ein bissle...
  2. Linux Foundation: Hyperledger-Projekt startet mit 30 Mitgliedern

    Linux Foundation: Hyperledger-Projekt startet mit 30 Mitgliedern: Das Hyperledger-Projekt der Linux Foundation will eine neue Form der dezentralisierten Kontoführung nach dem Prinzip der »distributed ledger« bei...
  3. Perl 6 offiziell vorgestellt

    Perl 6 offiziell vorgestellt: Wie erwartet, ist die Version C(hristmas) von Perl 6 veröffentlicht worden. Perl 6 stellt nicht, wie der Name suggeriert, einen Nachfolger von...
  4. Perl: 20 Jahre CPAN

    Perl: 20 Jahre CPAN: Vor 20 Jahren wurde das erste Modul in das Comprehensive Perl Archive Network (CPAN) hochgeladen, woran Neil Bowers mit einem Abriss der...
  5. Perl 5.22.0 freigegeben

    Perl 5.22.0 freigegeben: Die neue Version 5.22 von Perl bringt den Anwendern mehr Sicherheit bei Eingabedateien, Unicode 7.0 und zahlreiche weitere Verbesserungen....