Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
enlever les espaces dans une chaine de caractère
Envoyé par: distribution

Bonjour,

j'essaye d'enlever les espaces dans une chaine de caractère .

j'ai essayé ceci

sed -e 's/\([^\t]*\)\t\([^\t]*\)/\1\2/' $chemin3
ça ne marche pas

et ceci

echo "BA sers" | tr -d "\t"

ça ne marche pas non plus

existe t il une fonction pour ?


Merci

Poste le Friday 20 February 2009 15:08:12
Répondre     Citer    
Re: enlever les espaces dans une chaine de caractère
Envoyé par: distribution

j'ai rien trouvé sur le net d'autre donc je me suis fait ma propre fonction



  function vire_es()
{
  local chaine="$1"
  local longeur="$(expr length "$chaine")"
  local result=""
  local c="" 
  local pos=0
  local i=0
 
  for i in $(seq $longeur)
  do
     echo $i
     pos=$((i-1))
     c=${chaine:$pos:1}
     echo $c
     
    if [ $c !=  " " ]
     then
        result="$result""$c"
    fi
   done
  
  echo "$result"  

}


par contre cette fonction a un défaut avec les caractères accentués , il les compte double ce qui donne des erreurs au test , genre "aaaéé" donnera 7 pour la longeur et donnera dans la boucle une erreur à la 6 eme et 7 eme itération

mais bon pas grave dans mon cas , je n'ai affaire qu'à des chaines sans caractère accentué

mais si quelqu'un a une fonction simple sous le coude je prends

merci
si je rentre des caractère accentués ça compte double par

Poste le Friday 20 February 2009 15:59:53
Répondre     Citer    
Re: enlever les espaces dans une chaine de caractère
Envoyé par: NBaH

Bof, ça fonctionne pour moi...
tant qu'il y a des \t-abulations dans l'entrée !

Poste le Friday 20 February 2009 16:04:00
Répondre     Citer    
Re: enlever les espaces dans une chaine de caractère
Envoyé par: distribution

je viens de vois , je n'avais pas fait attention , j'ai ce message d'erreur au moment ou elle teste l'espace

vire_espace.sh: line 22: [: !=: unary operator expected


mais elle réalise qd même le résultat !!

Poste le Friday 20 February 2009 16:04:18
Répondre     Citer    
Re: enlever les espaces dans une chaine de caractère
Envoyé par: distribution

bonjour NBaH

qu'est ce qui fonctionne pour toi ?

Poste le Friday 20 February 2009 16:06:27
Répondre     Citer    
Re: enlever les espaces dans une chaine de caractère
Envoyé par: distribution

je viens de changer car par


      function vire_es()
{
  local chaine="$1"
  local longeur="$(expr length "$chaine")"
  local result=""
  local c="" 
  local pos=0
  local i=0
 echo $longeur
 echo $chaine

  for i in $(seq $longeur)
  do
     echo $i
     pos=$((i-1))
     c=${chaine:$pos:1}
     echo $c

    case $c in

    ( [0-9A-Z-_] )  result="$result""$c" ;;
    (*)  ;;
     esac 
  
  done
  
  echo "$result"  

}
ça remplit la même fonction ,car je n'ai dans mes chaines que des lettres majuscules chiffres - ou _ , mais ça evite les messages d'erreurs


yop yop smiling smiley

Poste le Friday 20 February 2009 16:11:36
Répondre     Citer    
Re: enlever les espaces dans une chaine de caractère
Envoyé par: NBaH

la ligne sed et la ligne tr

Poste le Friday 20 February 2009 16:18:39
Répondre     Citer    
Re: enlever les espaces dans une chaine de caractère
Envoyé par: distribution

si ça marchait chez moi j'aurais en sortie BA150 et pas seulement BA , pour des chaines du type BA 150 en entrée

Poste le Friday 20 February 2009 16:23:35
Répondre     Citer    
Re: enlever les espaces dans une chaine de caractère
Envoyé par: NBaH

ou alors
# "BA" deux espaces "sers" tabulation "."
echo "BA  sers    ."tr -d '[:space:]
BAsers.
fonctionne et pour les espaces et pour les tabulations.

Poste le Friday 20 February 2009 16:23:54
Répondre     Citer    
Re: enlever les espaces dans une chaine de caractère
Envoyé par: NBaH

oops!
echo "BA  sers    ." | tr -d "[:space:]"
BAsers.

Poste le Friday 20 February 2009 16:26:30
Répondre     Citer    
Re: enlever les espaces dans une chaine de caractère
Envoyé par: distribution

echo "BA sers ." | tr -d "[:space:]"
fonctionne ... je prends smiling smiley car je viens de me rendre compte que je pouvais avoir d'autre caractère tel que / dans les chaines de reference , donc ta solution est plus concise , plus complète et plus rapide à l'éxécution que ma bidouille

digression ...j'en ai marre des fichiers excel et j'en ai marre des références qui ne respectent pas une nomenclature précise sad smiley

Poste le Friday 20 February 2009 16:44:27
Répondre     Citer    
Re: enlever les espaces dans une chaine de caractère
Envoyé par: distribution

J'avais oublié

Merci pour l'aide

Poste le Friday 20 February 2009 16:50:31
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
enlever les espaces dans une chaine de caractère
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