variabilisation nom de tableau KSH - Shell/Batch - Programmation
Marsh Posté le 15-06-2006 à 23:51:41
salut,
j'ai mal a la tete d'essayer de suivre le code...
pourquoi tu fais pas du C plutot que du shell !!??
t as essayer d'utiliser la commande "eval" pour regler ton probleme ?
si j'ai rien a faire au taf demain, je reviendrais y reflechir...
Marsh Posté le 16-06-2006 à 15:35:27
Ok merci
eval '$'{$T_Name[$index]}
Ca à l'air de marcher.... je vais faire plus de tests !!!
Marsh Posté le 16-06-2006 à 16:48:40
OK !
comme ca ca marche :
eval "$T_Name[$index]=$ValInit"
Maintenant le problème est de récupérer cette valeur en 1 et en 2 de l'écrire dans un fichier !
test variable
eval "var=${$T_Name[$index]}"
test fichier
echo ${`eval '$T_Name[$index]'`} >> $FileOut
Ca marche pas !!!!!
Une idée ?
Marsh Posté le 16-06-2006 à 18:19:53
j'ai du mal a comprendre tes explications...
mais dans la ligne
echo ${`eval '$T_Name[$index]'`} >> $FileOut
il y a une erreur, ca c'est sur : eval '$T_Name[$index]' ca veut rien dire, car on utilise eval pour forcer a executer une commande.
par exemple :
TITI=bonjour
TOTO=TITI
eval echo \$$TOTO
bonjour
Marsh Posté le 16-06-2006 à 18:31:36
OK pour le fichier ca marche :
eval echo \${$T_Name[$index]} >> $FileOut
reste plus que la même chose pour une variable....
du style :
var = eval \${$T_Name[$index]}
En tout cas merci gloo
Marsh Posté le 17-06-2006 à 20:03:23
gloo a écrit : on utilise eval pour forcer a executer une commande. |
En fait, eval transforme ses arguments en instruction shell
Marsh Posté le 18-06-2006 à 10:42:49
Je testerais ça au boulot.....
Personnellement je "Débute" en KSH.
C'est pas très riche comme language...
Mais j'ai pas le choix ! Portabilité oblige !
Et dire que j'ai tout le plan de PROD à faire avec une gestion dynamique dans un tableau pour éviter les requête $U qui prennent un temps fou quand il faut contrôler les jobs en " Temps réels" et faire l'analyse syntaxique du plan de prod !!!
Merci en tout cas
Fred
Marsh Posté le 18-06-2006 à 14:11:23
Fred_l a écrit : Je testerais ça au boulot..... |
Hum... tu fais erreur. Tous les shells possèdent une particularité fabuleuse: ils peuvent déléguer aux programmes externes tout ce qu'ils ne savent pas faire par eux-même.
Ce mécanisme s'obtient en utilisant les backquottes. Cela remplace l'instruction entre backquottes par ce qu'elle affiche normallement à l'écran
ex:
Ca, c'est fantastique. Comme tu as à ta disposition une foule de programmes qui te permettent de traiter des fichiers, comme "grep", "cut", "sed", "tr", "sort", "awk", il te suffit, lorsque t'as un truc un peu chiadé à faire, de déléguer à l'un (ou plusieurs) de ces programmes la tâche en question et à récupérer tranquillement le résultat. Evidemment, ça nécessite de savoir utiliser l'ensemble des commandes citées...
Tuto disponible ici: http://fr.lang.free.fr/cours/Shell_v1.4.pdf
Fred_l a écrit : Mais j'ai pas le choix ! Portabilité oblige ! |
Puisque tu débutes en shell tu peux aussi te mettre à Python (je suis moi-même en train de l'apprendre). Ca c'est un langage de haut niveau qui est :
1) portable (Python existe pour tous les unix et aussi pour Windows)
2) riche (il contient les notions d'objet, de listes, de dictionnaires et de nombreuses librairies comme l'accès aux BDD, des IHM graphiques, etc...)
Tuto disponible ici: http://www.cifen.ulg.ac.be/inforef/swi/python.htm
Marsh Posté le 18-06-2006 à 21:57:46
Fred_l a écrit : OK pour le fichier ca marche : |
j ai un doute que ta derniere ligne fonctionne, esaye plutot ceci :
var="$( eval echo \${$T_Name[$index]} )"
et evite les espaces de part et d autre du '=' d'affectation
Marsh Posté le 18-06-2006 à 22:34:13
je testerais ça demain !
j'en profiterais pour mettre le code complet si ça intéresse quelqu'un !
Merci !
Marsh Posté le 19-06-2006 à 11:45:35
Ok, la récupérartion marche très bien !!
Merci gloo !
Pour ceux que ça intéresse, voici le code de gestion d etableau en 2D:
Citation : |
Marsh Posté le 19-06-2006 à 15:03:18
A avoir un tableau en 2D et de le gérer facilement !!
Bon je vais encore t'embêter !! Ba oui que veux tu !!
Voilà, il faudrais que je lise une chaîne caractère par caratère et ensuite avoir le code ainsi du caractère !!!
ma chine est du genre :
Marsh Posté le 19-06-2006 à 15:04:13
OUPS !!!!!
y'a eu un bug !!
A avoir un tableau en 2D et de le gérer facilement !!
Bon je vais encore t'embêter !! Ba oui que veux tu !!
Voilà, il faudrais que je lise une chaîne caractère par caratère et ensuite avoir le code ainsi du caractère !!!
ma chaine est du genre :
R=00025+NODE=adhpar+CTRL=O+S=SATPABIS01+W=SATPASTP01+GO+UG=P_ADHPAR
et je veux faire un CRC de celle-ci
Marsh Posté le 19-06-2006 à 15:13:37
Fred_l a écrit : OUPS !!!!! |
y a une commande pour cela : cksum ou bien sum
exemple
cksum file
ou bien
echo "$MAVariable" | cksum
et en recuperant le resultat
RES=$( echo "$MAVariable" | cksum )"
par contre, fait le man pour verifier lequel est meilleur....
y en a un des 2 qui est plus standard que l'autre .....
Marsh Posté le 19-06-2006 à 18:19:07
Ouai !!
Citation : |
Du coup pas besoin de parcourir la chaîne !!
(Même si c'est déjà fait ! )
Citation : |
Merci gloo !
Qaund tu me demande pour quoi c'est faire, si je te mets le code du plan de production tu vas prendre une crise cardiaque !!!
Une vrai usine à gaz !!
Mais ça marche !!!
Faut dire que je dois tout tester de façon à ce que si il y à unhe bourde la prod ne se plante pas !!!!
C'est aussi la raison du pourquoi passer par un tableau dynamique en 2D ! Optimisation oblige !
@+
Fred
Marsh Posté le 15-06-2006 à 20:08:08
Bonjour,
Est il possible de variabiliser un nom de tableau en KSH ?
Voici mon script :
###############################################
# Initatlisation du tableau 2D #
###############################################
function INIT_TAB
{
# INIT_TAB "T_Param" "Valeur d'initialisation"
# T_Param = PROD[100][20]
# Appel : INIT_TAB MyTable 20 20
# Récupération des infos concernant le tableau
T_Name=`echo "$1" |cut -d"[" -f1`
Lignes=`echo "$1" |cut -d"[" -f2|cut -d"]" -f1`
Colonnes=`echo "$1" |cut -d"[" -f3|cut -d"]" -f1`
# Récupération de la valeur d'initialisation
ValInit=$2
" Variables
local rc=0 # indice Ligne
local lc=0 # indice Colonne
local index # Index de positionnement
while [ $rc -lt $Lignes ]
do
while [ $lc -lt $Colonnes ]
do
# Définition de l'index **************
local colonne=`expr $lc % $Colonnes`
local ligne=`expr $rc % $Lignes`
let "index = $colonne * $Lignes + $ligne"
#******************************
# Insertion en Lx;Cy
# PROD[$index]="$ValInit" # ici ca marche
$T_Name[$index] # Ici non !
# Colonne suivante
let "lc += 1"
done
# Ligne suivante + colonne 0
lc=0
let "rc += 1"
done
}
Merci pour votre aide...
Fred