Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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],
                 ... )

mad

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 ! hmm

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