[PERL] Extraire des donnees d'un fichier.

Fermé
leo25 Messages postés 20 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 17 septembre 2007 - 19 sept. 2006 à 00:49
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 22 sept. 2006 à 17:27
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
A voir également:

17 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
19 sept. 2006 à 06:54
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
leo25 Messages postés 20 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 17 septembre 2007
19 sept. 2006 à 10:13
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
19 sept. 2006 à 10:45
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
leo25 Messages postés 20 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 17 septembre 2007
19 sept. 2006 à 12:15
Re,
voici le lien https://www.cjoint.com/?jtmgw7xvzQ du fichier que je dois traiter
et je dois arriver a qcq chose comme ca https://www.cjoint.com/?jtmovJ3qHl
merci à toi :)
0
leo25 Messages postés 20 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 17 septembre 2007
19 sept. 2006 à 17:19
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
20 sept. 2006 à 12:01
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
leo25 Messages postés 20 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 17 septembre 2007
21 sept. 2006 à 12:03
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
21 sept. 2006 à 12:15
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
leo25 Messages postés 20 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 17 septembre 2007
21 sept. 2006 à 15:23
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
21 sept. 2006 à 15:27
Ok, je t'expliqurai ce soir.

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

lami20j
0
leo25 Messages postés 20 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 17 septembre 2007
21 sept. 2006 à 15:53
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
leo25 Messages postés 20 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 17 septembre 2007
21 sept. 2006 à 17:16
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
21 sept. 2006 à 18:49
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
21 sept. 2006 à 19:11
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
leo25 Messages postés 20 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 17 septembre 2007
21 sept. 2006 à 20:39
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
21 sept. 2006 à 20:45
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
21 sept. 2006 à 20:46
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
leo25 Messages postés 20 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 17 septembre 2007
21 sept. 2006 à 21:00
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
leo25 Messages postés 20 Date d'inscription lundi 18 septembre 2006 Statut Membre Dernière intervention 17 septembre 2007
21 sept. 2006 à 23:04
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
22 sept. 2006 à 17:27
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