Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Recuperation à partir de fichiers
Envoyé par: _Moa_

Bonjour,

pour ceux qui connaissent ce langage, j'ai des fichiers .SAS que je souhaiterai "décortiquer" un peu...

Le fait qu'ils soient ecris en SAS importe peu, voire pas du tout, ça s'ouvre tres bien comme un fichier .txt


Grosso modo, je voudrais récupérer les requetes SQL qui se trouvent dans le tas de code.

J'ai pu remarquer que ces requetes prenaient cet aspet:

Citation

connect to oracle ( -----------)
create table ----------- as select -------- from connection to oracle
(
select ...
from ...
where ...
) ;

en gras, ce sont les 'balises' que j'ai relevées qui entoure les requetes.

En soit meme, ça me parait bete comme tout, mais le hic, c'est que je suis pas du tout a l'aise avec les scripts bash / awk / sed ...

Je peux avoir plusieurs bout de code comme ça dans un fichier, et les indentations, espaces, retour à la ligne, ... ne sont pas toujours respectés ni les memes du coup...

je peux avoir du:
-> from connection to oracle (
-> from connection to oracle(
-> from connection to oracle
(select
-> ...

de meme, au niveau de la balise de fin, je ne peux pas m'appuyer sur le ';' car je peux avoir du code dans les requetes, ce qui me place des ';' au milieu.
et je peux avoir du texte entre le ')' et le ';' dans ce style là:
) {[A-Za-z]|' '|' (retour à la ligne) ' }*
Et lorsque c'est un code imbriqué dans la requete, le texte sera toujours %end mais avec des espaces et retours à la ligne possible...


Quelqu'un pourrait m'aider là dessus? (avec des explications sur les commandes du sed/awk/... parce que les \/^ et tout, je comprend pas du tout :/ )

Poste le Tuesday 10 April 2007 11:00:10
Répondre     Citer    
Re: Recuperation à partir de fichiers
Envoyé par: oudoubah

Un script (fait à la louche, sans tester) :
#!/usr/bin/awk -f

get_requete() {
   do {
      getline
      printf("%s ", $0)
   } while ($0 != ");")
   printf("\n")
}

/from connexion to oracle/ {
   get_requete $0
}

Tu devrais avoir une requête SQL par ligne.
Pour utiliser le script, tu fais "./script.awk < fichiser.SAS"

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Tuesday 10 April 2007 14:07:41
Répondre     Citer    
Re: Recuperation à partir de fichiers
Envoyé par: _Moa_

Hum...

Le probleme, c'est que ça peut finir par un simple

);


Mais ça peut aussi finir par

)blablabla;


et pour corser l'affaire, ce " blablabla " doit etre different de " %end "

Poste le Tuesday 10 April 2007 14:26:31
Répondre     Citer    
Re: Recuperation à partir de fichiers
Envoyé par: oudoubah

Ca fait longtemps que je n'ai pas touché à awk, donc il y aura peut être (et même sûrement) des erreurs de syntaxe. Pour la fonction, tu peux transformer le do {... }while par :
while (true) {
   printf("%s ", $0)
   if ( ($0 == "^).*;$") && ($0 !~ "%end" ) ) {
      printf("\n");
      return
   }
}

^).*;$ signifie : ligne qui commence par ) et qui finit par ; (sans espace ni avant le ), ni après le winking smiley

Pour la fonction, il faut écrire :
function get_requete() {
...
}

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Tuesday 10 April 2007 17:51:08
Répondre     Citer    
Re: Recuperation à partir de fichiers
Envoyé par: _Moa_

#%b

j'ai du virer les parentheses dans la declaration de la fonction, et il me bloque sur l'accolade ouvrante apres le if :/

Poste le Wednesday 11 April 2007 10:29:36
Répondre     Citer    
Re: Recuperation à partir de fichiers
Envoyé par: _Moa_

Autant pour moi, l'erreur générée était un oubli de ma part...



sinon, j'ai un "vrai" soucis:

Citation

awk: Cannot read the value of get_requete. It is a function

ca se produit lors de l'appel get_requete $0

Poste le Wednesday 11 April 2007 15:44:54
Répondre     Citer    
Re: Recuperation à partir de fichiers
Envoyé par: oudoubah

