[PERL] Extraire des donnees d'un fichier.

leo25 Messages postés 20 Statut Membre -  
lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
Bonjour,
voila j'ai qq problemes pour recupérer des données d'un fichier avec perl,
le fichier source comprte 180 paragraphes similair (a part les chiffres bien sur :) ) à celui la :

| ELEMENT : 1 | HEXAEDRE | S-D : 3 | NOMBRE DE MOTS ASSOCIES : 27

NOMBRE DE NOEUDS : 8 : 1 4 6 2 55 56
57 58
REFERENCE DES FACES : 0 5 1 0 0 0

REFERENCE DES ARETES : 1 0 0 5 1 1
0 5 1 0 0 5
REFERENCE DES SOMMETS : 1 1 0 5 1 1

bon je dois recuperer le 3 et ca ne pose pas de probleme mais je veux recuperer les 8 elts du noeud c'est à dire 1 , 4 , 6 , 2 , 55 , 56 , 57 , 58 .
pour les six premiers c'est bon mais c'est pour le 57 et 58 qui posent probleme puisqu'il y a des espaces avant; bon CCM n'as pris en compte les espaces!

while( defined( $line = <FILE> ) )
{
@words = split( /\W+/, $line );
foreach $word (@words)
{
$word =~ tr/A-Z/a-z/;
if( $word =~ m/noeuds/ )
{
print "@words[5..10]\n";
}
}
}
merci a tous pour vitre aide

