IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Aide pour réaliser un parseur


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Février 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 20
    Par défaut Aide pour réaliser un parseur
    Bonjour tout le monde;

    Afin de réaliser un projet, dans une étape intermédiaire entre la gestion de base de données et une études statistique. Je voudrai modifier la structure d'une table que j'ai récupérer dans un fichier (.txt) sur lequel je veux appliquer un programme qui modifiera automatiquement l'ordre et mettre l'ordre que je veux.

    Pour mieux éclaircir le problème je joint à un exemple plus parlant à ce post. Cliquez ici pour le télécharger.

    Merci d'avance

    Cordialement

    le code que j'ai fait pour l'instant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    #!/usr/bin/perl
     
    #______________________________________________________________________#
    #  nom du programme: parser.pl					       #
    #  but de programme: Réordonner le tableau de Sortie de CIWOG de tell  #
    #		   façon à ce que l'outil de clusturing puisse le lire #
    #		et l'intérprété pour faire le dendrogramme	       #
    #______________________________________________________________________#
     
    use strict;
     
    my $fichier="table.txt";
     
    my $ligne;
     
    #______________________________________________________________#
    #On commence d'abord par ouvrir le fichier de sortie à parser  #
    #______________________________________________________________#
     
    open (TABLE, $fichier) || die "Problème pour ouvrir '$fichier'";
     
    #_____________________________________________________________________#
    #On crée un nouveau fichier dans lequel on mettera le nouveau tableau #
    #Remarque:on fera le clusturing avec ce nouveau tableau		      #
    #_____________________________________________________________________#
     
    my $fic='finalTable.txt';
     
    #______________________________________________________________#
    #   On met un > devant pour créer un nouveua fichier	       #
    #______________________________________________________________#
     
    unless (open(FINALTABLE,">$fic")){
    print "imppssioble d'ouvrir le fichier $fic\n";
    exit;
    }
     
    #______________________________________________________________#
    #   parcourir le fichier de sortie de CIWOG (table.txt)	       #
    #______________________________________________________________# 
     
    while ($ligne = <TABLE>) {
     
    print $ligne;
     
    }

  2. #2
    Membre expérimenté
    Avatar de magicshark
    Homme Profil pro
    Dans une SS2I donc pas que JAVA
    Inscrit en
    Octobre 2011
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dans une SS2I donc pas que JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 133
    Par défaut
    Je ne promet rien mais pour commencer j'ai réussi à cerner le problème
    maintenant j'aimerais pour pouvoir aider avoir une ligne ou deux du fichier pour voir comment il est écrit (séparateur ....)

    nb : le contenu des ligne "exemple" ne m’intéresse pas si vous voulez les changer pas de problème.

  3. #3
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Février 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 20
    Par défaut
    Oui effectivement...le programme qui règlera le tableau d'exemple et le même que celui qui pourra régler le mien.

    Sinon mon tableau est tiré d'une table depuis une base de données.les séparateurs sont forcément des espaces ou à la rigueur des tabulations \t.



    j'ai bidouillé un peu aujourd'hui aussi mais j'ai pas ajouté grand chose.

    je vous remercie pour votre réponse. et j'espère avoir répondu clairement à vos questions!!

    à vous

  4. #4
    Membre expérimenté
    Avatar de magicshark
    Homme Profil pro
    Dans une SS2I donc pas que JAVA
    Inscrit en
    Octobre 2011
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dans une SS2I donc pas que JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 133
    Par défaut
    j'imagine que l'ont peu faire un tableau qui récupère tous les noms d'animaux (il vérifie avant si le tableau le contient ou pas)
    on aura donc un tableau de ce style
    @animaux = [][][](ou une case = un animal)
    puis nous aurons un tableau a deux dimension de classe
    @classe = [][][][] (ou une case = une classe)
    _________[][][][](animal 1)
    _________[][][][](animal 2)
    _________[][][][](animal 3)
    et après le traitements en fonction de la classe jouera avec les indice pour mettre un 1 au bon endroit
    ensuite le dernier traitement sera celui de l’affichage donc là idem on jouera avec les indice des tableaux (pas le temps de le faire maintenant je vais embaucher)

  5. #5
    Membre expérimenté
    Avatar de magicshark
    Homme Profil pro
    Dans une SS2I donc pas que JAVA
    Inscrit en
    Octobre 2011
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dans une SS2I donc pas que JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 133
    Par défaut
    j'ai pas eu le temps de tester mais vous pouvez essayer pour l’instant ça lit le fichier n°1 et ça affiche à l'écran c'est juste pour des tests j'aimerais avoir le résultat.
    N'oublier pas de commenter la ligne ou il split il y en a deux une pour le separateur espace et l'autre pour \t

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    #!/usr/bin/perl -w
     
    use strict;
     
    my @anim = ();
    my $animal;
    my $indiceAnim;
    my @classe = ();
    my $classe;
     
    my $fichier = "table.txt"; 
    my @ligne;
    my $ligne;
    my @data = ();
    my $trouve;
    my ($i,$x);
    if( ! open(FIC,$fichier) )
    {
       exit(1);
    }
    #récupération de la première ligne
    $ligne = <FIC>;
    #récupération des autres lignes.
    @ligne = <FIC>;
    foreach $ligne(@ligne)
    {
     
    	#faire un choix
    	@data = split(/\s/,$ligne);		#lorsque le séparateur est un espace
    	@data = split(/\t/,$ligne);		#lorsque le séparateur est une tabulation
     
    	$i = 0;
    	$trouve = 0;
    	while(@animal > $i && @animal[$i] != $data[0]) 
    	{
    		$i++;
    	}
    	if(@animal > $i)
    	{
    		$trouve = $i;
    	}
     
    	unless($trouve)
    	{
    		$animal[$i] = $data[0];
    	}
    	$indiceAnim = $i
    	$i = 0;
    	$trouve = 0;
    	while(@classe > $i && @classe[$i][0] != "class ".$data[1]) 
    	{
    		$i++;
    	}
    	if(@classe > $i)
    	{
    		$trouve = $i;
    	}
     
    	unless($trouve)
    	{
    		$classe[$i][0] = "class ".$data[1];
    	}
     
    	if($data[2] == "NULL")
    	{
    		$data[2] = 0;
    	}
    	else
    	{
    		$data[2] = 1;
    	}
    	if(!defined( $classe[$i][$indiceAnim] ))
    	{
    		$classe[$i][$indiceAnim] =  $data[2];
    	}
    }
    for($i=0;$i<=@animal;$i++)
    {
    	if($i==0)
    	{
    		print "ANIMAL";
    	}
    	else
    	{
    		print $animal[$i-1];
    	}
    	for($x = 0;$x < @classe;$x++)
    	{
    		print $classe[$i][$x];
    	}
    }

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    En considérant que le tableau source est fourni sur l'entrée standard du script, voici une approche utilisant une table de hashage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    use strict;
    use warnings;
    use feature qw(:5.10);
     
    # Lire la premiere ligne
    <STDIN>;
    # Lire les titres de colonnes
    my ($col1, $col2) = split /\t/, <STDIN>;
    my %animal;
    my ($max_class, $min_class) = (0);
    # Lire le contenu du tableau et renseigner %animal
    foreach my $line (<STDIN>) {
      # Lire et splitter la ligne
      my @col = split /\t/, $line;
      # Renseigner la présence pour l'animal et la classe
      $animal{$col[0]}->{$col[1]} = $col[2] eq "NULL" ? 0 : 1;
      # Chercher la classe min et max
      $min_class = $col[1] if !defined $min_class || $min_class > $col[1];
      $max_class = $col[1] if $max_class < $col[1];
    }
    # Afficher les titres de colonnes
    say join "\t", $col1, map "Class $_", $min_class .. $max_class;
    # Afficher les animaux (non triés)
    foreach my $animal (keys %animal) {
      say join "\t", $animal, map $animal{$animal}->{$_} // "undefined", $min_class .. $max_class;
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DW MX2004] Aide pour réaliser la page traitement_commande.php
    Par hoangeric dans le forum Dreamweaver
    Réponses: 3
    Dernier message: 29/06/2007, 23h22
  2. demande aide pour réaliser mcd merise
    Par hugue dans le forum Schéma
    Réponses: 1
    Dernier message: 30/04/2007, 17h39
  3. Réponses: 5
    Dernier message: 22/02/2007, 12h09
  4. Réponses: 8
    Dernier message: 03/11/2005, 08h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo