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 :

synchronisation entre perl et bash


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 112
    Points : 58
    Points
    58
    Par défaut synchronisation entre perl et bash
    Bobjour ,

    J'ai le problème suivant :
    je parcours mon fichier a l'aide d'un script perl ligne apres ligne.
    il se peut que mon fichier change entre deux lecture de ligne.

    Comment forcer perl a raffraichir son buffer.

    voici 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
    open(FICIN,"+>$cell.cdl") or die ("open: $!");
    $myauxiliary = select (FICIN);
    $|=1;
    select($myauxiliary);
     
    while (defined ($line = <FICIN>))
    	{
    	chomp($line);
    	if ($line=~ m/.SUBCKT/)
    		{
     
    		@tab1 = split (/ +/,$line);
    		chomp($tab1[1]);
    		$mysubckt = $tab1[1];
    		if($line!~ m/$cell /)
    		{
    		while ($line!~ m/.ENDS/)
    			{
    	                 if ($line=~ m/VDD/) { $VDD=1;}
    			 if ($line=~ m/GND/) { $GND=1;}
    			 if ($line=~ m/V0IO/) { $V0IO=1;}
    			 if ($line=~ m/V33IO/) { $V33IO=1;}
    			 if ($line=~ m/V25IO/) { $V25IO=1;}
    			 $line = <FICIN>;
    			 chomp($line);	
    			}
    		        $myvar="";		
    	                 if ($VDD==1) { $VDD =0; $myvar .= "VDD ";}
    			 if ($GND==1) { $GND=0;$myvar .= "GND ";}
    			 if ($V0IO==1) { $V0IO=0;$myvar .= "V0IO ";}
    			 if ($V33IO==1) {$V33IO=0;$myvar .= "V33IO ";}
    			 if ($V25IO==1) {$V25IO=0;$myvar .= "V25IO ";}
    		@args = ("sed -i  \"s|\\(.SUBCKT $mysubckt .*\\)|\\1 $myvar|g\" $cell2" );
    		system(@args) == 0 or die "system @args failed: $?";			 	
    		@args = ("sed -i  \"s|\\(X[0-9a-zA-Z_ ]*\\)\\(\\/ $mysubckt\\)|\\1$myvar\\2|g\" $cell2" );
    		system(@args) == 0 or die "system @args failed: $?";
     
    		}
     
    		}
     
    	}
     
    close (FICIN);
    je fais un appel systeme avec un sed , et je voudrais que les changements fais par cet appel system soit pris en compte des la prochaine ligne de lecture ( que perl actualise son buffer en gros ) .
    j'ai éssayé avec l'option autoflush ($|) mais ca ne marche pas.

    merci d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 112
    Points : 58
    Points
    58
    Par défaut
    Bonjour,
    J'ai trouvé une solution mais un peu trash
    avant chaque appel de sed , je memorise le numéro de la ligne a laquelle je suis, je ferme le fichier, j'execute sed, je reouvre le fichier , je me rends a la ligne ou je me suis arré&té , et je continue a parser mon fichier .

    est-ce que quelqu'un peut proposer une solution plus propre

  3. #3
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    déjà pourquoi faire un appel externe pour sed ?
    http://search.cpan.org/~darren/Sed-1.11/Sed.pm


    ensuite pourquoi "recharger" la ligne avant de faire les sed ?
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 112
    Points : 58
    Points
    58
    Par défaut
    Ah oui, je suis con
    je suis newbie en perl, je savais pas qu'il y a avit un sed sous perl ,

    merci je vais essayé ca

Discussions similaires

  1. script de synchronisation entre deux dossier (perl)
    Par miguigui dans le forum Langage
    Réponses: 6
    Dernier message: 19/05/2012, 11h37
  2. Pb d'accès entre perl et Domaine NT4
    Par MissCélia dans le forum Langage
    Réponses: 1
    Dernier message: 18/05/2006, 10h30
  3. Réponses: 9
    Dernier message: 21/12/2005, 19h05
  4. Synchronisation entre 2 bases ACCESS
    Par Tchupacabra dans le forum Access
    Réponses: 2
    Dernier message: 18/10/2005, 15h24
  5. Synchronisation entre 2 threads
    Par bodbod dans le forum C++
    Réponses: 8
    Dernier message: 20/08/2004, 18h29

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