transforme le return en return 0 et rajoute juste avant l'accolade fermente de la fonction un return 0 aussi.

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Wednesday 11 April 2007 16:34:33
Répondre     Citer    
Re: Recuperation à partir de fichiers
Envoyé par: _Moa_

Ca change pas :s

Poste le Thursday 12 April 2007 09:04:18
Répondre     Citer    
Re: Recuperation à partir de fichiers
Envoyé par: _Moa_

j'ai resolu l'erreur, en mettant dans l'appel de fonction des parenthese

get_requete() au lieu de get_requete $0

Par contre, en attendant, j'avais pas vraiment fait la fonction get_requete, pour resoudre le soucis, elle n'est qu'un simple print

Poste le Thursday 12 April 2007 09:09:22
Répondre     Citer    
Re: Recuperation à partir de fichiers
Envoyé par: _Moa_

il change jamais de $0 :-/
c'est toujours la meme ligne en fait...

Poste le Thursday 12 April 2007 10:47:45
Répondre     Citer    
Re: Recuperation à partir de fichiers
Envoyé par: oudoubah

Dans le while, j'ai oublié de remettre le getline pour lire la prochaine ligne :ange:

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Thursday 12 April 2007 13:46:47
Répondre     Citer    
Re: Recuperation à partir de fichiers
Envoyé par: _Moa_

mirki ^^


maintenant, je passe à une autre etape, pas moyen de faire parler mon ami google :/ , je souhaiterai faire un bout de script qui recupere le nombre d'occurence d'un mot dans tous mes fichiers...
en ligne de commande, le
grep -i 'MOT' *.ext \ wc -l
est super, par contre, je trouve pas comment le mettre dans une variable au sein d'un script...

j'avais songé tout betement à
$var=[grep -i 'MOT' *.ext \ wc -l]
mais apaprement, cela aurait été trop simple, et ça va pas :/

Poste le Thursday 12 April 2007 16:36:22
Répondre     Citer    
Re: Recuperation à partir de fichiers
Envoyé par: oudoubah

au lieu des crochets il faut utiliser, ` ` ou, en bash, $( )

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Thursday 12 April 2007 17:45:37
Répondre     Citer    
Re: Recuperation à partir de fichiers
Envoyé par: Sve@r

Citation
_Moa_
j'avais songé tout betement à $var=[grep -i 'MOT' *.ext \ wc -l]mais apaprement, cela aurait été trop simple, et ça va pas :/

Déjà, il faut bien réaliser que le shell fonctionne toujours à l'identique.
Si auparavant tu remplissais une variable en tapant
var=Hello
(sans mettre de "$" devant ton nom de variable), pourquoi t'en as mis un ici ???

Sinon c'est effectivedment tout simple
var=`grep -i 'MOT' *.ext |wc -l`
en Bourne shell
var=$(grep -i 'MOT' *.ext |wc -l)
en Bourne Again Shell (mais la syntaxe précédente fonctionne aussi en bash)

Cours de shell complet ]http://fr.lang.free.fr/cours/Shell_v2.0.pdf[/url]

PS: L'option "-c" de grep permet de compter le nombre d'occurences donc normallement, il devrait être inutile de rajouter la commande "wc" derrière le grep

L'homme qui murmurait à l'oreille des pingouins
[fr.lang.free.fr]

Poste le Sunday 22 April 2007 11:22:40
Répondre     Citer    
Re: Recuperation à partir de fichiers
Envoyé par: Moctar

Bon voila j utilise kannel, j arrive a envoyer les sms et de les recevoir. Mais je vois seulement le sms reçus au niveau du smsbox. Mon problem ,c est comment faire pour ke le sms recu soit directement dans un compte utilisateur qui se trouve sur la machine? Merci de votre reponse

Poste le Saturday 15 September 2007 04:55:26
Répondre     Citer    
Re: Récupération à partir de fichiers
Envoyé par: nicola

La première question doit être : Comment ne pas écrire en SMS sur le phorum ?
Je pense que la réponse peut se trouver dans le fichier de configuration, mais peut-être que tu as déjà regardé.

--
On ne prête qu’aux riches, et on a bien raison, parce que les autres remboursent difficilement.
-+- Tristan Bernard (1866-1947) -+-

Poste le Saturday 15 September 2007 07:43:21
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Recuperation à partir de fichiers
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons