Séparer une chaîne via des séparateurs, vers un tableau

Résolu/Fermé
romegonic Messages postés 28 Date d'inscription lundi 26 juillet 2010 Statut Membre Dernière intervention 17 avril 2014 - Modifié par romegonic le 19/03/2014 à 17:33
romegonic Messages postés 28 Date d'inscription lundi 26 juillet 2010 Statut Membre Dernière intervention 17 avril 2014 - 3 avril 2014 à 14:38
Bonjour,

J'utilise korn shell sous AIX.

Mettons une chaîne de caractères (provenant d'une ligne d'un fichier, via sed) :
chaine='nom_1:valeur_1,nom_2:valeur_2,nom_3:valeur_3,nom_3:valeur_3'

Je souhaite parcourir cette chaîne et remplir un tableau, en indiquant comme délimiteur le ','

Comme cela j'embarque le nom et sa valeur et je me charge de tronquer le ':' pour utiliser ces deux champs.

L'idée est de pouvoir ensuite appeler tab[3], à savoir le nom_3 et sa valeur_3.

La difficulté supplémentaire réside dans le fait que la taille de la chaîne n'est bien sûr pas fixe, mais également le nombre ""d'enregistrements"".

Le taille du tableau ne peut donc pas être définie au préalable.

Si quelqu'un pouvait m'aider, je ne m'en sors pas avec seulement les expr sed cut awk tr habituels.
C'est surtout au niveau de la boucle que je galère, car il existe pas mal d'exemples concernant des fichiers en entrée, mais très peu concernant des chaînes (et je ne vais pas recopier ma chaîne dans un fichier ... qui ferait une ligne, ce qui n'apporterait rien ...)

Un while fin de chaîne ? Un for i in 'echo $chaine' do .. ?

Je vous remercie par avance pour vos éventuelles réponses.


A voir également:

5 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
19 mars 2014 à 18:20
Salut,

J'utilise korn shell sous AIX.

C'est obligé le ksh ? ;-\

Parce que sinon en bash :

$ chaine='nom_1:valeur_1,nom_2:valeur_2,nom_3:valeur_3,nom_3:valeur_3' 

$ echo "${chaine}"
nom_1:valeur_1,nom_2:valeur_2,nom_3:valeur_3,nom_3:valeur_3

$ tab=(${chaine//,/ })

$ echo ${tab[2]}
nom_3:valeur_3

$ echo ${tab[2]%:*}
nom_3

$ echo ${tab[2]#*:}
valeur_3
1
dindoun Messages postés 1027 Date d'inscription mercredi 23 janvier 2008 Statut Membre Dernière intervention 17 février 2017 135
Modifié par dindoun le 19/03/2014 à 22:34
super je ne connaissais pas tab=(${chaine//,/ })
1