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 :

Extraction de données dans un fichier txt


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut Extraction de données dans un fichier txt
    Bonjour à tous,

    je souhaite récupérer certaines informations contenues dans un fichier test.txt
    Voici le contenu de ce fichier :
    Pièce jointe 196720

    Pour le moment je n'arrive qu'à ouvrir le fichier avec ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    my $FicIn = 'C:/Users/baranowp/Documents/2015_12_17_31/test.txt';
    open (FICIN,"$FicIn");
    #parcourir toutes les lignes du fichier
    my $ln_ligne = "";
    my $lue = "";
     
    while ($ln_ligne =<FICIN>) {
    		$lue++;
     
            print "ln_ligne : -$ln_ligne-\n";
    }
    Voici ce que renvoi ce code :

    Pièce jointe 196721

    Ce programme me permet de voir le contenu complet du fichier test.txt mais pas de pouvoir sélectionner certaines valeur. Est ce que faire un grep ou un split serait conseillé pour récupérer certaines information du fichiers sachant que si j'arrive à en récupérer au moins une, ça sera la mçeme méthode qui va s'appliquer pour les autres.
    Pour commencer je souhaite extraire le mot "souhaite".

    Cordialement et bonne fête de fin d'année.

  2. #2
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 969
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 969
    Points : 3 375
    Points
    3 375
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while ($ln_ligne = <FICIN>) {
        print "ln_ligne : -$ln_ligne-\n";
     
        if ($ln_ligne =~ /souhaite/ )
        {
            print "trouvé!\n";
        }
     
        ...
    }
    Si la réponse vous a aidé, pensez à cliquer sur +1

  3. #3
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    le code proposé par hotcryx te montre comment vérifier si le mot "souhaite" figure dans la ligne courante du fichier. Si tu désires récupérer certaines informations dans le fichier, il va falloir être plus précis sur ce que tu désires extraire.

    Deux petites remarques sur ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    open (FICIN,"$FicIn");
    Quand tu ouvres un fichier, il faut toujours vérifier si ça s'est bien passé et afficher un message dans le cas contraire. D'autre part, il est préférable d'utiliser une syntaxe à trois arguments et un file handle lexical. Ce qui donne la forme recommandée suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    open my $FICIN, "<", $FicIn or die "Ouverture impossible de $FicIn $!";     # $! contient le message d'erreur en cas d'échec
    Ceci implique d'utiliser la variable $FICIN pour lire le fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    while (my $ln_ligne = <$FICIN>) {      # variable  $ln_ligne locale au bloc while
        # ...
    Un dernier point, l'utilisation de la variable $lue est inutile, car Perl maintient un compteur de ligne sur les fichiers qu'il lit. Elle s'appelle $.

    Au total, on peut réécrire ton programme comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    use strict;
    use warnings;
     
    my $FicIn = 'C:/Users/baranowp/Documents/2015_12_17_31/test.txt';
    open my $FICIN, "<", $FicIn or die "Ouverture impossible de $FicIn $!"; 
    while (my $ln_ligne =<$FICIN>) {
    	print "ln_ligne numéro $. : -$ln_ligne-";  #   "\n" inutile ici car le retour à la ligne n'a pas été supprimé de $In_ligne
    }

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut Extraction de données dans un fichier txt
    Comment faire pour récuperer seulement le mot "souhaite" et pas les autres, sachant que mon programme me permet de voir le contenu du fichier.
    Moi je souhaite qu'il m'affiche uniquement le mot souhaite. Est-ce possible?

    Cordialement

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Si tu sais à l'avance le mot que tu recherches, alors il suffit de l'imprimer, mais quel est l'intérêt? A part peut-être imprimer la ligne ou le numéro de la ligne où tu l'as trouvé, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    my $recherche = "souhaite";
    my $FicIn = 'C:/Users/baranowp/Documents/2015_12_17_31/test.txt';
    open my $FICIN, "<", $FicIn or die "Ouverture impossible de $FicIn $!"; 
    while (my $in_ligne =<$FICIN>) {
    	print "Mot $recherche trouvé ligne numéro $. :\n"  if $in_ligne =~ /$recherche/;
    }
    Mais je soupçonne que tu cherches sans doute à faire quelque chose un peu plus compliqué, par exemple, disons à titre d'exemple, un mot suivant le mot "je" et suivi par le mot "récupérer" - ou le n-ième mot de la m-ième ligne. Ou sans doute autre chose. Mais cela tu ne le précises pas, donc je ne peux pas deviner.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut Extraction de données dans un fichier txt
    Ce que je souhaite faire n'est pas évident à expliquer justement.
    Je dois faire une recherche pour plusieurs fichier mais qui n'ont pas la même valeur mais qui ont la même structure par exemple :
    j'ai une facture il faut que je récupère:

    - le numéro de facture = 154825
    - le nom = Ducmol
    - la socièté = Bidon

    Sachant que je vais devoir l'appliquer à un répertoire qui ne contiendra que des factures

    Est-ce un peu plus clair ?

  7. #7
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    D'accord , rien que du très simple et du très banal, facile à faire en Perl.

    Il faut que tu nous présentes le format des lignes dans lesquelles se trouvent les éléments que tu veux récupérer (exemple de chaque type de ligne). Il sera alors très facile de déterminer les invariants de ces lignes (du genre "Facture numéro ") et leurs parties variables (le numéro de facture proprement dit) afin d'extraire ces parties variables tout en garantissant grâce aux parties invariantes que ce que l'on récupère est bien ce que l'on cherche (ici, le numéro de facture).

    Donc donne-nous au moins un ou plusieurs exemples de ces factures, ou au minimum un exemple de chacun des types de lignes dans lesquelles se trouvent les données que tu recherches, et l'on pourra te montrer comment isoler les données que tu veux récupérer.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut LangageExtraction de données dans un fichier txt
    Bonjour
    Voici deux exemples de factures :

    Pièce jointe 197428
    Pièce jointe 197427

    Elles sont au format txt, il faut récupérer:
    - le numéro de facture
    - le nom de la socièté
    - le nom de la socièté cliente
    - le numéro de client

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 161
    Points : 168
    Points
    168
    Par défaut 'Objet Régular-expressions
    slts,
    il faut utiliser l'Objet Régular-expressions

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut
    Quelle est la structure des expressions régulières ?

  11. #11
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    voici un exemple utilisant des expression régulières, et qui marche avec tes données (dont je soupçonne cependant qu'elles ne ressemble pas vraiment à tes vraies factures).
    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
     
    use strict;
    use warnings;
     
    my ($societe, $num_fact, $client, $num_cli, $next_line);
    while (<DATA>) {
    	$societe = $1 if /^Le nom de votre société\s+:\s+(\w+)/;
    	$num_fact = $1 if /^\s+F A C T U R E n°\s*(\d+)/;
    	if (/\s+Société  et\/ou  Nom  du  client :/) {
    		$next_line = <DATA> for 1..2;
    		$client = $1 if $next_line =~ /\s+(\w+)/;
    	}
    	$num_cli = $1 if /^Numéro client\s+:\s+(\d+)/;
    }
     
    print "Société: $societe\nNuméro facture: $num_fact\nClient: $client\nNuméro client: $num_cli\n";
     
     
    __DATA__
     
    Le nom de votre société  : Bidule 
                                                        F A C T U R E n°25846 
     
    Adresse : 60,rue Etienne Dollet 
    62300 Lens 
    Téléphone / Fax 
    Références Internet 
     
     
                                                      Société  et/ou  Nom  du  client : 
     
                                                      ARL 
    Référence : 1584525L 
     S
     
     
    Date          : 08/01/2016 
                                                      Adresse : 65, rue Bocquet Flochel 
     
                                                    62000 Arras 
    Numéro client     : 1862986 
     
     
     
     
    Intitulé: Description du projet et/ou Produit facturé
    A l'exécution, j'imprime bien les données que tu désires récupérer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $perl  fact.pl
    Société: Bidule
    Numéro facture: 25846
    Client: ARL
    Numéro client: 1862986

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut Extraction de données dans un fichier txt
    C'est parfait j'avais trouvé les options maintenant mais je ne savais pas comment les mettre en place.
    Il ne me reste plus qu'à indiquer le nom de la facture pour générer les différentes informations comme tu les as récupéré
    Merci
    Cordialement

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut
    Bonjour,

    J'ai exécuté mon programme expression régulière voici ce qu'il me renvoie :
    Pièce jointe 197929

    Pourtant dans mon code j'ai précisé le nom de fichier

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut
    Voici le code complet
    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
    package expression_reguliere;
    use strict;
    use warnings;
     
    sub GetFilesList
    {
            my $Path = $_[0];
            my $FileFound;
            my @FilesList=();
     
            # Lecture de la liste des fichiers
            opendir (my $FhRep, $Path)
                    or die "Impossible d'ouvrir le repertoire $Path\n";
            my @Contenu = grep { !/^\.\.?$/ } readdir($FhRep);
            closedir ($FhRep);
     
            foreach my $FileFound (@Contenu) {
                    # Traitement des fichiers
                    if ( -f "$Path/$FileFound") {
                            push ( @FilesList, "$Path/$FileFound" );
                    }
                    # Traitement des repertoires
                    elsif ( -d "$Path/$FileFound") {
                            # Boucle pour lancer la recherche en mode recursif
                            push (@FilesList, GetFilesList("$Path/$FileFound") );
                    }
     
            }
            return @FilesList;
    }
     
    my @Files = GetFilesList ('C:/Users/baranowp/Documents/2016_01_07_08/facture/');
    foreach my $File  (@Files) { 
    	 next unless $File =~ /\.txt$/i;	
    	print "$File \n";
    }
    ###################################
    ###### Expression régulière #######
    ###################################
    my $Files = 'C:/Users/baranowp/Documents/2016_01_07_08/facture/facture.txt';
    my ($societe, $num_fact, $client, $num_cli, $next_ligne);
    while (<FILES>) {
    	$societe = $1 if /^Le nom de votre société\s+:\s+(\w+)/;
    	$num_fact = $1 if /^\s+F A C T U R E n°\s*(\d+)/;
    	if (/\s+Société  et\/ou  Nom  du  client :/) {
    		$next_ligne = <FILES> for 1..2;
    		$client = $1 if $next_ligne =~ /\s+(\w+)/;
    	}
    	$num_cli = $1 if /^Numéro client\s+:\s+(\d+)/;
    }
    print "$Files";
    print "Société: $societe\nNuméro facture: $num_fact\nClient: $client\nNuméro client: $num_cli\n";

  15. #15
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    plusieurs points.

    Pourquoi faire un package alors que c'est un programme principal? Normalement, on met dans un package des fonctions, et éventuellement des variables globales et des constantes, utilisées par un autre programme. Pas grave, je pense, mais ça ne sert à rien ici.

    En l'état, les lignes 5 à 36 ne servent à rien, semble-t-il, puisque tu réinitialise une variable $Files en ligne 41, et je suppose que c'est elle que tu désires utiliser au moins pour l'instant.

    Cela dit, tu ne l'utilises pas (pas plus que le tableau @Files, d'ailleurs).

    La boucle foreach (lignes 33 à 36) ne fait rien d'utile (à part imprimer les fichiers trouvés et répondant au motif de recherche), elle ne modifie pas le tableau @Files, alors que je pense que c'est sans doute ce que tu veux faire (ne garder que les fichiers qui t'intéressent).

    Le principal problème est ligne 42: tu utilises le file handle FILES, alors qu'il n'a jamais été initialisé, il n'y a donc aucune chance que Perl puisse lire un fichier. Au minimum, il faudrait donc, juste avant, ouvrir le fichier que tu désires lire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    my $Files = 'C:/Users/baranowp/Documents/2016_01_07_08/facture/facture.txt';
    my ($societe, $num_fact, $client, $num_cli, $next_ligne);
    open FILES, "<", $Files or die "Ouverture impossible de $Files $!";
    while (<FILES>) {
        # ...
    Mais il serait mieux d'utiliser un file handle lexical et de mettre tes variables au singulier puisqu'elles ne contiennent qu'un seul nom de fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    my $File = 'C:/Users/baranowp/Documents/2016_01_07_08/facture/facture.txt';
    open my $FILE, "<", $File or die "Ouverture impossible de $File $!";
    my ($societe, $num_fact, $client, $num_cli, $next_ligne);
    while (<$FILE>) {
    	# ... etc.
    }
    print "$File";
    print "Société: $societe\nNuméro facture: $num_fact\nClient: $client\nNuméro client: $num_cli\n";
    Il y aurait d'autres choses à dire, mais, si je n'ai rien oublié de crucial, cela devrait déjà te dépanner et te permettre de faire tourner ton programme sur au moins un fichier. Vois si ça marche, on pourra ensuite modifier le code pour traiter plusieurs fichiers.

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut
    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
     
    use strict;
    use warnings; 
    my $File = 'C:/Users/baranowp/Documents/2016_01_07_08/facture/facture.txt';
    open my $FILE, "<", $File or die "Ouverture impossible de $File $!";
    my ($societe, $num_fact, $client, $num_cli, $next_ligne);
    while (<$FILE>) {
    	$societe = $1 if /^Le nom de votre société\s+:\s+(\w+)/;
    	$num_fact = $1 if /^\s+F A C T U R E n°\s*(\d+)/;
    	if (/\s+Société  et\/ou  Nom  du  client :/) {
    		$next_ligne = $FILE;
    		$client = $1 if $next_ligne =~ /\s+(\w+)/;
    		$num_cli = $1 if /^Numéro client\s+:\s+(\d+)/;}
    }
    print "$File";
    print "Société: $societe\nNuméro facture: $num_fact\nClient: $client\nNuméro client: $num_cli\n";
    voici ce qu'il se passe lorsque j'exécute ce script :
    Pièce jointe 197971

  17. #17
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    La bonne nouvelle est que, cette fois, le programme a pu lire le fichier en entrée, c'est déjà un gros progrès. Mais ces warnings signifient que le programme n'a pas réussi à récupérer les données permettant d'alimenter les variables $societe, $client, $num_fact et $num_cli.

    Autrement dit, tes expressions régulières ne correspondent sans doute pas exactement à ce qu'il y a dans le fichier facture.txt. Il faut être très précis, il suffit par exemple d'un espace en plus ou en moins pour que l'expression régulière ne puisse reconnaître les données en entrée.

    Je ne peux pas t'aider plus sans voir le fichier en entrée. Peux-tu faire un copier-coller de ce fichier ou l'attacher en pièce jointe pour que je vérifie les différences?

    Sinon, je ne peux que te conseiller de prendre connaissance de cette FAQ sur le débogage sous Perl.

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut
    Voici le fichier facture.txt
    Et je vais regarder le lien que tu as mis

  19. #19
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    OK, au moins deux problèmes.

    Tu as dans ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $num_cli = $1 if /^Numéro client\s+:\s+(\d+)/;}
    Et dans ta facture:
    client : 4852479
    Cela ne peut pas marcher.

    Et une erreur dans ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            $next_ligne = $FILE;
    alors qu'il faudrait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            $next_ligne = <$FILE>;
    Il manque aussi une accolade fermante (ou elle est mal placée):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (/\s+Société  et\/ou  Nom  du  client :/) {
    		$next_ligne = $FILE;
    		$client = $1 if $next_ligne =~ /\s+(\w+)/;
    }
    $num_cli = $1 if /^Numéro client\s+:\s+(\d+)/;}


    Normalement, après ces trois corrections, ça devrait marcher.

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut
    Bonjour,

    J'ai fait les modifications voici le nouveau mais toujours rien
    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
     
    use strict;
    use warnings; 
     
    my $File = 'C:/Users/baranowp/Documents/2016_01_07_08/facture/facture.txt';
    open my $FILE, "<", $File or die "Ouverture impossible de $File $!";
    my ($societe, $num_fact, $client, $num_cli, $next_ligne);
    while (<$FILE>) {
    	$societe = $1 if /^Le nom de votre société\s+:\s+(\w+)/;
    	$num_fact = $1 if /^\s+F A C T U R E n°\s*(\d+)/;
    	if (/\s+Société  et\/ou  Nom  du  client :/) {
    		$next_ligne = <$FILE>;
    		$client = $1 if $next_ligne =~ /\s+(\w+)/;
    }
    		$num_cli = $1 if /^N°client\s+:\s+(\d+)/;}
     
    print "$File";
    print "Société: $societe\nNuméro facture: $num_fact\nClient: $client\nN°client: $num_cli\n";
    Voici ce qu'il me renvoie :
    Pièce jointe 198054

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Extraction de données dans un fichier
    Par bbrecords dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 20/08/2006, 18h45
  2. Comment créer une base de donnée dans un fichier .txt
    Par vantoff dans le forum C++Builder
    Réponses: 9
    Dernier message: 19/07/2006, 19h44
  3. Remplacer / Supprimer des données dans un fichier txt
    Par PedroBD dans le forum Langage
    Réponses: 3
    Dernier message: 03/07/2006, 13h33
  4. Extraction de données dans un fichier texte en VB6 !
    Par rockroa dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/06/2006, 16h00
  5. Extraction de donnés dans un fichier XML
    Par ANISSS dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 27/01/2006, 13h16

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