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

Programmation et administration système Perl Discussion :

Problème récupération de données perl


Sujet :

Programmation et administration système Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Par défaut Problème récupération de données perl
    Bonjour,
    Je me permet de poster un message concernant un script que je dois réaliser. Mon script demande comme première question, on doit rentrer un nombre d'un chiffre ou deux. Déja il y'a un problème... Lorsque je met un nombre de 3 chiffres ça me cherche le fichier. Ensuite, je doit récupérer un nombre de 7 chiffres dans un fichier texte. Il me le récupère mais j'ai le texte avant mon nombre...
    De plus, j'ai mis en place une option modifier, donc le nombre de 7 chiffre je veux le modifier par le nombre que je rentre
    Je vous donne mon code, ça serait sympa de regarder mon code et voir les incohérences que j'ai cité avant.
    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
     
    #!/usr/bin/perl -w
    use strict;
    my $nombre;
    my @nb;
    my @na;
    my $i;
    print "Which TT want to see? \n";
    $nombre = <STDIN>; #saisie au clavier
    chomp($nombre);
    	if($nombre =~ /\d{1,2}/){
    					}
    	else{
    		print "Which TT want to see? \n";
    		$nombre = <STDIN>; #saisie au clavier
    		chomp($nombre);
    }
    open (my $in,"<", "fichier$nombre.txt") || die "Le fichier n'existe pas !\n";
    while(my $tablignes =<$in>)
    {
    	my @mot = split (' ',$tablignes); #on sépare
    	foreach my $nombre(@mot){
    	if($nombre =~ /\d{7}/){ #reggex utilisé pour les nombres
    	push(@nb,$nombre);
    	}
    							}	
    }
    print"Le device ID de la TT $nombre est le suivant @nb\n";
    print "Which TT want to Modify (1), Verify (2) or exit (3) \n";
    $i = <STDIN>;
    if ($i == 1) {modify();}
    if ($i == 2) {verify();}
    if ($i == 3) {exit();}
    sub modify{
    open (my $out,">", "fichier$nombre.txt") || die "Le fichier ne peut être édité !\n";
    open (my $var, "information.txt");
    	my @motus = <$var>;
    	foreach my $line(@motus){
    	chomp ($line);
    	print " $line \n";
    	close $var;
    }
    print"Le tableau: @na \n";
    print "New Device ID? \n";
    my $new = <STDIN>;
    chomp ($new);
    if($new =~ /\^d{7}/){
    					}
    else{
    	print "Retry, write the new device ID? \n";
    	$new = <STDIN>; #saisie au clavier
    	chomp($new);
    }
    print"Le device ID de la TT $nombre est le suivant @nb\n";
    close $out;
    }
    sub verify{
    open (my $var, "information.txt");
    	my @motus = <$var>;
    	foreach my $line(@motus){
    	chomp ($line);
    	print " $line \n";
    	close $var;
    }
    }
    close $in;

  2. #2
    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
    Bonjour et bienvenu

    Ton premier test n'est pas suffisant restrictif :
    En effet, si $nombre contient 1 ou deux chiffres, le test est validé, mais un nombre qui contient trois chiffre en contient aussi deux.
    Pour être plus restrictif, il faudrait que tu indiques que le chiffre ne peut contenir, entre le début et la fin, que 2 chiffres au maximum.
    Par exemple en écrivant :
    Ensuite, pour ta deuxième regexp, tu voudrais ne sélectionner que les 7 chiffres qui correspondent au motif \d{7}, mais ton tester n'extrait pas cette information, il fournit juste l'information que sept chiffres existent dans la variable $nombre.
    Pour récupérer ces sept chiffres, tu dois faire une capture, et la récupérer. Par exemple, écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ((my $sept_chiffres) = $nombre =~ /(\d{7})/) {
      push(@nb, $sept_chiffres);
    }

  3. #3
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Par défaut
    Merci pour cette précieuse aide Du coup tous mes problèmes sont résolus.
    Cependant, il me reste à mettre à remplacer les 7 chiffres dans mon fichier texte par les 7 nouveaux chiffres que je demande quand je modifie ce nombre. Je suis bloqué...

  4. #4
    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
    Et bien, utilise l'opérateur de modification des regexp : s///
    (voir documentation : perl perlop)

  5. #5
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Par défaut
    Merci beaucoup pour ton aide. Dernière question j'espère ^^
    Je ne comprend pas comment le faire?? Je voudrais remplacer le Device ID trouvé par le le nouveau Device ID lorsque je rentre dans la fonction modifier. Dans mon programme, lorsque je rentre le nouveau device ID cela me supprime tout mon fichier texte et met à la place le device ID.... Es ce quelqu'un pourrait m'aider et me signaler les lignes qui ne correspondent pas dans mon code
    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
     
    #!/usr/bin/perl -w
    use strict;
    my $nombre;
    my @nb;
    my @na;
    my $i;
    print "Which TT want to see? \n";
    $nombre = <STDIN>; #saisie au clavier
    chomp($nombre);
    	if($nombre =~ /^\d{1,2}$/){ 
    					}
    	else{
    		print "Which TT want to see? \n";
    		$nombre = <STDIN>; #saisie au clavier
    		chomp($nombre);
    }
    open (my $in,"<", "fichier$nombre.txt") || die "Le fichier n'existe pas !\n";
    while(my $tablignes =<$in>)
    {
    	my @mot = split (' ',$tablignes); #on sépare
    	foreach my $nombre(@mot){
    	if ((my $sept_chiffres) = $nombre =~ /(\d{7})/) 
    	{
    	push(@nb, $sept_chiffres);
    	}
    	}
    							}	
     
    print"Le device ID de la TT $nombre est le suivant @nb\n";
    print "Which TT want to Modify (1), Verify (2) or exit (3) \n";
    $i = <STDIN>;
    if ($i == 1) {modify();}
    if ($i == 2) {verify();}
    if ($i == 3) {exit();}
    sub modify{
    open (my $out,">", "fichier$nombre.txt") || die "Le fichier ne peut être édité !\n";
    open (my $var, "information.txt");
    	my @motus = <$var>;
    	foreach my $line(@motus){
    	chomp ($line);
    	print " $line \n";
    	close $var;
    }
    print"Le tableau: @na \n";
    print "New Device ID? \n";
    my $new = <STDIN>;
    chomp ($new);
    if($new =~ /\^d{7}/){
    					}
    else{
    	print "Retry, write the new device ID? \n";
    	$new = <STDIN>; #saisie au clavier
    	chomp($new);
    }
    print $out "$new"; 
    print"Le device ID de la TT $nombre est le suivant @nb\n";
    close $out;
    }
    sub verify{
    open (my $var, "information.txt");
    	my @motus = <$var>;
    	foreach my $line(@motus){
    	chomp ($line);
    	print " $line \n";
    	close $var;
    }
    }
    close $in;

  6. #6
    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
    Billets dans le blog
    1
    Par défaut
    En principe, tu ne peux pas modifier directement un fichier. Il faut faire un fichier temporaire et faire les renommages voulus ensuite. Ou alors lire le fichier, le charger entièrement en mémoire, fermer le fichier et rouvrir en écriture et réécrire ce que tu as en mémoire.

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

Discussions similaires

  1. problème récupération de données en liaison série
    Par prison_break dans le forum C++Builder
    Réponses: 4
    Dernier message: 27/06/2007, 08h51
  2. [VB6] Problème récupération de données
    Par valie dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 29/08/2006, 12h36
  3. problème récupération de données dans des fichiers .DAT
    Par indymontpellier dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/04/2006, 07h54
  4. [MySQL] Problème récupération de données avec un SELECT DISTINCT
    Par 12_darte_12 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/07/2005, 14h48
  5. [Débutant] Problème récupération de données
    Par flogreg dans le forum Servlets/JSP
    Réponses: 26
    Dernier message: 20/08/2004, 17h29

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