[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
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
A voir également:
- [PERL] Extraire des donnees d'un fichier.
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Extraire une video youtube - Guide
- Ouvrir un fichier .bin - Guide
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 569
19 sept. 2006 à 06:54
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.
à 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 1Ou 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 1lami20j
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
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
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
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 569
19 sept. 2006 à 10:45
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
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
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
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 :)
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 :)
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
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 :)
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 :)
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 569
20 sept. 2006 à 12:01
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
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
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
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
merci bcp
PS: j'aurais surement des questions a te poser
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 569
21 sept. 2006 à 12:15
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
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
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
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 .
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 .
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 569
21 sept. 2006 à 15:27
21 sept. 2006 à 15:27
Ok, je t'expliqurai ce soir.
Cependant tu as testé le code? Ca te va?
lami20j
Cependant tu as testé le code? Ca te va?
lami20j
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
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 .
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 .
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
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
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
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 569
21 sept. 2006 à 18:49
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
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
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 320lami20j
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
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 569
21 sept. 2006 à 19:11
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 temporairelami20j
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
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
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
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 569
21 sept. 2006 à 20:45
21 sept. 2006 à 20:45
il me donne ca comme résultats;
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
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 67Ce 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
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 569
21 sept. 2006 à 20:46
21 sept. 2006 à 20:46
il me donne ca comme résultats;
Que veux tu obtenir comme résultat?
Tu veux comme ça?
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
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 67Ce 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 3Si 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
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
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?
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
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 :)
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 :)
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 569
22 sept. 2006 à 17:27
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
lami20j
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/imais c'est à étudier
lami20j