#1 Le 27/03/2008, à 05:46
- KsPeR
[Help] Créer un tableau 2D a partir d'un fichier en Perl .
Bonjour a tous,
Je débute en perl et pour réaliser un traitement sur des valeurs contenues dans un fichier texte; j'aurais besoin des les mettre dans un tableau 2D.
Voici comment le fichier texte se présente :
premier nom 123 987 876 1452
le-deux 762 123 876
troisième/nom 762 789 0981
un (dernier) 999 526 127
...
et voici le genre le tableau que je voudrais obtenir :
@data = (["premier nom",123,987,876,1452],
["le-deux",762,123,876],
["troisième/nom",762,789,0981],
["un (dernier)",999,526,127],
... )
En gros, j'aimerais que tous les :
$data[x][O] me renvoient les noms. Et les
$data[x][y] me renvoient les valeurs. (y>0).
J'ai essayé de faire ca avec des push mais je ne m'en sors pas. les noms sont uniquements composés de lettres et caractère / , ( ) -
et les valeur uniquement des chiffres.
Si quelqu'un pouvait me donner un coup de main...
Merci
Hors ligne
#2 Le 27/03/2008, à 08:20
- KsPeR
Re : [Help] Créer un tableau 2D a partir d'un fichier en Perl .
Sinon j'ai réussi a faire un tableau comme ca :
@data=("premier nom 123 987 876 1452",
"le-deux 762 123 876",
"troisième/nom 762 789 0981",
"un (dernier) 999 526 127",
...)
mais je n'arrive pas à la transformer en tableau 2D, comme celui-ci :
@data = (["premier nom",123,987,876,1452],
["le-deux",762,123,876],
["troisième/nom",762,789,0981],
["un (dernier)",999,526,127],
... )
Hors ligne
#3 Le 27/03/2008, à 13:34
- philou8237
Re : [Help] Créer un tableau 2D a partir d'un fichier en Perl .
un ptit peu de regexp peut etre ? je sais plus comment on les utilises en perl.
Sinon, un chtit lexer....
début de boucle
Si espace et chaine non vide, ajoute la chaine à la ligne en cours, et décale d'une colonne.
Si espace et chaine vide, avance le pointeur d'un cran
Si \n, ajoute à la ligne en cours, et passe à la ligne suivante
Si char alphanum, ajouter à la chaine en cours et retour au début de la boucle.
fin de boucle
Bref un truc un peu comme ça...
Normalement ça devrait pas etre trop sorcier. Désolé de ne pouvoir t'aider plus, mais sous XP avec un poste locké... c dur !
Dernière modification par philou8237 (Le 27/03/2008, à 13:37)
Hors ligne
#4 Le 27/03/2008, à 18:00
- Saito
Re : [Help] Créer un tableau 2D a partir d'un fichier en Perl .
Bonjour,
est-ce que tu tiens à garder l'ordre des lignes de ton fichier? Sinon tu peux utiliser un hash. Si oui, il faut que tu passes par un tableau de tableau. Comme tes valeurs ne contiennent qu'une seule espace et sont séparées par plusieurs, tu peux simplement faire:
my @array;
open F, "<ton_fichier";
while (<F>)
{
my @b = split / {2,}/; # au moins deux espaces, donc on ne split pas dans un mot comme «premier nom»
push @array, [ @b ];
}
De là, «print $array[0][1]» devrait t'afficher «123 987 876 1452».
Dernière modification par Saito (Le 27/03/2008, à 18:04)
Aku-Soku-Zan_Shinsengumi
Hors ligne
#5 Le 28/03/2008, à 02:34
- KsPeR
Re : [Help] Créer un tableau 2D a partir d'un fichier en Perl .
Bonjour,
Merci pour vos réponses.
Pour l'instant j'ai réussi a faire 2 tableaux comme ca :
@nom=("premier nom",
"le-deux",
"troisième/nom",
"un (dernier)",
...)
@ID=("123 987 876 1452",
"762 123 876",
"762 789 0981",
"999 526 127",
...)
que j'ai réussi a mettre dans un seul a 2D :
for (my $i=0;$i<scalar(@nom);++$i) {
my @tmp=split(/\s/,$genID[$i]); #tableau avec les id d'une ligne
unshift(@tmp,$nom[$i]); #on ajoute le nom au debut du tableau.
@data[$i]=@tmp; #cré le tableau 2D.
}
Désolé c'est surement un peu crade mais je débute en perl (et prog on va dire) depuis quelques jours donc soyez indulgent :-)
Il reste un problème pour parcourir ce tableau.
J'ai trouvé scalar qui me donne la taille du tableau, mais je n'arrive pas a avoir la taille des sous tableaux. par exemple pour faire 2 boucles for imbriquées (je sais c'est pas génial) et parcourir la totalité du tableau.
scalar(@data[$i]);
scalar($data[$i]);
ne fonctionne pas...
si quelqu'un sait comment faire...ou bien a de meilleures idées pour la création du tableau.
Merci.
ps : une autre petite question technique : comment commenter plusieurs ligne d'un coup avec emacs ?
merci
Dernière modification par KsPeR (Le 28/03/2008, à 03:50)
Hors ligne