17 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    à toi d'adapter.
    J'ai utiliser le handel DATA plutôt que le fichier. Fait les modifis nécessaires.
    #!/usr/bin/perl
    use warnings;use strict;
    
    while( defined (my $line = <DATA>) ) {
      print "$1\n" if $line =~ /noeuds.*:(.*)/i;
    }
    
    
    __END__
    | ELEMENT : 1 | HEXAEDRE | S-D : 3 | NOMBRE DE MOTS ASSOCIES : 27
    
    NOMBRE DE NOEUDS : 8 : 1 4 6 2 55 56 57 58
    REFERENCE DES FACES : 0 5 1 0 0 0
    
    REFERENCE DES ARETES : 1 0 0 5 1 1 0 5 1 0 0 5
    REFERENCE DES SOMMETS : 1 1 0 5 1 1
    
    Ou encore
    #!/usr/bin/perl
    use warnings;use strict;
    
    while( <DATA> ) {
      print "$1\n" if /noeuds.*:(.*)/i;
    }
    
    
    __END__
    | ELEMENT : 1 | HEXAEDRE | S-D : 3 | NOMBRE DE MOTS ASSOCIES : 27
    
    NOMBRE DE NOEUDS : 8 : 1 4 6 2 55 56 57 58
    REFERENCE DES FACES : 0 5 1 0 0 0
    
    REFERENCE DES ARETES : 1 0 0 5 1 1 0 5 1 0 0 5
    REFERENCE DES SOMMETS : 1 1 0 5 1 1
    
    lami20j
    0
  2. leo25 Messages postés 20 Statut Membre
     
    Salut lami20j,
    si j'ai bien compris, qd tu dis a moi de m'adapter càd tu veux que joigne les deux chiffres restant aux autres, le pb c'est que j'en ai 180 des comme ca et j'ai encore des plus grands!!
    il y aurait pas d'autres idées
    merci
    0
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Re,

      il y aurait pas d'autres idées

      Ce n'est pas les idées qui manque, plutôt les détails de la demande.
      Mets ton fichier sur cjoint.com et on verra;)

      lami20j
      0
  3. leo25 Messages postés 20 Statut Membre
     
    voila j'ai trouvé la solution , bon vu que je suis tt nouveau ds la programation peut etre il y aura des solutions plus simples. donc voila pr ceux qui veulent ma solution :
    while( <FILE> )
    {
    @words = split( /\W+/);
    push @TdT, [ @words ];
    }
    while ($i< $#TdT)
    {
    for $j (5..10)
    {
    print "$TdT[$i+2][$j] ";
    }
    print "$TdT[$i+3][1] ";
    print "$TdT[$i+3][2] ";
    print "$TdT[$i][6]\n";
    $i+=11;
    }

    enfin merci à Moi :)
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    c'est bien que tu cherches par toi même.
    En revanche si je peux me permettre quelques conseils ;)

    Ce n'est pas une bonne idée de stocker le fichiers dans un tableau et ensuite traiter le tableau.
    Enfin ça marche pour les petits fichiers, mais si tu as un grand fichier tu n'arriveras pas et si tu arrives il y a un prix à payer (la mémoire)

    J'ai fait un test sur un fichier de 840 Mo avec presque 17 millions lignes et ton code génére le message Out of memory.

    J'ai testé aussi ton bout de code sans essayer de le comprendre, sur le fichier et le résultat ce n'est pas ce que tu demandes.

    Voilà mon test (j'utilise 2 fichiers temporaires que je supprime après traitement,. ce n'est pas la meilleure méthode, j'ai fait vite fait hier soir).
    Ce soir je vais expliquer mon code et je vais te donner aussi quelques conseils concernant Perl, vu qu'il peut être comparé à kanji ;)

    La taille et le nombre de ligne du fichier et le temps d'exécution
    lami20j@debian:~/trash$ cat leo25.txt | wc -l 
    16786176 
    lami20j@debian:~/trash$ du -h leo25.txt 
    843M    leo25.txt 
    
    lami20j@debian:~/trash$ time perl ccm_19092006.pl 
    
    real    5m0.220s 
    user    3m46.298s 
    sys     0m15.441s 
    lami20j@debian:~/trash$ 
    
    Le script
    #!/usr/bin/perl 
    
    open F_FILE,"leo25.txt"      or die "E/S : $!"; 
    open TEMP,">temp"            or die "E/S : $!\n"; 
    
    open LIRE,"temp"             or die "E/S :$!\n"; 
    open RES, ">res_leo"         or die "E/S : $!\n"; 
    
    open RES_LIRE, "res_leo"     or die "E/S : $!\n"; 
    open RES_ECRIRE,">final_res" or die "E/S : $!\n"; 
    
    while( <F_FILE> ) { 
    s/\r\n/ / if /noeuds/i; 
           s/^\s*//; 
           print TEMP $_; 
    } 
    
    while (<LIRE>) { 
        next unless /element\b|noeuds/i; 
        s/\s+/ /g if /noeuds/i; 
        print RES " $1\n" if /noeuds.*:\s+(.*)/i; 
        my $idx = $1 if /S-D.*?(\d+)/; 
        print RES "$idx"; 
    } 
    
    while (<RES_LIRE>) { 
        s/(\d+)\s+(.*)/$2 $1/; 
        print RES_ECRIRE $_; 
    } 
    
    unlink("temp"); 
    unlink("res_leo"); 
    Le résultat est dans le fichier final_res dans le répertoire courant.

    lami20j
    0
  6. leo25 Messages postés 20 Statut Membre
     
    merci lami20j , c vrai que le code que j'ai peut galérer niveau memoire et en plus de ca je ne fais pas que ce traitement ds le fichier source il y en a d'autre, bon je vais regarder ton code au debut de l'aprem,
    merci bcp
    PS: j'aurais surement des questions a te poser
    0
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Salut,

      j'aurais surement des questions a te poser

      Pas de problème. En revanche, à savoir que je suis au boulot.
      Je vais regarder ce soir.

      lami20j
      0
  7. leo25 Messages postés 20 Statut Membre
     
    Re;
    bon franchemt, j'ai compris gd chose a part que, comme tu l'as dit tu passe par des fichiers temporaires mais j'arrive a comprendre le sens de s/\r\n/ ou bien s/(\d+)\s+(.*)/$2 $1/ j'ai beau cherché mais je ne trouve pas . merci a toi lami de bien vouloir rester patient avc mon igorance .
    0
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Ok, je t'expliqurai ce soir.

      Cependant tu as testé le code? Ca te va?

      lami20j
      0
  8. leo25 Messages postés 20 Statut Membre
     
    Re;
    bon franchemt, j'ai compris gd chose a part que, comme tu l'as dit tu passe par des fichiers temporaires mais j'arrive a comprendre le sens de s/\r\n/ ou bien s/(\d+)\s+(.*)/$2 $1/ j'ai beau cherché mais je ne trouve pas . merci a toi lami de bien vouloir rester patient avc mon igorance .
    0
  9. leo25 Messages postés 20 Statut Membre
     
    Bon je suppose que tu l'as compris je voulais dire "j'ai pas compris grand chose :) " c'est le résultat qd on veut taper vite :) .
    pour le test je l'ai essayé et il n'affiche pas la ligne n°2:

    NOMBRE DE NOEUDS : 8 : 1 4 6 2 55 56
    57 58
    REFERENCE DES FACES : 0 5 1 0 0 0

    REFERENCE DES ARETES : 1 0 0 5 1 1
    0 5 1 0 0 5
    REFERENCE DES SOMMETS : 1 1 0 5 1 1

    il devrait afficher : 1 4 6 2 55 56 57 58.
    peut être si on revient vers ma soluce et on l'améliore. c'est toi qui voit
    encore une fois merci lami20j
    0
  10. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    il devrait afficher : 1 4 6 2 55 56 57 58.
    Ben, il affiche, mais pas tester sur tes ligne de ton message, mes sur le fichier que tu as mis en pièce jointe.

    Voilà le script
    #!/usr/bin/perl
    
    open F_FILE,"leo25.txt"      or die "E/S : $!";
    open TEMP,">temp"            or die "E/S : $!\n";
    
    open LIRE,"temp"             or die "E/S :$!\n";
    open RES, ">res_leo"         or die "E/S : $!\n";
    
    while( <F_FILE> ){
      s/\r?\n/ / if /noeuds/i;
      s/^\s*//;
      print TEMP $_;
    }
    
    while (<LIRE>) {
      next unless /element\b|noeuds/i;
      s/\s+/ /g if /noeuds/i;
      print RES " $1\n" if /noeuds.*:\s+(.*)/i;
    }
    
    unlink("temp");
    Et le resultat
     1 4 6 2 55 56 57 58 
     1 2 7 5 55 58 59 60 
     2 6 8 3 58 57 61 62 
     2 3 9 7 58 62 63 59 
     4 10 11 6 56 64 65 57 
     5 7 13 12 60 59 66 67 
     6 11 14 8 57 65 68 61 
     7 9 15 13 59 63 69 66 
     10 16 17 11 64 70 71 65 
     11 17 18 14 65 71 72 68 
     12 13 20 19 67 66 73 74 
     13 15 21 20 66 69 75 73 
     16 22 23 17 70 76 77 71 
     17 23 24 18 71 77 78 72 
     19 20 26 25 74 73 79 80 
     20 21 27 26 73 75 81 79 
     22 28 29 23 76 82 83 77 
     23 29 30 24 77 83 84 78 
     25 26 32 31 80 79 85 86 
     26 27 33 32 79 81 87 85 
     28 34 35 29 82 88 89 83 
     29 35 36 30 83 89 90 84 
     31 32 38 37 86 85 91 92 
     32 33 39 38 85 87 93 91 
     34 40 41 35 88 94 95 89 
     35 41 42 36 89 95 96 90 
     37 38 44 43 92 91 97 98 
     38 39 45 44 91 93 99 97 
     40 46 47 41 94 100 101 95 
     41 47 48 42 95 101 102 96 
     43 44 50 49 98 97 103 104 
     44 45 51 50 97 99 105 103 
     46 52 53 47 100 106 107 101 
     47 53 54 48 101 107 108 102 
     49 50 53 52 104 103 107 106 
     50 51 54 53 103 105 108 107 
     55 56 57 58 109 110 111 112 
     55 58 59 60 109 112 113 114 
     58 57 61 62 112 111 115 116 
     58 62 63 59 112 116 117 113 
     56 64 65 57 110 118 119 111 
     60 59 66 67 114 113 120 121 
     57 65 68 61 111 119 122 115 
     59 63 69 66 113 117 123 120 
     64 70 71 65 118 124 125 119 
     65 71 72 68 119 125 126 122 
     67 66 73 74 121 120 127 128 
     66 69 75 73 120 123 129 127 
     70 76 77 71 124 130 131 125 
     71 77 78 72 125 131 132 126 
     74 73 79 80 128 127 133 134 
     73 75 81 79 127 129 135 133 
     76 82 83 77 130 136 137 131 
     77 83 84 78 131 137 138 132 
     80 79 85 86 134 133 139 140 
     79 81 87 85 133 135 141 139 
     82 88 89 83 136 142 143 137 
     83 89 90 84 137 143 144 138 
     86 85 91 92 140 139 145 146 
     85 87 93 91 139 141 147 145 
     88 94 95 89 142 148 149 143 
     89 95 96 90 143 149 150 144 
     92 91 97 98 146 145 151 152 
     91 93 99 97 145 147 153 151 
     94 100 101 95 148 154 155 149 
     95 101 102 96 149 155 156 150 
     98 97 103 104 152 151 157 158 
     97 99 105 103 151 153 159 157 
     100 106 107 101 154 160 161 155 
     101 107 108 102 155 161 162 156 
     104 103 107 106 158 157 161 160 
     103 105 108 107 157 159 162 161 
     109 110 111 112 163 164 165 166 
     109 112 113 114 163 166 167 168 
     112 111 115 116 166 165 169 170 
     112 116 117 113 166 170 171 167 
     110 118 119 111 164 172 173 165 
     114 113 120 121 168 167 174 175 
     111 119 122 115 165 173 176 169 
     113 117 123 120 167 171 177 174 
     118 124 125 119 172 178 179 173 
     119 125 126 122 173 179 180 176 
     121 120 127 128 175 174 181 182 
     120 123 129 127 174 177 183 181 
     124 130 131 125 178 184 185 179 
     125 131 132 126 179 185 186 180 
     128 127 133 134 182 181 187 188 
     127 129 135 133 181 183 189 187 
     130 136 137 131 184 190 191 185 
     131 137 138 132 185 191 192 186 
     134 133 139 140 188 187 193 194 
     133 135 141 139 187 189 195 193 
     136 142 143 137 190 196 197 191 
     137 143 144 138 191 197 198 192 
     140 139 145 146 194 193 199 200 
     139 141 147 145 193 195 201 199 
     142 148 149 143 196 202 203 197 
     143 149 150 144 197 203 204 198 
     146 145 151 152 200 199 205 206 
     145 147 153 151 199 201 207 205 
     148 154 155 149 202 208 209 203 
     149 155 156 150 203 209 210 204 
     152 151 157 158 206 205 211 212 
     151 153 159 157 205 207 213 211 
     154 160 161 155 208 214 215 209 
     155 161 162 156 209 215 216 210 
     158 157 161 160 212 211 215 214 
     157 159 162 161 211 213 216 215 
     163 164 165 166 217 218 219 220 
     163 166 167 168 217 220 221 222 
     166 165 169 170 220 219 223 224 
     166 170 171 167 220 224 225 221 
     164 172 173 165 218 226 227 219 
     168 167 174 175 222 221 228 229 
     165 173 176 169 219 227 230 223 
     167 171 177 174 221 225 231 228 
     172 178 179 173 226 232 233 227 
     173 179 180 176 227 233 234 230 
     175 174 181 182 229 228 235 236 
     174 177 183 181 228 231 237 235 
     178 184 185 179 232 238 239 233 
     179 185 186 180 233 239 240 234 
     182 181 187 188 236 235 241 242 
     181 183 189 187 235 237 243 241 
     184 190 191 185 238 244 245 239 
     185 191 192 186 239 245 246 240 
     188 187 193 194 242 241 247 248 
     187 189 195 193 241 243 249 247 
     190 196 197 191 244 250 251 245 
     191 197 198 192 245 251 252 246 
     194 193 199 200 248 247 253 254 
     193 195 201 199 247 249 255 253 
     196 202 203 197 250 256 257 251 
     197 203 204 198 251 257 258 252 
     200 199 205 206 254 253 259 260 
     199 201 207 205 253 255 261 259 
     202 208 209 203 256 262 263 257 
     203 209 210 204 257 263 264 258 
     206 205 211 212 260 259 265 266 
     205 207 213 211 259 261 267 265 
     208 214 215 209 262 268 269 263 
     209 215 216 210 263 269 270 264 
     212 211 215 214 266 265 269 268 
     211 213 216 215 265 267 270 269 
     217 218 219 220 271 272 273 274 
     217 220 221 222 271 274 275 276 
     220 219 223 224 274 273 277 278 
     220 224 225 221 274 278 279 275 
     218 226 227 219 272 280 281 273 
     222 221 228 229 276 275 282 283 
     219 227 230 223 273 281 284 277 
     221 225 231 228 275 279 285 282 
     226 232 233 227 280 286 287 281 
     227 233 234 230 281 287 288 284 
     229 228 235 236 283 282 289 290 
     228 231 237 235 282 285 291 289 
     232 238 239 233 286 292 293 287 
     233 239 240 234 287 293 294 288 
     236 235 241 242 290 289 295 296 
     235 237 243 241 289 291 297 295 
     238 244 245 239 292 298 299 293 
     239 245 246 240 293 299 300 294 
     242 241 247 248 296 295 301 302 
     241 243 249 247 295 297 303 301 
     244 250 251 245 298 304 305 299 
     245 251 252 246 299 305 306 300 
     248 247 253 254 302 301 307 308 
     247 249 255 253 301 303 309 307 
     250 256 257 251 304 310 311 305 
     251 257 258 252 305 311 312 306 
     254 253 259 260 308 307 313 314 
     253 255 261 259 307 309 315 313 
     256 262 263 257 310 316 317 311 
     257 263 264 258 311 317 318 312 
     260 259 265 266 314 313 319 320 
    
    lami20j

    P.S. Comme je t'ai déjà dit je l'ai testé sur le fichier que tu as mis sur cjoint.com

    Il ne faut pas jouer avec les fins de lignes.
    Dans ton fichier la fine de ligne est spécifique à Windows :

    Carriage Return + NewLine \r\n

    Si ça ne convient pas alors je ne sais plus quoi faire. J'ai testé chez moi et ça marche.

    peut être si on revient vers ma soluce et on l'améliore. c'est toi qui voit

    Ne le prends pas mal, mais sur les chaînes de caractères vaut mieux utiliser les regex que les tableaux, sauf si on n'a pas le choix.
    Mais ce n'est pas le cas de Perl.
    Tu dois apprendre TMTOWTDI
    There's More Than One Way To Do It
    Il y a plusieurs façon de le faire
    0
  11. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Voilà les commentaires pour le script (les lignes qui commence avec #)

    #!/usr/bin/perl
    
    # pour l'ouverture des fichiers je ne pense pas
    # qu'il y a des problèmes
    
    open F_FILE,"leo25.txt"      or die "E/S : $!";  # ouverture en lecture
    open TEMP,">temp"            or die "E/S : $!\n";# ouverture en écriture
                                                     # d'un fichier temporaire
    
    open LIRE,"temp"             or die "E/S :$!\n"; # ouverture de fichier temporaire
                                                     # en lecture
    open RES, ">res_leo"         or die "E/S : $!\n";# ouverture de fichier
                                                     #resultat en écriture
    
    
    while( <F_FILE> ){         # je lit le fichier d'origine ligne par ligne
      s/\r?\n/ / if /noeuds/i; # si la ligne contient le mot NOEUDS
                               # j'enlève le caractère de fin de ligne 
                               # dans ton fichiers les lignes se finissent avec 
                               # Retour Chariot + Nouvelle Ligne
                               # s c'est l'operateur regex substitute (remplacer)
                               # s/\r\n/ / je remplace le caractère de fin de ligne
                               # avec un espace
                               # ce qui permet d'aligner les 2 nombres errants
      s/^\s*//;                # je supprime les espaces de début pour chaque ligne
                               # (pour l'affichage)
      print TEMP $_;           # j'écris dans le fichier temporaire
    }
    
    while (<LIRE>) {                            # je lit le fichier temporaire
      next unless /noeuds/i;                    # je saute les lignes qui
                                                # ne contient pas le mot noeuds
                                                # le modificateur i c'est pour
                                                # ne pas tenir compte
                                                # de la casse de caractères
      s/\s+/ /g if /noeuds/i;                   # je remplace les espaces
                                                # qui separent les nombres
                                                # avec un seul espace (pour affichage)
      print RES " $1\n" if /noeuds.*:\s+(.*)/i; # j'écrit le resultat dans res_leo 
    }
    
    unlink("temp");                             # suppression de fichier temporaire
    lami20j
    0
  12. leo25 Messages postés 20 Statut Membre
     
    merci lami20j;
    pour les tableaux, moi je suis aller de suite vers la premiere solution qui m'est venue a l'esprit mais bon, c'est avec les erreurs qu'on apprend.
    en ce qui concerne mon probleme, ca ne marche pas chez moi il me donne ca comme résultats;
    1 4 6 2 55 56 57 58
    1 2 7 5 55 58 59 60
    2 6 8 3 58 57 61 62
    2 3 9 7 58 62 63 59
    4 10 11 6 56 64 65 57
    5 7 13 12 60 59 66 67
    6 11 14 8 57 65 68 61
    7 9 15 13 59 63 69 66
    10 16 17 11 64 70 71 65
    11 17 18 14 65 71 72 68
    12 13 20 19 67 66 73 74
    13 15 21 20 66 69 75 73
    16 22 23 17 70 76 77 71
    17 23 24 18 71 77 78 72
    19 20 26 25 74 73 79 80
    20 21 27 26 73 75 81 79
    22 28 29 23 76 82 83 77
    23 29 30 24 77 83 84 78
    25 26 32 31 80 79 85 86
    26 27 33 32 79 81 87 85
    28 34 35 29 82 88 89 83
    29 35 36 30 83 89 90 84
    31 32 38 37 86 85 91 92
    32 33 39 38 85 87 93 91
    34 40 41 35 88 94 95 89
    35 41 42 36 89 95 96 90
    37 38 44 43 92 91 97 98
    38 39 45 44 91 93 99 97
    40 46 47 41 94 100 101 95
    41 47 48 42 95 101 102 96
    43 44 50 49 98 97 103 104
    44 45 51 50 97 99 105 103
    46 52 53 47 100 106 107 101
    47 53 54 48 101 107 108 102
    49 50 53 52 104 103 107 106
    50 51 54 53 103 105 108 107
    55 56 57 58 109 110 111 112
    55 58 59 60 109 112 113 114
    58 57 61 62 112 111 115 116
    58 62 63 59 112 116 117 113
    56 64 65 57 110 118 119 111
    60 59 66 67 114 113 120 121
    57 65 68 61 111 119 122 115
    59 63 69 66 113 117 123 120
    64 70 71 65 118 124 125 119
    65 71 72 68 119 125 126 122
    67 66 73 74 121 120 127 128
    66 69 75 73 120 123 129 127
    70 76 77 71 124 130 131 125
    71 77 78 72 125 131 132 126
    74 73 79 80 128 127 133 134
    73 75 81 79 127 129 135 133
    76 82 83 77 130 136 137 131
    77 83 84 78 131 137 138 132
    80 79 85 86 134 133 139 140
    79 81 87 85 133 135 141 139
    82 88 89 83 136 142 143 137
    83 89 90 84 137 143 144 138
    86 85 91 92 140 139 145 146
    85 87 93 91 139 141 147 145
    88 94 95 89 142 148 149 143
    89 95 96 90 143 149 150 144
    92 91 97 98 146 145 151 152
    91 93 99 97 145 147 153 151
    94 100 101 95 148 154 155 149
    95 101 102 96 149 155 156 150
    98 97 103 104 152 151 157 158
    97 99 105 103 151 153 159 157
    100 106 107 101 154 160 161 155
    101 107 108 102 155 161 162 156
    104 103 107 106 158 157 161 160
    103 105 108 107 157 159 162 161
    109 110 111 112 163 164 165 166
    109 112 113 114 163 166 167 168
    112 111 115 116 166 165 169 170
    112 116 117 113 166 170 171 167
    110 118 119 111 164 172 173 165
    114 113 120 121 168 167 174 175
    111 119 122 115 165 173 176 169
    113 117 123 120 167 171 177 174
    118 124 125 119 172 178 179 173
    119 125 126 122 173 179 180 176
    121 120 127 128 175 174 181 182
    120 123 129 127 174 177 183 181
    124 130 131 125 178 184 185 179
    125 131 132 126 179 185 186 180
    128 127 133 134 182 181 187 188
    127 129 135 133 181 183 189 187
    130 136 137 131 184 190 191 185
    131 137 138 132 185 191 192 186
    134 133 139 140 188 187 193 194
    133 135 141 139 187 189 195 193
    136 142 143 137 190 196 197 191
    137 143 144 138 191 197 198 192
    140 139 145 146 194 193 199 200
    139 141 147 145 193 195 201 199
    142 148 149 143 196 202 203 197
    143 149 150 144 197 203 204 198
    146 145 151 152 200 199 205 206
    145 147 153 151 199 201 207 205
    148 154 155 149 202 208 209 203
    149 155 156 150 203 209 210 204
    152 151 157 158 206 205 211 212
    151 153 159 157 205 207 213 211
    154 160 161 155 208 214 215 209
    155 161 162 156 209 215 216 210
    158 157 161 160 212 211 215 214
    157 159 162 161 211 213 216 215
    163 164 165 166 217 218 219 220
    163 166 167 168 217 220 221 222
    166 165 169 170 220 219 223 224
    166 170 171 167 220 224 225 221
    164 172 173 165 218 226 227 219
    168 167 174 175 222 221 228 229
    165 173 176 169 219 227 230 223
    167 171 177 174 221 225 231 228
    172 178 179 173 226 232 233 227
    173 179 180 176 227 233 234 230
    175 174 181 182 229 228 235 236
    174 177 183 181 228 231 237 235
    178 184 185 179 232 238 239 233
    179 185 186 180 233 239 240 234
    182 181 187 188 236 235 241 242
    181 183 189 187 235 237 243 241
    184 190 191 185 238 244 245 239
    185 191 192 186 239 245 246 240
    188 187 193 194 242 241 247 248
    187 189 195 193 241 243 249 247
    190 196 197 191 244 25 3

    je ne sais il a zapper le reste mais bon je vais regarder de plus prés, en ce qui concerne TIMTOWTDI, tu me conseille de passer par ca au lieu de perl ??
    merci à toi
    0
  13. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    il me donne ca comme résultats;
     1 4 6 2 55 56 57 58
    1 2 7 5 55 58 59 60
    2 6 8 3 58 57 61 62
    2 3 9 7 58 62 63 59
    4 10 11 6 56 64 65 57
    5 7 13 12 60 59 66 67 
    Ce n'est pas comme ça que tu veux?

    Que veux tu obtenir comme résultat?

    Tu veux avoir le chiffre qui se trouve à côté de S-D : ??

    TIMTOWTDI, c'est une devise des perliens
    Regarde ici http://jargonf.org/wiki/TMTOWTDI
    0
  14. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    il me donne ca comme résultats;
     1 4 6 2 55 56 57 58
    1 2 7 5 55 58 59 60
    2 6 8 3 58 57 61 62
    2 3 9 7 58 62 63 59
    4 10 11 6 56 64 65 57
    5 7 13 12 60 59 66 67 
    Ce n'est pas comme ça que tu veux?

    Que veux tu obtenir comme résultat?
    Tu veux comme ça?
    1 4 6 2 55 56 57 58 3
    1 2 7 5 55 58 59 60 1
    2 6 8 3 58 57 61 62 3
    2 3 9 7 58 62 63 59 3
    4 10 11 6 56 64 65 57 3
    5 7 13 12 60 59 66 67 3
    Si oui, prend le script de message 7 perl extraire des donnees d un fichier#7

    Tu veux avoir le chiffre qui se trouve à côté de S-D : ??

    TIMTOWTDI, c'est une devise des perliens
    Regarde ici www.linux-france.org/prj/jargonf/T/TMTOWTDI.html
    0
  15. leo25 Messages postés 20 Statut Membre
     
    merci lami20j c'est parfait, oui j'ai besoin du S-D ca ne doit pas poser de pb, par contre ce que je voulais dire ds le post précédent c'est que je crois qu'il ne met pas les 2 dernieres lignes?
    0
  16. leo25 Messages postés 20 Statut Membre
     
    merci lami20j pour cette aide mais pour l'instant je vais faire un mix de ce que j'ai fait et ce tu m'as proposé (probleme de temps) je vais m'y mettre aprés ce dead-line, je vais te soliciter encore une fois si tu veux bien.
    je dois récupérer des chiffres comme d'hab et les remettre dans un autre mais le problème c'est que il y a des chiffres qui sont avec des puissances (+ ou - ) par ex : -.727907E-01 alors j'arrive à ma question existe-t-il une fonction qui peut les ramener sans exponentielles càd ce nombre devient -0.0727907 tt simplement à savoir que il y a des nombres normalement affichés voici le fichier source
    https://www.cjoint.com/?jvxdVdhTzd

    merci one more time :)
    0
  17. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    J'ai remarqué un effet que le dernier élément pris en compte et 176 et ensuite jusqu'à 180 le script n'affiche pas les lignes concernées.

    Je n'ai pas trouver pourquoi. Pour l'instant ;)

    Pour ton problème de puissance -.727907E-01 on fait recours comme d'hab aux regex

    Pour transformer -.727907E-01 en -.727907 on peut écrire par exemple
    /E(?:-|+)\d+(\D)/$1/i 
    mais c'est à étudier

    lami20j
    0