Extraire des colonnes d'un fichier .txt
Fermé
sekkeith
Messages postés
8
Date d'inscription
mercredi 25 mars 2015
Statut
Membre
Dernière intervention
3 avril 2015
-
25 mars 2015 à 09:36
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 3 avril 2015 à 17:49
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 3 avril 2015 à 17:49
A voir également:
- Extraire des colonnes d'un fichier .txt
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Extraire une video youtube - Guide
- Fichier host - Guide
5 réponses
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié par [Dal] le 25/03/2015 à 10:34
Modifié par [Dal] le 25/03/2015 à 10:34
Salut sekkeith,
Montre nous :
- ton jeu de données de départ
- le résultat attendu par rapport à ce jeu de données
- ce qui te pose exactement problème dans le code que tu as déjà commencé à faire
Dal
Montre nous :
- ton jeu de données de départ
- le résultat attendu par rapport à ce jeu de données
- ce qui te pose exactement problème dans le code que tu as déjà commencé à faire
Dal
sekkeith
Messages postés
8
Date d'inscription
mercredi 25 mars 2015
Statut
Membre
Dernière intervention
3 avril 2015
25 mars 2015 à 11:54
25 mars 2015 à 11:54
Merci d'avoir répondu.
Mon jeu de données se présente :
"\t" DL LU TW MO
Csf x1 y1 z1 t1
Ind x2 y2 z2 t2
Tran x3 y3 z3 t3
other x4 y4 z4 t4
separées par des "\t"
format de sortie
Csf DL x1
Ind DL x2
Tran DL x3
other DL x4
Csf LU y1
Ind LU y2
Tran LU y3
other LU y4
Csf TW z1
Ind TW z2
Tran TW z3
other TW z4
Csf MO t1
Ind MO t2
Tran MO t3
other MO t4
Ainsi de suite c'est un bout, il y'a plus de lignes et plus de colonnes.
Merci encore.
Mon jeu de données se présente :
"\t" DL LU TW MO
Csf x1 y1 z1 t1
Ind x2 y2 z2 t2
Tran x3 y3 z3 t3
other x4 y4 z4 t4
separées par des "\t"
format de sortie
Csf DL x1
Ind DL x2
Tran DL x3
other DL x4
Csf LU y1
Ind LU y2
Tran LU y3
other LU y4
Csf TW z1
Ind TW z2
Tran TW z3
other TW z4
Csf MO t1
Ind MO t2
Tran MO t3
other MO t4
Ainsi de suite c'est un bout, il y'a plus de lignes et plus de colonnes.
Merci encore.
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
25 mars 2015 à 13:29
25 mars 2015 à 13:29
- ce qui te pose exactement problème dans le code que tu as déjà commencé à faire
Où es ton code problématique dans ce que tu as déjà commencé à faire ?
Dal
Où es ton code problématique dans ce que tu as déjà commencé à faire ?
Dal
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
25 mars 2015 à 15:11
25 mars 2015 à 15:11
si tu sors les lignes, cela sera plus facile, est-ce qu'une sortie comme ceci irait aussi :
etc.
Dal
NB : quand tu postes, utilise les balises de code (symbole <> à droite des boutons de l'éditeur pour des données formatées, et clique sur la flèche pointant vers le bas pour un formatage de code source dans un langage donné)
Csf DL x1
Csf LU y1
Csf TW z1
Csf MO t1
Ind DL x2
Ind LU y2
etc.
Dal
NB : quand tu postes, utilise les balises de code (symbole <> à droite des boutons de l'éditeur pour des données formatées, et clique sur la flèche pointant vers le bas pour un formatage de code source dans un langage donné)
sekkeith
Messages postés
8
Date d'inscription
mercredi 25 mars 2015
Statut
Membre
Dernière intervention
3 avril 2015
26 mars 2015 à 18:14
26 mars 2015 à 18:14
Merci pour ton attention
Peux tu me faire voir le code qui donne la structure que tu me presente?
Merci!
Voici ce que j'ai tenté d'ecrire et ça ne m'a rien donné
#!/usr/bin/perl -w
use strict;
use warnings;
open(FILE, "iea_ci_1990.txt") || die "Erreur E/S : $!\n";
my @contenu = <FILE>;
close(FILE);
open(FILE, ">fichier2.txt") || die "Erreur E/S : $!\n";
foreach (@contenu) {
my @datas = split(/\t/, $_);
for (my $n=1; $n==11;$n+=1){
print FILE "$datas[0] $datas[$n]\n";
}
}
close(FILE);
Peux tu me faire voir le code qui donne la structure que tu me presente?
Merci!
Voici ce que j'ai tenté d'ecrire et ça ne m'a rien donné
#!/usr/bin/perl -w
use strict;
use warnings;
open(FILE, "iea_ci_1990.txt") || die "Erreur E/S : $!\n";
my @contenu = <FILE>;
close(FILE);
open(FILE, ">fichier2.txt") || die "Erreur E/S : $!\n";
foreach (@contenu) {
my @datas = split(/\t/, $_);
for (my $n=1; $n==11;$n+=1){
print FILE "$datas[0] $datas[$n]\n";
}
}
close(FILE);
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
26 mars 2015 à 19:14
26 mars 2015 à 19:14
tu n'as pas mis ton code à l'intérieur de la balise code, du coup ton code n'est pas formaté.
sinon, tu dis que tu apprends Perl par tes propres moyens et que tu fais cet exercice dans le cadre de ton apprentissage... si j'écris le code à ta place, tu ne fais pas l'exercice... veux-tu vraiment que j'écrive ce code ?
avant d'écrire quoi que ce soit, pour tes données de départ, il y a un truc bizarre sur la première ligne où tu mets "\t" ... est-ce que ces caractères sont vraiment dans ta première ligne, ou est-ce que tu veux dire que la première ligne commence par une tabulation ?
en d'autres termes, tes données de départ sont du type :
ou alors comme tu l'écrivais :
(note : il y a bien une tabulation séparant chaque colonne dans les deux cas ci-dessus)
Par ailleurs, tu n'as pas répondu à cette question sur le format de sortie : https://forums.commentcamarche.net/forum/affich-31749092-extraire-des-colonnes-d-un-fichier-txt#4
Dal
sinon, tu dis que tu apprends Perl par tes propres moyens et que tu fais cet exercice dans le cadre de ton apprentissage... si j'écris le code à ta place, tu ne fais pas l'exercice... veux-tu vraiment que j'écrive ce code ?
avant d'écrire quoi que ce soit, pour tes données de départ, il y a un truc bizarre sur la première ligne où tu mets "\t" ... est-ce que ces caractères sont vraiment dans ta première ligne, ou est-ce que tu veux dire que la première ligne commence par une tabulation ?
en d'autres termes, tes données de départ sont du type :
DL LU TW MO
Csf x1 y1 z1 t1
Ind x2 y2 z2 t2
Tra x3 y3 z3 t3
oth x4 y4 z4 t4
ou alors comme tu l'écrivais :
"\t" DL LU TW MO
Csf x1 y1 z1 t1
Ind x2 y2 z2 t2
Tra x3 y3 z3 t3
oth x4 y4 z4 t4
(note : il y a bien une tabulation séparant chaque colonne dans les deux cas ci-dessus)
Par ailleurs, tu n'as pas répondu à cette question sur le format de sortie : https://forums.commentcamarche.net/forum/affich-31749092-extraire-des-colonnes-d-un-fichier-txt#4
Dal
sekkeith
Messages postés
8
Date d'inscription
mercredi 25 mars 2015
Statut
Membre
Dernière intervention
3 avril 2015
>
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
26 mars 2015 à 19:28
26 mars 2015 à 19:28
Bonsoir effectivement "\t" pour dire qu'il y a un espace
Bon vraiment si j'ai le code ça me permettra d'avancer un peu.
<#!/usr/bin/perl -w
use strict;
use warnings;
open(FILE, "iea_ci_1990.txt") || die "Erreur E/S : $!\n";
my @contenu = <FILE>;
close(FILE);
open(FILE, ">fichier2.txt") || die "Erreur E/S : $!\n";
foreach (@contenu) {
my @datas = split(/\t/, $_);
for (my $n=1; $n==11;$n+=1){
print FILE "$datas[0] $datas[$n]\n";
}
}
close(FILE);
></code>
Bon vraiment si j'ai le code ça me permettra d'avancer un peu.
<#!/usr/bin/perl -w
use strict;
use warnings;
open(FILE, "iea_ci_1990.txt") || die "Erreur E/S : $!\n";
my @contenu = <FILE>;
close(FILE);
open(FILE, ">fichier2.txt") || die "Erreur E/S : $!\n";
foreach (@contenu) {
my @datas = split(/\t/, $_);
for (my $n=1; $n==11;$n+=1){
print FILE "$datas[0] $datas[$n]\n";
}
}
close(FILE);
></code>
sekkeith
Messages postés
8
Date d'inscription
mercredi 25 mars 2015
Statut
Membre
Dernière intervention
3 avril 2015
>
sekkeith
Messages postés
8
Date d'inscription
mercredi 25 mars 2015
Statut
Membre
Dernière intervention
3 avril 2015
26 mars 2015 à 19:29
26 mars 2015 à 19:29
Je ne réussis toujours pas à l'écrire comme tu le dis.
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
27 mars 2015 à 10:24
27 mars 2015 à 10:24
salut sekkeith,
pour la 3ème fois : tu n'as pas répondu à cette question sur le format de sortie : https://forums.commentcamarche.net/forum/affich-31749092-extraire-des-colonnes-d-un-fichier-txt#4
Dal
pour la 3ème fois : tu n'as pas répondu à cette question sur le format de sortie : https://forums.commentcamarche.net/forum/affich-31749092-extraire-des-colonnes-d-un-fichier-txt#4
Dal
sekkeith
Messages postés
8
Date d'inscription
mercredi 25 mars 2015
Statut
Membre
Dernière intervention
3 avril 2015
>
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
27 mars 2015 à 12:31
27 mars 2015 à 12:31
Bonjour
le format que tu proposes est bon je le réarrangerai après:
Csf DL x1
Csf LU y1
Csf TW z1
Csf MO t1
Ind DL x2
Ind LU y2
merci !
le format que tu proposes est bon je le réarrangerai après:
Csf DL x1
Csf LU y1
Csf TW z1
Csf MO t1
Ind DL x2
Ind LU y2
merci !
sekkeith
Messages postés
8
Date d'inscription
mercredi 25 mars 2015
Statut
Membre
Dernière intervention
3 avril 2015
3 avril 2015 à 15:36
3 avril 2015 à 15:36
OK merci pour le code il marche super bien bien.Eexcuse moi j'étais en déplacement, donc pas de connexion.
Peux tu m'expliquer un peu cette séquence:
($line =~ /([^\t]+)\t(.*)/)
Peux tu m'expliquer un peu cette séquence:
($line =~ /([^\t]+)\t(.*)/)
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié par [Dal] le 3/04/2015 à 17:54
Modifié par [Dal] le 3/04/2015 à 17:54
cette ligne signifie :
- teste le contenu de
- les parenthèses opèrent une capture de ce qui matche le contenu de la parenthèse
- la première parenthèse matche, à partir du début de la ligne, un ou plusieurs caractères qui ne sont pas des tabulations :
- puis la regexp matche une tabulation
- puis la deuxième parenthèse matche tout ce qui est à la suite sur cette ligne, quel qu'en soit le contenu :
la première capture est rangée par Perl dans
comme la regexp est évaluée dans le contexte d'un test, elle sert non seulement à capturer les données, mais aussi à vérifier que le format de cette ligne correspond au format attendu
chouette, non ?
Dal
- teste le contenu de
$lineselon l'expression rationnelle qui suit
- les parenthèses opèrent une capture de ce qui matche le contenu de la parenthèse
- la première parenthèse matche, à partir du début de la ligne, un ou plusieurs caractères qui ne sont pas des tabulations :
[^\t]+(les crochets permettent d'établir une classe de caractères, dans ce contexte le
^est une négation, le
+est le quantificateur "un ou plusieurs")
- puis la regexp matche une tabulation
- puis la deuxième parenthèse matche tout ce qui est à la suite sur cette ligne, quel qu'en soit le contenu :
.*(le point signifie n'importe quel caractère et l'étoile
*est le quantificateur "0 ou plus")
la première capture est rangée par Perl dans
$1et la deuxième dans
$2.
comme la regexp est évaluée dans le contexte d'un test, elle sert non seulement à capturer les données, mais aussi à vérifier que le format de cette ligne correspond au format attendu
chouette, non ?
Dal
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
sekkeith
Messages postés
8
Date d'inscription
mercredi 25 mars 2015
Statut
Membre
Dernière intervention
3 avril 2015
3 avril 2015 à 15:40
3 avril 2015 à 15:40
Encore une fois merci pour l'aide. Aussi comment mettre un lien sur ce post du forum?
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
3 avril 2015 à 17:35
3 avril 2015 à 17:35
le lien vers le fil est indiqué dans le code source, le lien vers le post est : https://forums.commentcamarche.net/forum/affich-31749092-extraire-des-colonnes-d-un-fichier-txt#11