Me voilà débutant et bloqué sur une problématique bash...
But recherché : (Tout simplement) parcourir des fichiers txt composé de ligne et de colonne et les placer dans des tableaux.
J'ai donc une boucle sur les fichiers, une boucle sur les lignes et une boucle sur les colonnes de chaque fichier.
La boucle de lecture du fichier ci-dessous fonctionne très bien :
declare -A cAverses
while IFS=$';' read -a ar;
do
for ((i=0;i<5;i++))
do
cAverses[$n,$i]}="${ar[$i]}"
echo cAverses[$n,$i]="${ar[$i]}"
done
n=$[$n+1];
done < test1.txt
done
echo "test : " ${cAverses[5,0]}
Cela me renvoie une valeur du tableau cAverses.
Par contre, dès que j'ai une boucle sur les fichiers, je ne peux pas affecter une valeur à un nom de tableau dynamique :
echo CHARGEMENT DES FICHIERS DE LEGENDE EN TABLEAU
fichiers=('test1.txt' 'test2.txt')
tablegende=('cAverses' 'cOrages')
for ((j=0;j<2;j++))
do
echo ${tablegende[$j]}
declare -A ${tablegende[$j]}
n=0
while IFS=$';' read -a ar;
do
i=0
for ((i=0;i<5;i++))
do
${tablegende[$j][$n,$i]}="${ar[$i]}"
echo ${tablegende[$j]}[$n,$i]="${ar[$i]}"
done
n=$[$n+1];
done < ${fichiers[$j]}
done
echo "test : " ${cAverses[5,0]}
${tablegende[$j][$n,$i]}="${ar[$i]}"
renvoie une erreur...
Je crois savoir qu'il est possible d'utiliser des "eval"...mais j'avoue ne pas parvenir à avancer après de multiples tests.
Auriez-vous une idée sur le comment résoudre ce type de problème ?
fichiers=('test1.txt' 'test2.txt')
tablegende=('cAverses' 'cOrages')
declare -A globalTabl
for ((j=0;j<2;j++))
do
echo ${tablegende[$j]}
n=0
while IFS=$';' read -a ar;
do
i=0
for ((i=0;i<5;i++))
do
globalTabl["${tablegend[$j]},$n,$i"]="${ar[i]}"
echo "${globalTabl["${tablegende[$j]},$n,$i"]} = ${ar[$i]}"
done
n=$[$n+1];
done < ${fichiers[$j]}
done
echo "test : " ${globalTabl["cAverses,5,0"]}"
?
pas testé : pas d'échantillon.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Manifestement, cela ne marche toujours pas. Il lit bien ar[$i] (donc la valeur de ma ligne et colonne dans le fichier txt), mais il ne comprend pas le globalTabl. Le echo dans la boucle me rends :
Sachant que cela fonctionne très bien lorsque je ne fais pas de boucle sur les fichiers. Je lis le fichier et je mets les cellules dans un tableau. Dès que j'introduis plusieurs fichiers et que je fais une boucle sur ces fichiers, impossible de nommer le tableau de manière dynamique en fonction du fichier lu.
Ou alors...je duplique ce code autant de fois que j'ai de fichiers. Mais ca va devenir lourd...
EDIT : la deuxième boucle ne doit pas boucler sur ${#tablegende[*], mais sur ${#ar[*]}, c'est à dire le nombre d'éléments sur la ligne !
#!/bin/bash
fichiers=('test1.txt' 'test2.txt')
tablegende=('cAverses' 'cOrages')
declare -A globalTabl
for ((i=0;i<${#fichiers[*]};i++))
do
echo "tablegende: ${tablegende[i]}"
ligN=0
while IFS=';' read -a ar;
do
((ligN++))
for ((j=0;j<${#ar[*]};j++))
do
globalTabl["${tablegende[$i]},$ligN,$j"]="${ar[j]}"
echo "globalTabl["${tablegende[$i]},$ligN,$j"] = ${ar[j]}"
done
done < ${fichiers[i]}
done
echo "test globalTabl["cAverses,5,0"]: ${globalTabl["cAverses,5,0"]}"
C'était bien cela ! Un tableau à trois entrées...pourquoi ne pas y avoir pensé plus tôt !
Merci pour tes éclaircissements !
bash nom de tableau dynamique
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique