• [^] # Re: "open + while + split + if + join + print + close" grace a RTFM

    Posté par . En réponse au message besoin de commande perl pour éviter une boucle sur grep, un if et un sed (en clair un rechercher remplacer conditionnel). Évalué à 4.

    alors si tu ne veux pas de boucle, tu deroule la boucle par contre il faut que tu connaisses d'avance le nombre de lignes du fichier :)

    sinon, tu peux tenter une recursion mais cela reste encore une boucle implicite :

    open( my $ifile, "<", "input.txt" );
    open( OFILE, ">", "output.txt" );

    sub recurs {
    my $h = shift;

    my $a = <$h>;
    chomp;
    my @col = split( '~', $_ );

    if ( ( $col[0] eq "ACT" ) && ( $col[12] =~ /^0/ ) ) {
    $col[12] = $col[14];
    }

    print OFILE join( '~' , @col ), "\n";
    recurs( $h ) unless eof( $h );
    }

    recurs( $ifile );

    close( $ifile );
    close( OFILE );

    Maintenant, explique moi comment traiter un fichier de N lignes sans faire une boucle ? Les instructions SIMD pour des traitements complexes gerant des acces disques n'existent pas encore il me semble mais je me trompe peut etre.

    Penses tu serieusement que cat, grep, awk & co ne font pas de boucle quelque part ?

    quel overhead représente un saut pour ton probleme si tu le resoud dans un langage interprété ? autant résoudre ton probleme en ASM, mais de toute facon je ne vois pas comment ne pas mettre de saut sans derouler.

    cadeau : le source d'une version de cat pour OpenBSD http://mirror.sg.depaul.edu/pub/OpenBSD/src/bin/cat/cat.c