Lecture d'un fichier formaté

Lecture d'un fichier formaté - Shell/Batch - Programmation

Marsh Posté le 20-07-2007 à 12:18:30    

Bonjour,
 
je suis devant une impasse, je m'explique, je chercher à convertir un fichier txt formaté d'une certaine manière et à le convertir dans une. Le seul problème que le fichier d'entrée commence par des espaces. et quand je veux récupérer les 5 premiers caractères, ma commande echo $ligne\cut -c1-5 me supprime les espaces en premier. Est-il possible de les garder ?
 
Merci de votre aide
 
Nico

Reply

Marsh Posté le 20-07-2007 à 12:18:30   

Reply

Marsh Posté le 20-07-2007 à 14:53:11    

Le problème ne vient pas du echo car si l'on fait echo "  a", cela affiche bien les espaces devant (sur mon ordinateur).
 
Le problème ne vient pas du cut car si l'on fait echo "     abc" |cut -c1-5, on a bien les espaces devant.
 
Le problème est donc en amont.
 
Je devine qu'il s'agit du piège classique

for ligne in `cat fichier1`


La solution consiste a remplacer cette boucle for par

cat fichier1|while read ligne


 
 
 

Reply

Marsh Posté le 20-07-2007 à 15:07:59    

C'est pourtant ce que j'ai fait :
 
cat $line | while read LIN_IN
do
Dossier=`echo $LIN_IN | cut -c1-5`
done

Reply

Marsh Posté le 20-07-2007 à 16:59:02    

Cela pose pb meme pour une variable en faisant
toto="  trtze"
echo $toto
trtze

Reply

Marsh Posté le 20-07-2007 à 21:43:28    

Predator23 a écrit :

Cela pose pb meme pour une variable en faisant
toto="  trtze"
echo $toto
trtze


echo "[$toto]"
=> [    trtze]
 

Predator23 a écrit :

C'est pourtant ce que j'ai fait :
 
cat $line | while read LIN_IN
do
Dossier=`echo $LIN_IN | cut -c1-5`
done


Dossier=`echo "$LIN_IN" | cut -c1-5`  !!!!!


Message édité par Sve@r le 20-07-2007 à 21:44:42

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 23-07-2007 à 17:06:36    

Predator23 a écrit :

C'est pourtant ce que j'ai fait :
 
cat $line | while read LIN_IN
do
Dossier=`echo $LIN_IN | cut -c1-5`
done


Ton problème vient en tout premier lieu de ta command read.
Celle-ci supprime les espaces (en fait les caractères de séparation spécifiés dans la variable IFS) en début et en fin de la ligne lue.
Il te faut donc modifier la valeur de IFS le temps de la lecture.
 
De plus, comme l'a indiqué Sve@r, il faut aussi encadrer la substitution de ta variable par des guillemets dans la commande echo,
 
Au final cela donne (en supprimant par la même occasion la commande cat) :
 

while IFS= read LIN_IN
do
   Dossier=`echo "$LIN_IN" | cut -c1-5`
done < $line


 
 
Jean-Pierre.

Message cité 1 fois
Message édité par aigles le 23-07-2007 à 17:07:24
Reply

Marsh Posté le 24-07-2007 à 09:32:09    

Merci beaucoup, ça marche
 
Nico

Reply

Marsh Posté le 27-07-2007 à 13:56:07    

aigles a écrit :

De plus, comme l'a indiqué Sve@r, il faut aussi encadrer la substitution de ta variable par des guillemets dans la commande echo


 
En fait, les guillemets doubles permettent de demander au shell de ne pas faire d'interprétation sur le contenu.
Un exemple tout simple
liste=`ls -l`
echo $liste
echo "$liste"


Message édité par Sve@r le 27-07-2007 à 13:56:25

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed