• # Reste au premier commentaire.

    Posté par  . Évalué à 4.

    1) Reste sur ton premier post., s'il te plaît.
    https://linuxfr.org/forums/27/23394.html

    2) RFTM

    3) while (<>){ if ($_ =~ "Mot") { printf $_; } }
  • # Precision

    Posté par  . Évalué à 1.

    Je précise :

    Fichier1:

    Ma maison est rouge
    mon toit doit etre bleu
    ma cheminée fume
    mon toit doit etre rouge

    Je veux obtenir le fichier2 comme suit:

    mon toit doit etre bleu
    mon toit doit etre rouge

    En gros je veux avoir dans le fichier2 les lignes du fichier1 ayant le même 2ème mot (par exemple).

    Le tout en langage Perl

    Merci
    • [^] # Re: Precision

      Posté par  . Évalué à 2.

      1) Comme Obsidian, je te conseille de rester sur ton premier post:
      https://linuxfr.org/forums/27/23394.html

      2) Dans le post ci-dessus, une solution (en Shell et non en Perl) a été donnée à ta question initiale. As-tu essayé de la comprendre et de la traduire en Perl ?

      3) As-tu essayé de résoudre ce problème toi-même ?
      Si c'est le cas, peux-tu nous livrer le résultat de ta réflexion et exposer les problèmes sur lesquels tu butes ?

      A moins que tu attendes de ce forum qu'on fasse tout le travail à ta place sans que tu aies besoin de réfléchir :(
      • [^] # Re: Precision

        Posté par  . Évalué à 0.

        Je pense résoudre mon problème en cherchant seul sans que vous soyez obligé de vous y pencher comme je l'ai compris quand on post un message dans programmation Perl et qu'on se retrouve avec des solutions en Shell.

        Tout va pour le mieux dans ce monde qui tourne vraiment de mieux en mieux.

        A bientôt, peut être avec la solution.....

        Réfléchissez avant de vous exprimer...
        • [^] # Re: Precision

          Posté par  . Évalué à 3.

          Réfléchissez avant de vous exprimer...


          Alors là, c'est vraiment le comble ! C'est vraiment l'hôpital qui se fout de la charité !

          Tout le monde s'est penché sur ton problème sur deux posts différents, on t'a proposé plein de solutions dont la mienne, en Perl, dans le premier commentaire, et non seulement tu as le culot de te plaindre, mais en plus tu fais la morale aux gens, et tout cela parce que l'on te dit de rester sur le premier post !

          Est-ce que tu as toi-même réfléchi avant de t'exprimer ?
          Si tu ne trouves pas la solution, c'est parce qu'à la base, ton problème n'est pas clair dans ta propre tête :

          En gros je veux avoir dans le fichier2 les lignes du fichier1 ayant le même 2ème mot (par exemple).


          Ca veut dire quoi ? Tu veux pouvoir préciser quel mot dans la phrase tu veux examiner ? Chose qui n'était pas précisée jusque là et auquel cas il faut trier ton fichier à partir de cette position, ou bien tu veux que ça marche pour tous les mots dupliqués, auquel cas tu pourrais très bien te retrouver également avec :

          Ma maison est rouge
          mon toit doit etre rouge

          Dans ce cas, il faut d'abord recenser tous les mots, et ensuite récupérer les lignes qui les contiennent. Es-tu sûr d'avoir pensé à tout cela auparavant ?

          En plus, on t'a posé d'autres questions auxquelles tu n'as pas daigné répondre, telle que :"pourquoi spécialement en Perl". Enfin, la solution en shell que je t'ai filé implémente un algo qui fonctionne. Tu n'as plus qu'à l'adapter tel quel en Perl. Si tu ne sais pas le faire, tu utilises ce que je t'ai écrit dans mon premier commentaire (encore), et tu lis la doc !

          Réfléchis avant de t'exprimer !
          • [^] # Re: Precision

            Posté par  . Évalué à 2.

            J'ai trié mon fichier sur le champ qui m'intéresse et j'obtiens un nouveau fichier de ce type:
            rouge
            bleu
            rouge
            vert
            Mon problème est que je ne sais pas comment balayer ce nouveau fichier et comparer les lignes pour qu'il me récupère
            que les valeurs identiques?

            Voilà ce que j'ai réussi à faire:
            $file="c:\\table.txt";
            # Ouvre le fichier, qui s'il n'existe pas
            open(INFILE,$file) or die "Impossible de trouver le fichier $file\n";
            while () {$string=$_;

            if ($string=~ /M/){
            @liste=substr($_, 6, 8);

            open ("NEWFILE", ">>mont.txt") or die ("Impossible d'ouvrir le fic. mont.txt");
            while (<@liste>) { print NEWFILE "$_\n" ;# Ecrit toutes les lignes dans mont.txt
            }
            }
            }

            Je souhaite faire du perl car je suis sur Windows.

            Merci
            • [^] # Re: Precision

              Posté par  . Évalué à 3.

              Ok, ça s'éclaircit.

              Il faut lire ton fichier en deux passes, car autrement tu serais obligé de retenir en mémoire chaque ligne au cas où un de ses mots serait dupliqué. Par contre, tu n'es pas obligé de le réouvrir à chaque tour de boucle :

              Je considère que :
              - Les mots dont tu surveilles la duplication sont récupérés dans un champ avec substr($_, 6, 8). Voir plutôt du côté de split.
              - Tu souhaites voir si chacun de ces mots se trouve dans l'intégralité des chaînes, dont les mots sont séparés par des espaces.


              $in = "in.txt";
              $out = "out.txt";

              open(INFILE,$in);
              while (<INFILE>) { $mots{substr($_, 6, 8)}++; }
              close (INFILE);

              open(INFILE,$in);
              open(OUTFILE,">>$out");

              while (<INFILE>)
              {
              $phrase = $_;

              foreach (split(' ',$phrase))
              {
              if ($mots{$_} ge 2) { print $phrase; last }
              }
              }

              close(INFILE);
              close(OUTFILE);

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.