Swisslinux.org

− The GNU/Linux crossroads in Switzerland −

 

Language

 

The Forum

You are not logged in.

#1 24 Mar 2009 17:42:18

tguillod
Prêcheu(r|se) du libre
 
From: Zuerich
Registered: 23 Oct 2007
Posts: 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 ?

Last edited by tguillod (24 Mar 2009 17:42:31)


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

Offline

 

#2 24 Mar 2009 19:05:08

korbé
Prêcheu(r|se) du libre
 
Registered: 09 Mar 2009
Posts: 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?

Offline

 

#3 24 Mar 2009 19:38:19

tguillod
Prêcheu(r|se) du libre
 
From: Zuerich
Registered: 23 Oct 2007
Posts: 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.

Last edited by tguillod (24 Mar 2009 19:38:32)


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

Offline

 

#4 29 Mar 2009 10:31:19

jean@adimp.ch
Illuminé(e)
From: Marly
Registered: 10 Mar 2005
Posts: 1202
Website

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
Recherche un vrai job. Toute nouvelle proposition d'emploi bienvenue et analysée: 076 227 01 32

Offline

 

#5 29 Mar 2009 12:45:09

BOFH
Admin
From: Ecublens, VD
Registered: 03 Feb 2005
Posts: 862
Website

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); }

Offline

 

#6 30 Mar 2009 19:47:02

tguillod
Prêcheu(r|se) du libre
 
From: Zuerich
Registered: 23 Oct 2007
Posts: 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

Offline

 

#7 30 Mar 2009 22:22:36

jean@adimp.ch
Illuminé(e)
From: Marly
Registered: 10 Mar 2005
Posts: 1202
Website

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
Recherche un vrai job. Toute nouvelle proposition d'emploi bienvenue et analysée: 076 227 01 32

Offline

 

#8 30 Mar 2009 23:40:29

fbianco
Membre du comité
From: Suisse
Registered: 04 Feb 2005
Posts: 1455
Website

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

Offline

 

Board footer

Powered by FluxBB