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 :

aider moi pour rendre ce code plus claire


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 54
    Points : 47
    Points
    47
    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
    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
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    use strict;
    use warnings;
     
    #my $file = $ARGV[0];
    my ($i,$TIMESTAMP,$AUTHOR,$file_name,$spreadsheet);
    my $SCRIPTNAME = $0;
    my $where = `pwd`;
    my @file =();
    my @endpoint=();
    my @ports=();
    my @result=();
    my @from_clk=();
    chomp ($where);
    $TIMESTAMP = `date`;
    chomp($TIMESTAMP);
    $AUTHOR = `whoami`;
    chomp($AUTHOR);
     
    #-------------------------------------------------------------------------------
    # Execution Order
    #-------------------------------------------------------------------------------
    PROCESS_ARGS();
    print "-------------------------------------------------------------------------\n";
    print "$file_name\n"; 
    print "-------------------------------------------------------------------------\n";
     
    #-------------------------------------------------------------------------------
    # PROCESS_ARGS
    #-------------------------------------------------------------------------------
    # Command line processor
    sub PROCESS_ARGS {
    my $ARGV = @ARGV;
    while (@ARGV) {
    $ARGV = shift @ARGV;
    # Files can be compared directly ::
    if ($ARGV eq "-file") {
    $file_name = shift @ARGV;
    }
    elsif ($ARGV eq "-spreadsheet") {
    $spreadsheet = shift @ARGV;
    }
    elsif ($ARGV eq "-h") {
    USAGE();
    }
    else {
    USAGE();
    }
    }
    }
    #############################################################################
    # open file for read
    #############################################################################
    open(FILE,"<$file_name") || die "ERROR: the file $file_name not found\n";
    open(OUT ,">$where/$spreadsheet") || die "ERROR: the file $file_name found\n";
    print OUT "Creation Date :\t\t $TIMESTAMP\n\n";
    print OUT "Author :\t \t $AUTHOR\n\n";
    print OUT "Nom du script :\t \t $SCRIPTNAME \n\n";
    print OUT "\n"; # Add csv sep's for the date's
    @file= <FILE>;
    for($i=0; $i<$#file+1 ;$i ++)
    {
    if ($file[$i]=~ s/^\s*-+\s*$//)
    {
    next;
    }
     
    if ($file[$i] =~ s/^\s*-+\s*$//)
    {
    next;
    }
    ### Ignire commented out line
    if ($file[$i]=~ /^#.*$/)
    {
    next;
    }
     
    ### Ignorer la dernier ligne
    if ($file[$i] =~ s/^\d*//)
    {
    next;
    }
    if ($file[$i] =~ s/^#//)
    {
    next;
    }
    for ($i =0; $i<$#file+1 ;$i ++) {
     
    print OUT "$file[$i] \n";
     
    }
     
    close FILE;
    close OUT;
    #-------------------------------------------------------------------------------
    # USAGE
    #-------------------------------------------------------------------------------
    sub USAGE {
    print "\n";
    print "================================================================================\n";
    print "\n";
    print "Function : This script is designed to parse multiple PrimeTime constraint report\n";
    print " files and correlate the data into a spreasheet format for analysis.\n";
    print "\n";
    print "Usage : $SCRIPTNAME [options] \n";
    print "\n";
    print "Options : -h Displays help message.\n";
    print " -file <filename> Specify PrimeTime report files explicitly\n";
    print " -spreadhseet <csv file> Output to CSV spreadsheet, default = stdout\n";
    print "\n";
    print "Syntax : \n";
    print " $SCRIPTNAME -file <file> [-file <file> ...] [options]\n";
    print "\n";
    print " options: [-spreadsheet <csv file>]]\n";
    print "\n";
    print "Examples : \n";
    print " $SCRIPTNAME -file mon_text -spreadsheet spreadsheet.csv \n";
    exit (0);
    }
    comme vous voyez ce code permet de copie du texte vers un autre fichier qu
    on rentre en argument

    je vous invite a participer a cette discussion!

  2. #2
    Membre éclairé Avatar de messinese
    Homme Profil pro
    IT Security Consultant
    Inscrit en
    Septembre 2007
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IT Security Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 429
    Points : 877
    Points
    877
    Par défaut
    Bonjour,

    présenté comme ça pas sur qu'il y ait foule pour aider , merci d'employer les balises "code" appropriée :

    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
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    use strict;
    use warnings;
     
    #my $file = $ARGV[0];
    my ($i,$TIMESTAMP,$AUTHOR,$file_name,$spreadsheet);
    my $SCRIPTNAME = $0;
    my $where = `pwd`;
    my @file =();
    my @endpoint=();
    my @ports=();
    my @result=();
    my @from_clk=();
    chomp ($where);
    $TIMESTAMP = `date`;
    chomp($TIMESTAMP);
    $AUTHOR = `whoami`;
    chomp($AUTHOR);
     
    #-------------------------------------------------------------------------------
    # Execution Order
    #-------------------------------------------------------------------------------
    PROCESS_ARGS();
    print "-------------------------------------------------------------------------\n";
    print "$file_name\n"; 
    print "-------------------------------------------------------------------------\n";
     
    #-------------------------------------------------------------------------------
    # PROCESS_ARGS
    #-------------------------------------------------------------------------------
    # Command line processor
    sub PROCESS_ARGS {
    my $ARGV = @ARGV;
    while (@ARGV) {
    $ARGV = shift @ARGV;
    # Files can be compared directly ::
    if ($ARGV eq "-file") {
    $file_name = shift @ARGV;
    }
    elsif ($ARGV eq "-spreadsheet") {
    $spreadsheet = shift @ARGV;
    }
    elsif ($ARGV eq "-h") {
    USAGE();
    }
    else {
    USAGE();
    }
    }
    }
    #############################################################################
    # open file for read
    #############################################################################
    open(FILE,"<$file_name") || die "ERROR: the file $file_name not found\n";
    open(OUT ,">$where/$spreadsheet") || die "ERROR: the file $file_name found\n";
    print OUT "Creation Date :\t\t $TIMESTAMP\n\n";
    print OUT "Author :\t \t $AUTHOR\n\n";
    print OUT "Nom du script :\t \t $SCRIPTNAME \n\n";
    print OUT "\n"; # Add csv sep's for the date's
    @file= <FILE>;
    for($i=0; $i<$#file+1 ;$i ++)
    {
    if ($file[$i]=~ s/^\s*-+\s*$//)
    {
    next;
    }
     
    if ($file[$i] =~ s/^\s*-+\s*$//)
    {
    next;
    }
    ### Ignire commented out line
    if ($file[$i]=~ /^#.*$/)
    {
    next;
    }
     
    ### Ignorer la dernier ligne
    if ($file[$i] =~ s/^\d*//)
    {
    next;
    }
    if ($file[$i] =~ s/^#//)
    {
    next;
    }
    for ($i =0; $i<$#file+1 ;$i ++) {
     
    print OUT "$file[$i] \n";
     
    }
     
    close FILE;
    close OUT;
    #-------------------------------------------------------------------------------
    # USAGE
    #-------------------------------------------------------------------------------
    sub USAGE {
    print "\n";
    print "================================================================================\n";
    print "\n";
    print "Function : This script is designed to parse multiple PrimeTime constraint report\n";
    print " files and correlate the data into a spreasheet format for analysis.\n";
    print "\n";
    print "Usage : $SCRIPTNAME [options] \n";
    print "\n";
    print "Options : -h Displays help message.\n";
    print " -file <filename> Specify PrimeTime report files explicitly\n";
    print " -spreadhseet <csv file> Output to CSV spreadsheet, default = stdout\n";
    print "\n";
    print "Syntax : \n";
    print " $SCRIPTNAME -file <file> [-file <file> ...] [options]\n";
    print "\n";
    print " options: [-spreadsheet <csv file>]]\n";
    print "\n";
    print "Examples : \n";
    print " $SCRIPTNAME -file mon_text -spreadsheet spreadsheet.csv \n";
    exit (0);
    }

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 63
    Points : 75
    Points
    75
    Par défaut
    Merci messinese pour la balise "code".

    Sinon quel est le problème ? C'est plus facile à résoudre quand on le connaît ^^

    Pour le rendre plus clair tu entend quoi ??

    EDIT :
    Alors j'ai un peu indenté le code de façon à ce qu'il soit plus lisible et je remarque qu'il ne fonctionnera pas...

    Quelques petits oublis je pense, j'ai pas essayé de compiler car je n'ai pas perl sur cette machine mais voici le code indenté et avec quelques corrections.

    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
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    use strict;
    use warnings;
     
    #my $file = $ARGV[0];
    my ($i,$TIMESTAMP,$AUTHOR,$file_name,$spreadsheet);
    my $SCRIPTNAME = $0;
    my $where = `pwd`;
     
    my @file =();
    my @endpoint=();
    my @ports=();
    my @result=();
    my @from_clk=();
     
    chomp ($where);
    $TIMESTAMP = `date`;
    chomp($TIMESTAMP);
    $AUTHOR = `whoami`;
    chomp($AUTHOR);
     
    #-------------------------------------------------------------------------------
    # Execution Order
    #-------------------------------------------------------------------------------
    PROCESS_ARGS();
    print "-------------------------------------------------------------------------\n";
    print "$file_name\n"; 
    print "-------------------------------------------------------------------------\n";
     
    #-------------------------------------------------------------------------------
    # PROCESS_ARGS
    #-------------------------------------------------------------------------------
    # Command line processor
    sub PROCESS_ARGS {
    					my $ARGV = @ARGV;
    					while (@ARGV) {
    						$ARGV = shift @ARGV;
    # Files can be compared directly ::
    						if ($ARGV eq "-file") {
    							$file_name = shift @ARGV;
    						}
    						elsif ($ARGV eq "-spreadsheet") {
    							$spreadsheet = shift @ARGV;
    						}
    						elsif ($ARGV eq "-h") {
    							USAGE();
    						}
    						else {
    							USAGE();
    						}
    					}
    				}
     
     
    #############################################################################
    # open file for read
    #############################################################################
    open(FILE,"<$file_name") || die "ERROR: the file $file_name not found\n";
    open(OUT ,">$where/$spreadsheet") || die "ERROR: the file $file_name found\n";
     
    print OUT "Creation Date :\t\t $TIMESTAMP\n\n";
    print OUT "Author :\t \t $AUTHOR\n\n";
    print OUT "Nom du script :\t \t $SCRIPTNAME \n\n";
    print OUT "\n"; # Add csv sep's for the date's
     
    @file= <FILE>;
    for($i=0; $i<$#file+1 ;$i ++){
    	if ($file[$i]=~ s/^\s*-+\s*$//){
    		next;	
    	}
    	if ($file[$i] =~ s/^\s*-+\s*$//){
    		next;
    	}
    ### Ignire commented out line
    	if ($file[$i]=~ /^\#.*$/){
    		next;
    	}
    ### Ignorer la dernier ligne
    	if ($file[$i] =~ s/^\d*//){
    		next;
    	}
    	if ($file[$i] =~ s/^\#//){
    		next;
    	}
    	for ($i =0; $i<$#file+1 ;$i ++){
    		print OUT "$file[$i] \n";
    	}
    }
    close FILE;
    close OUT;
    #-------------------------------------------------------------------------------
    # USAGE
    #-------------------------------------------------------------------------------
    sub USAGE	{
    				print "\n";
    				print "================================================================================\n";
    				print "\n";
     
    				print "Function : This script is designed to parse multiple PrimeTime constraint report\n";
    				print " files and correlate the data into a spreasheet format for analysis.\n";
     
    				print "\n";
     
    				print "Usage : $SCRIPTNAME [options] \n";
     
    				print "\n";
     
    				print "Options : -h Displays help message.\n";
    				print " -file <filename> Specify PrimeTime report files explicitly\n";
    				print " -spreadhseet <csv file> Output to CSV spreadsheet, default = stdout\n";
     
    				print "\n";
     
    				print "Syntax : \n";
    				print " $SCRIPTNAME -file <file> [-file <file> ...] [options]\n";
     
    				print "\n";
     
    				print " options: [-spreadsheet <csv file>]]\n";
     
    				print "\n";
     
    				print "Examples : \n";
    				print " $SCRIPTNAME -file mon_text -spreadsheet spreadsheet.csv \n";
     
    				exit (0);
    			}
    J'ai rajouté lignes 74 et 81 un \ devant le # sinon le compilateur va râler et dire qu'il manque une parenthèse ou un truc du genre, en effet si on oublie la protection la suite sera commentée et le if faut.
    J'ai aussi fermé la boucle for qui commence ligne 66, elle restait ouverte.

    J'ai lu en diagonale le code car je suis pressé là et j'ai vu ces 3 petits trucs.

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 71
    Points : 87
    Points
    87
    Par défaut re
    re,

    deja pour le $where, plutot que d'utiliser pwd, regarde du coté de Find::Bin qui te donnera le dossier du programme Perl

    ( a voir si ton fichier enregistré est dans le meme dossier )

    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 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for ($i =0; $i<$#file+1 ;$i ++){
    		print OUT "$file[$i] \n";
    	}
    se trouve semble-t-il à l'intérieur de l'autre boucle for. Ce n'est sans doute pas ce que tu souhaites.


    Par ailleurs, si tu veux simplifier le code, utilise les idioms Perl au lieu d'une syntaxe de type C.

    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
    for($i=0; $i<$#file+1 ;$i ++){
    	if ($file[$i]=~ s/^\s*-+\s*$//){
    		next;	
    	}
    	if ($file[$i] =~ s/^\s*-+\s*$//){
    		next;
    	}
    ### Ignire commented out line
    	if ($file[$i]=~ /^\#.*$/){
    		next;
    	}
    ### Ignorer la dernier ligne
    	if ($file[$i] =~ s/^\d*//){
    		next;
    	}
    	if ($file[$i] =~ s/^\#//){
    		next;
    	}
    	for ($i =0; $i<$#file+1 ;$i ++){
    		print OUT "$file[$i] \n";
    	}
    }
    peut se réécrire ainsi (en corrigeant le bug mentionné plus haut) et en ajoutant un chomp pour enlever le retour chariot:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    chomp @file; # commande ajoutée pour enlever le retour à la fin des lignes
    foreach (@file){
    	next if  s/^\s*-+\s*$//);
            next if  s/^\s*-+\s*$//);
    ### Ignore commented out line
    	next if  /^\#.*$/);
    ### Ignorer la dernier ligne
    	next if s/^\d*//);
    	next if  s/^\#//);
    }
    foreach (@file){
    	print OUT "$_\n";
    	}

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 54
    Points : 47
    Points
    47
    Par défaut
    avant de donner des commentaires a vos remarque je voudrais une instruction regexp qui me permet de faire la fodification suivante
    dans un ligne j ai le message suisvant:
    blabla blabla : blabla blabla message 'que je veux garder'
    je veux une regexp qui permet d enlevé tt il me garde juste le message entre simple quotes
    merci

  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 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    tu peux faire, en supposant qu'il y a une seule chaîne entre quotes, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ligne =~ /'([^']+)'/;
    my $message_a_garder = $1;
    La regex cherche: un quote, un à n caractères quelconques autres qu'un quote, un quote. Les parentèses permettent de capturer la partie à garder dans $1.

    Ou, si tu veux directement modifier la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ligne =~ s/^[^']*'([^']+)'.*$/$1/;
    Cordialement,

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 54
    Points : 47
    Points
    47
    Par défaut
    Bonjour
    j'ai essayé cette instruction mai ca n’as pas marché
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
        if ($file[$i]=~ s/^\s*[a-z]:\s*[a-z]\s*'[a-z]'\s*//i)
         { # $file[$i] je veux garder le meme test "if"
         }
    je veux passe du ligne contient :
    Information: Checking 'data_check_multiple_clock'.
    au
    data_check_multiple_clock

    Merci

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 54
    Points : 47
    Points
    47
    Par défaut
    merci infiniment Mr Lolo 78
    le deuxieme a bien fonctionner

  10. #10
    Membre éclairé Avatar de messinese
    Homme Profil pro
    IT Security Consultant
    Inscrit en
    Septembre 2007
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IT Security Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 429
    Points : 877
    Points
    877
    Par défaut
    Désolé si je me trompe mais c'est pas de l'aide que tu recherche c'est du tout fait sans chercher quoi que ce soit ,non?? En tout cas ça y ressemble !

    ici tu as une doc sur les regexp perl , ce que tu cherche a faire n'est pas bien compliqué donc avec un peu de bonne volontée.... Tu peux le faire !!

    Désolé du post mais je pouvais pas faire autrement.

    A+

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 54
    Points : 47
    Points
    47
    Par défaut
    j ai une idée tres interesante je veux de l'aid
    dans un fichier j'ai des donnée suivantes:
    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
    Ports
    ------------------------------------------------------------
    ARADDRS[0]
    ARADDRS[1]
    ARADDRS[2]
    ARADDRS[3]
    ARADDRS[4]
    ARADDRS[5]
    ARADDRS[6]
    ARADDRS[7]
    ARADDRS[8]
    ARADDRS[9]
    ARADDRS[10]
    ARADDRS[11]
    ARADDRS[12]
    ARADDRS[13]
    ARADDRS[14]
    ARADDRS[15]
    ARADDRS[16]
    ARADDRS[17]
    ARADDRS[18]
    ARADDRS[19]
    ARADDRS[20]
    ARADDRS[21]
     
    Endpoint
    ------------------------------------------------------------
    ARADDRM[0]
    ARADDRM[1]
    ARADDRM[2]
    ARADDRM[3]
    ARADDRM[4]
    ARADDRM[5]
    ARADDRM[6]
    ARADDRM[7]
    ARADDRM[8]
    ARADDRM[9]
    ARADDRM[10]
    ARADDRM[11]
    ARADDRM[12]
    ARADDRM[13]
    ARADDRM[14]
    ARADDRM[15]
    ARADDRM[16]
    ARADDRM[17]
    ARADDRM[18]
    ARADDRM[19]
    ARADDRM[20]
     
    Clock Pin
    ------------------------------------------------------------
    LOCKU
    je veux une un script qui permer de copie les porte et les mettre dans un ficheir et de copie les donnée de endpoint et les mettre dans un autre ficheir
    meme choses pour cloch pin
    merci

  12. #12
    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 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    C'est extrêmement simple à faire, tu devrais essayer par toi-même.

    Piste: tu ouvres ton fichier en entrée et tes trois fichiers en sortie. Tu lis les données en entrée et le copie dans le bon fchier en sortie tant que tu ne rencontres pas "endpoint". Quand tu rencontres endpoint, tu changes de fichier de sortie et tu copies dans ce nouveau fichier de sortie tant que tu ne rencontres pas "Clockpin". etc.

  13. #13
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 54
    Points : 47
    Points
    47
    Par défaut
    merci pour l'indication

  14. #14
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 54
    Points : 47
    Points
    47
    Par défaut
    bonjour j ai eux du mal a faire une boucle "for et fait tt ce teste de dont" si tu peu me donne un teste plus simple
    merci d'avance

  15. #15
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 54
    Points : 47
    Points
    47
    Par défaut
    re
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Open(FILE,"<$SEARCH_PATH/$file_name") || die "ERROR: the file $file_name not found\n";
    open(OUTPORT ,">$where/$spreadsheet_ports") || die "ERROR: the file $file_name found\n";
    open(OUTENDP ,">$where/$spreadsheet_endpoint") || die "ERROR: the file $file_name found\n";
    open(OUTPIN ,">$where/$spreadsheet_pin_clock") || die "ERROR: the file $file_name found\n";
     
    @file= <FILE>;
     
    for ($i =0; $i<$#file+1 ;$i ++) {
     
    OUTPORT print  "$ports[$i] \n" while ($file[$i] !~ /^endpoint$/i);
    OUTENDP print  "$ports[$i] \n" while ($file[$i] !~ /^clock_pin$/i);
    OUTPIN print  "$ports[$i] \n"; 
         }
    ce code peut faire l'affaire?!

  16. #16
    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 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Non, bien sûr, ta syntaxe est fausse.

    C'est plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     print OUTFIle if $toto;
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print OUTFILE unless $titi;
    Avec $toto ou $titi des booléens sur l'état du système.

  17. #17
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 54
    Points : 47
    Points
    47
    Par défaut
    bonjour j ai fais un traitement aparament ca n'as pa marche si vous pouvez m'indiqué ou est l'erreur
    voila la boucle qui permet de faire ce traitement
    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
     
    open(FILE,"<$SEARCH_PATH/$file_name") || die "ERROR: the file $file_name not found\n";
    open(OUTPORT ,">$where/$spreadsheet") || die "ERROR: the file $file_name found\n";
    open(OUTENDP ,">$where/\_kk$spreadsheet") || die "ERROR: the file $file_name found\n";
     
        @file=<FILE>;
     
           #for ($i =0; $i<$#file+1 ;$i++)
           {
     
           if ($file[$i] =~ /^Ports$/i)
           {
           $ports=shift (@file);
           push (@ports,$ports);
                  }
    	next if ($file[$i] =~ /^Endpoint$/i);
          }
     
           for ($i =0; $i<$#file+1 ;$i++)
           {   if ($file[$i] =~ /^Endpoint$/i) {
           push (@endpoint,shift @file);
            }
    	 next if ($file[$i] =~ /^Clock\s*Pin$/i);
            }
     
           for ($i =0; $i<$#file+1 ;$i++)
           {
           print OUTPORT  "$file[$i] \n";
     
           }
            for ($i =0; $i<$#endpoint+1 ;$i++)
           {
           print OUTENDP "$endpoint[$i] \n";
     
           }
    je suis bloquer la !!!
    Merci de votre aide

  18. #18
    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 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Erreur. Voir post ci-dessous.

  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 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Déjà, quelques erreurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open(OUTPORT ,">$where/$spreadsheet") || die "ERROR: the file $file_name found\n";
    Tu essaies d'ouvrir $spreadsheet et ton message d'erreur concerne $file_name.

    Même chose à la ligne suivante.

    Cela n'est pas faux, mais ce n'est pas forcément une bonne idée de "slurper" un fichier entier en mémoire dans un tableau. Si ton fichier fait 15 gigaoctets, tu vas exploser ta mémoire. Mieux vaut lire le fichier ligne à ligne et traiter chacune individuellement.

    De plus, ça t'oblige a parcourir ensuite ton tableau. Si tu veux vraiment le faire comme ça, un "foreach my $line (@lines)" serait bien mieux qu'un truc du genre "for ($i=O, $i < ..., $i++)", mais il y a en fait bien plus simple (voir plus bas).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
           if ($file[$i] =~ /^Ports$/i)
           {
           $ports=shift (@file);
           push (@ports,$ports);
                  }
    	next if ($file[$i] =~ /^Endpoint$/i);
          }
    Outre le fait que tu dupliques une deuxième fois tes données en mémoire (ce qui n'est pas utile), ce code ne fait pas du tout ce que tu veux.

    Ce que tu veux:
    • Lire les lignes tant que je ne suis pas arrivé à Ports (il a peut-être d'autres choses avant)
    • sauter la ligne suivante (soulignement)
    • lire les lignes suivantes tant que je ne suis pas arrivé à end point et les copier dans mon premier fichier de résultat
    • répéter ce qui précède pour les données suivantes jusqu'à clockpin avec le fichier suivant
    • répéter encore pour les données après clockpin.



    Cela peut donner quelque chose comme cela:
    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
    open(FILE,"<$SEARCH_PATH/$file_name") || die "ERROR: the file $file_name not found\n";
    open(OUT ,">$where/$spreadsheet") || die "ERROR: unable to create  $spreadsheet \n";
     
    while (<FILE>) {
         # elimination de lignes éventuelles avant "Ports"
         last if  /Ports/;
         }
    next;  #on est arrivé à Ports, on élimine la ligne suivante, le soulignement)
     
    # on reprend la lecture, on va lire maintenant les ports
    while (<FILE>) {
         chomp;
        if (/Endpoint/) {
             # je suis arrivé à Endpoint, je ferme le fichier des ports et ouvre le fichier suivant 
             #en gardant le même handle, comme ça j'écrirais toujours dans le même handle, mais ce sera un fichier différent
     
            close OUT;
            open(OUT ,">$where/$spreadsheet2") || die "ERROR: unable to open $spreadsheet2 \n" ;
            next; # passage à la ligne suivante
         }
    if (/clockpin/) {
         ... fermeture du fichier 2 et ouverture du fichier 3, comme ci-dessus
        }
        # maintenant je peux écrire dans OUT toutes les lignes que je rencontre en entrée, 
        #car le file handler OUT pointe à tout moment vers le fichier voulu
        # (sauf les lignes contenant "====================")
         print OUT "$_ \n" unless /^=+$/;
    }
    Probablement deux fois moins de ligne de code pour arriver au résultat, exécution sans aucun doute bien plus rapide (emplir un tableau pour le copier et ensuite lire la copie consomme des ressources inutilement), pas de risque de saturer la mémoire. Là, je me contente de lire les lignes une à une et de les copier dans le fichier de sortie. Avec juste un peu de code pour changer de fichier de sortie quand c'est nécessaire.

  20. #20
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 54
    Points : 47
    Points
    47
    Par défaut
    Bonjour
    apres avoir extraire les données. je veux aporter un chagement specifique a certaine fichier m' ai j'arrive pas il me met ce mesg d 'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Filehandle FIC opened only for output at ./essai.pl line 241

Discussions similaires

  1. Colorer le texte pour un code plus clair
    Par mcmana dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/10/2012, 09h25
  2. Réponses: 16
    Dernier message: 04/02/2010, 11h08
  3. Aider mois pour apprendre C++
    Par osma_1978 dans le forum C++
    Réponses: 6
    Dernier message: 25/08/2006, 15h45
  4. rendre une cellule plus claire au passage de la souris
    Par pierrot10 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 02/08/2006, 10h29
  5. Aider moi pour sql server et delphi
    Par aqs dans le forum Bases de données
    Réponses: 6
    Dernier message: 11/06/2005, 22h16

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