Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > Unix > Solaris
Solaris Forum d'entraide sur le système Solaris.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 06/04/2009, 17h47   #1
 
Inscription : août 2006
Messages : 158
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 158
Points : -14
Points : -14
Par défaut Parcours champs avec séparateur dans lignes

Bonjour !

Voilà la problématique :
J'ai des lignes dans un fichier qui contiennent 5 champs délimités par un espace.

Si je les parcours de cette manière :
Code :
1
2
3
4
5
6
7
 
cat $fichierParametrage |while read ligne ; 
   do
    set $(echo $ligne) 
    champ1 = $1 
    ...
done
Le problème est que une seule ligne est lue si j'utilises la commande set !

Ma question est la suivante :
Comment lire dans une boucle chaque champ de la variable $ligne ?

Code :
1
2
3
4
5
6
7
 
for champs in $ Ligne 
do 
   ....
   destinataire = $ champ1
   etc ... 
done

Je me dis avec Awk peut être , mais le problème est que je veux exécuter et appeller beaucoup de code à l'intérieur de la boucle.
comboDev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2009, 19h49   #2
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 912
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 912
Points : 1 263
Points : 1 263
Simplifie to code avec quelque chose comme çà:

Code :
1
2
3
4
5
6
while ligne=$(line)
do
  set $ligne
  champs1=$1
  ..
done < $fichierParametrage
jlliagre est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2009, 23h21   #3
 
Inscription : août 2006
Messages : 158
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 158
Points : -14
Points : -14
Merci.

Mais en fait j'ai déjà le code avec "Set".
Ce qui est bizarre c'est que arrivé à "done" , on dirait on sort de la boucle.
Pourtant il n'y a aucun break ou autre instruction à l'intérieur de la boucle
disant de ne pas boucler ?

Je connaissais pas
Code :
1
2
done < $fichierParametrage
J'essaierai pour voir si ça marche !
comboDev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2009, 08h31   #4
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 912
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 912
Points : 1 263
Points : 1 263
En fait, il n'y a aucune raison pour que le "set" interrompe la boucle. Il n'en sort pas avec ton exemple.
jlliagre est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2009, 14h24   #5
 
Inscription : août 2006
Messages : 158
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 158
Points : -14
Points : -14
En fait j'ai un programme principal parcourant un fichier et appellant des fonctions, je n'ai toujours pas trouvé pourquoi ; il s'arrêtait aprés la première ligne.

J'ai bidouillé et j'ai trouvé une parade :
Je possèdes maintenant deux scripts !
Un script à exécuter qui parcours chaque ligne du fichier à traiter et pour chaque ligne il appelle une second script qui traite la ligne.

C'est la seule façon que j'ai trouvé à force de chercher et cela marche parfaitement.

Peut être ksh possède il des limitations dans les appels de fonctions ?
comboDev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2009, 09h37   #6
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 912
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 912
Points : 1 263
Points : 1 263
Difficile à expliquer si tu ne fournis pas un exemple de script avec lequel le problème de sortie se produit.
jlliagre est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 01h34.


 
 
 
 
Partenaires

Hébergement Web