RESOLU :comment générer un fichier excel depuis Cshell - Shell/Batch - Programmation
Marsh Posté le 28-04-2006 à 10:23:55
blandameva a écrit : c'est un script que je dois réaliser pour mon entreprise, j'ai déjà céer le script mais je dois générer un fichier excel depuis le programme csh que j'ai créer, aidez moi svp |
Si c'était si facile de créer un fichier au format XLS, on se demande pourquoi des équipes entières de développeurs travaillent sur le projet "openOffice" depuis des années... Le format XLS est un format propriétaire Micro$oft et son code est protégé.
La bonne (et probablement la seule) solution que tu as est de créer ton fichier au format "CSV" qui est un fichier texte avec
- une ligne par ligne
- chaque colonne séparée de la suivante par un élément caractéristique que tu définis toi-même et qu'on ne peut pas retrouver dans le texte de la colonne. En général c'est la virgule par défaut mais tu peux prendre ce que tu veux (un point-virgule ou une tabulation ou autre...)
Ensuite, tu importes ton fichier CSV dans Excel en lui disant quel est le séparateur que tu as choisi. Excel te créera lui-même ton tableur avec toutes les colonnes à la bonne place.
Marsh Posté le 28-04-2006 à 11:29:20
oui, merci c'est très préci comme explication, mais vois tu je suis débuter et ça m'aiderai bien si pourrai me donner un exemple de code pour générer le fichier CSV
voici ce que donne le code csh à l'exécution
Date/Heure du jour ;Web Licence;Web Active;GUI Licence;GUI Active;Z39 Licence;Z39 Active;Selfcheck Lic;Selfcheck Active
Fri Apr 28 11:28:13 CEST 2006; 000000100; 000000002; 000000020 ;000000000 ; 000000015 ; 000000000; 000000002 ;000000000
Date/Heure du jour ;Web Licence;Web Active;GUI Licence;GUI Active;Z39 Licence;Z39 Active;Selfcheck Lic;Selfcheck Active
Fri Apr 28 11:28:20 CEST 2006; 000000100; 000000002; 000000020 ;000000000 ; 000000015 ; 000000000; 000000002 ;000000000
Date/Heure du jour ;Web Licence;Web Active;GUI Licence;GUI Active;Z39 Licence;Z39 Active;Selfcheck Lic;Selfcheck Active
Fri Apr 28 11:28:26 CEST 2006; 000000100; 000000002; 000000020 ;000000000 ; 000000015 ; 000000000; 000000002 ;000000000
je voudrai maintenant comme tu me l'as dit l'importer dans un fichier CSV.
merci par avance
Marsh Posté le 28-04-2006 à 11:58:14
blandameva a écrit : oui, merci c'est très préci comme explication, mais vois tu je suis débuter et ça m'aiderai bien si pourrai me donner un exemple de code pour générer le fichier CSV |
Tu connais pas la redirection ? C'est un mécanisme général d'Unix qui te permet de renvoyer vers un fichier tout ce qu'un programme affiche à l'écran.
Exemple: tu lances "date" tu as la date à l'écran. Si tu lances "date >fic", ta date sera écrite dans un fichier "fic".
Chaque commande Unix possède 2 canaux d'affichage
- le canal standard numéroté "1"
- le canal des erreurs numéroté "2"
Chaque message standard passe par le "1", chaque message d'erreur passe par le "2"
Exemple: commande 1>res 2>err
Si la commande réussi, tout ce qu'elle affiche ira dans le fichier "res". Si elle échoue pour une raison quelconque, tous ses messages d'erreur iront dans le fichier "err".
Quand on ne met pas de chiffre, c'est le chiffre "1" qui est pris par défaut
Enfin, la simple redirection ">" réinialise le fichier, la double redirection ">>" écrit à la fin du fichier
Exemple
date >fic |
Là, ton "echo" écrase la date. il aurait fallu écrire "echo ok >>fic" pour que ça marche
Pour répondre à ta question initiale, il faut modifier ton csh pour qu'il n'affiche qu'une seule fois la ligne de titre "Date/Heure; Web; ...; Active". Ensuite, il te suffit de lancer ton script en le redirigeant vers un fichier
./script.csh >toto.csv |
Si ton script doit toujours écrire dans un CSV, alors tu peux mettre les redirections dans le script lui-même ce qui t'évite de le rediriger lorsques tu le lances (tu remplaces chaque "echo ..." par "echo ... >> toto.csv" ). Ensuite, tu lances simplement le script...
./script.csh |
Marsh Posté le 28-04-2006 à 12:45:22
si je connais et je l'avais utilisé aussi, mais je me demander si c'était ça qu'il fallait faire mais, il ya un problème:
mes valeurs à retourner sont dans une boucle, donc en redirigeant vers > test.csv
lorsque j'exécute mon script, ça ne m'affiche rien, toutes les valeurs sont retournées dans le fichier test.csv
sinono pour l'affiche de la première ligne echo, c'est résolu
[#0000ff]voici le code:
echo " Date/Heure du jour ;Web Licence;Web Active;GUI Licence;GUI Active;Z39 Licence;Z39 Active;Selfcheck Lic;Selfcheck Active"
boucle:
#variable contenant la date et l'heure de l'affichage
set dateaffiche = `date`
#set dateaffiche = `date +"%d"`_`date +"%m"`_`date +"%T"`
# Recuperation de la liste
cobrun $aleph_exe/uy_11 > /tmp/lic
set web_lic = `grep 'Licensed users' /tmp/lic | cut -d ':' -f2 | sed 's/ //g'`
set web_active = `grep 'Active users' /tmp/lic | cut -d ':' -f2 | sed 's/ //g'`
set gui_lic = `grep 'Licensed GUI users' /tmp/lic | cut -d ':' -f2 | sed 's/ //g'`
set gui_active = `grep 'Active GUI users' /tmp/lic | cut -d ':' -f2 | sed 's/ //g'`
set server_lic = `grep 'Licensed Z39 users' /tmp/lic | cut -d ':' -f2 | sed 's/ //g'`
set server_active = `grep 'Active Z39 users' /tmp/lic | cut -d ':' -f2 | sed 's/ //g'`
set check_lic = `grep 'Licensed SelfCheck servers' /tmp/lic | cut -d ':' -f2 | sed 's/ //g'`
set check_active = `grep 'Active SelfCheck servers' /tmp/lic | cut -d ':' -f2 | sed 's/ //g'`
echo "$dateaffiche; $web_lic; $web_active; $gui_lic ;$gui_active ; $server_lic ; $server_active; $check_lic ;$check_active" > test.csv
sleep 0.6;
goto boucle
[/#007f7f]
merci pour tout;
Marsh Posté le 27-04-2006 à 23:30:43
c'est un script que je dois réaliser pour mon entreprise, j'ai déjà céer le script mais je dois générer un fichier excel depuis le programme csh que j'ai créer, aidez moi svp
Message édité par blandameva le 01-05-2006 à 10:16:08