Swisslinux.org

− Le carrefour GNU/Linux en Suisse −

 

Langue

 

Le Forum

Vous n'êtes pas identifié.

#1 24 Mar 2009 17:42:18

tguillod
Prêcheu(r|se) du libre
 
Lieu: Zuerich
Date d'inscription: 23 Oct 2007
Messages: 233

Rechercher des chaînes daans un certain ordre

Bonjour,

Voici mon problème :
J'ai un fichier texte avec des lignes comme ca

Code:

A 1 begin
A 1 do
A 1 end
A 2 begin
A 2 do
A 2 end
...

Evidememment il n'y a pas que A 1 et A 2 mais cela va jusqu'à A n.
Les règles sont les suivantes
  - chaque A i doit avoir une occurrence begin, une do et une end
  - pour un i fixé le begin doit venir avant le do qui doit lui même venir avant le end

Sinon, l'ordre n'est pas important : on peut avoir cela

Code:

A 1 begin
A 2 begin
A 2 do
A 1 do
A 1 end
A 2 end
...

J'aimerai faire un script pour controller la validité d'un tel fichier.
QQn a t'il une idée ?

Dernière modification par tguillod (24 Mar 2009 17:42:31)


Make it run, make it correct, make it fast : Keep it SIMPLE

Hors ligne

 

#2 24 Mar 2009 19:05:08

korbé
Prêcheu(r|se) du libre
 
Date d'inscription: 09 Mar 2009
Messages: 146

Re: Rechercher des chaînes daans un certain ordre

Pour ça, je préconiserait awk plutôt que shell.

Si j'ai bien compris, tu doit vérifier dans ton premier fichier, si pour Ai il y a toujours un BEGIN, un do et un END?

Hors ligne

 

#3 24 Mar 2009 19:38:19

tguillod
Prêcheu(r|se) du libre
 
Lieu: Zuerich
Date d'inscription: 23 Oct 2007
Messages: 233

Re: Rechercher des chaînes daans un certain ordre

Avec AWK j'arrive à chercher des occurences, les compter.
Mais je sais pas comment garantir que begin est avant le do.

Mais idée était de stocker les numéros de lignes puis de les comparer mais c'est pas très élégant.

Dernière modification par tguillod (24 Mar 2009 19:38:32)


Make it run, make it correct, make it fast : Keep it SIMPLE

Hors ligne

 

#4 29 Mar 2009 10:31:19

jean@adimp.ch
Illuminé(e)
Lieu: Marly
Date d'inscription: 10 Mar 2005
Messages: 1228
Site web

Re: Rechercher des chaînes daans un certain ordre

Salut,
Un script python pourrait-il faire l'affaire?

Code:

reference=file('test.txt','r+').readlines()
tableDeTravail=file('test.txt','r+').readlines()
for line in reference:
 if line.find('begin')>0:            # test si elle contient un begin 
   key=line.replace('begin','')   
   lineIndex=tableDeTravail.index(line)
   test1=(key+'do' in tableDeTravail[lineIndex:len(tableDeTravail)])
   if test1:
    doIndex=tableDeTravail.index(key+'do')
    test2=(key+'end' in tableDeTravail[doIndex,len(tableDeTravail)])
     if test2:
      tableDeTravail.pop(lineIndex) # enleve la ligne begin
      tableDeTravail.pop(doIndex)  #  enleve la ligne do
      tableDeTravail.remove(key+'end') # enleve la ligne end   
return tableDeTravail   # devrait être vide

Meilleures salutations.


--------------------------------------------------------
Jean Tinguely Awais
Ma vie sur twitter : http://www.twitter.com/tservi

Hors ligne

 

#5 29 Mar 2009 12:45:09

BOFH
Admin
Lieu: Ecublens, VD
Date d'inscription: 03 Feb 2005
Messages: 862
Site web

Re: Rechercher des chaînes daans un certain ordre

Hello,

  tu peux trier le fichier avec

Code:

 grep 'A (\d+) (begin|do|end)' | sort -k2 -n

Et vérifier que les lignes begin-do-end alternent correctement, avec sed ou awk.

  Sinon, ma version en perl:

Code:

#!/usr/bin/perl -n
/A\s+(\d+)\s+(begin|do|end)/ or next;
($old, $s{$1}) = ($s{$1},$2);
next if $2 eq 'begin' && !defined $old;
next if $2 eq 'do'  && $old eq 'begin';
next if $2 eq 'end' && $old eq 'do';
die "Error at file $ARGV, line $.: got '$2' for $1, was '$old'.\n";
END { print STDERR "Error at eof $ARGV, $_ at $s{$_}\n" for (grep !/end/, keys %s); }

Hors ligne

 

#6 30 Mar 2009 19:47:02

tguillod
Prêcheu(r|se) du libre
 
Lieu: Zuerich
Date d'inscription: 23 Oct 2007
Messages: 233

Re: Rechercher des chaînes daans un certain ordre

Ok,merci beaucoup

J'ai pu m'en sortir à l'aide de ton script perl.

Pour le python, je connais juste assez pour comprendre mais pas assez pour étendre le script.
J'aimerai bien apprendre.
Avec quel livre / pdf avez cous appris le python ?


Make it run, make it correct, make it fast : Keep it SIMPLE

Hors ligne

 

#7 30 Mar 2009 22:22:36

jean@adimp.ch
Illuminé(e)
Lieu: Marly
Date d'inscription: 10 Mar 2005
Messages: 1228
Site web

Re: Rechercher des chaînes daans un certain ordre

Salut,
Est-ce que c'est possible de se tutoyer?
Ce PDF devrait t'apprendre quelques petits trucs : http://www.framasoft.net/IMG/pdf/python_notes-2.pdf
Meilleures salutations.


--------------------------------------------------------
Jean Tinguely Awais
Ma vie sur twitter : http://www.twitter.com/tservi

Hors ligne

 

#8 30 Mar 2009 23:40:29

fbianco
Membre du comité
Lieu: Suisse
Date d'inscription: 04 Feb 2005
Messages: 1455
Site web

Re: Rechercher des chaînes daans un certain ordre

Si tu sais déjà programmer : http://diveintopython.org/ (un peu vieux, mais peu de choses ont changés).


Utilisateur de Debian GNU/Linux, le système d'exploitation universel !

www : https://skadi.ch

Hors ligne

 

Pied de page des forums

Powered by FluxBB