case in blabla (KSH) ===> fichier CSV

case in blabla (KSH) ===> fichier CSV - Shell/Batch - Programmation

Marsh Posté le 16-03-2010 à 15:21:56    

Bien le bonjour,
 
Voilà mon "petit" problème
 
j'ai une fichier texte de cette forme :  (Des blocs de longueurs fixe) qui s'apelle pour mon exemple totototo.txt
 
[app:EAI_GP/0292_STOP_TSK_TR]
mode=job
heure_debut=00:00:00
heure_fin=24:00:00
type_periodicite=demande
cyclique=non
cycle=00:00:00
periodicite=Journaliere
status=A_VENIR
fstatus=A_VENIR
derniere_exec=03-11-2009 22:14:16
derniere_exec_fin=03-11-2009 22:15:01
derniere_date=05-11-2009
derniere_stat=04-11-2009
ne_pas_deplanifier=oui
attendre_avant_deplanification=non
jobs=IS_Stop_TR,EAIG_StopSup_TR
nombre_de_jobs=2
dfl_node=90x26
link_diag=1/1
geometrie=150x26+175+600
sbgclr=Blue
slblclr=White
sdrwlbl=2
sshape=5
planning=EAI_GP/0292_STOP_TSK_TR
 
[app:EAI_GP/0292_STAR_TSK_TR]
mode=job
heure_debut=00:00:00
heure_fin=24:00:00
type_periodicite=demande
cyclique=non
cycle=00:00:00
periodicite=Journaliere
status=A_VENIR
fstatus=A_VENIR
derniere_exec=04-11-2009 05:09:32
derniere_exec_fin=04-11-2009 05:09:52
derniere_date=05-11-2009
derniere_stat=04-11-2009
ne_pas_deplanifier=oui
attendre_avant_deplanification=non
jobs=IS_Start_TR,EAIG_StartSup_TR
nombre_de_jobs=2
dfl_node=90x26
link_diag=1/1
geometrie=150x26+255+600
sbgclr=Blue
slblclr=White
sdrwlbl=2
sshape=5
planning=EAI_GP/0292_STAR_TSK_TR
 
 
 
 
 
je réalise le traitement suivant :  
 

Code :
  1. #!/bin/ksh
  2. sed "/derniere_exec/d;/derniere_stat/d;/derniere_exec_fin/d;/derniere_date/d"  totototo.txt>>tatatata.txt


 
qui me permet de virer 4 lignes que je ne veux pas
ensuite,
 
je fais ca  
 

Code :
  1. echo "nom;mode;heure_debut;heure_fin;type_periodicite;cyclique;cycle,periodicite;status;fsatus;ne_pas_deplanifier;attendre_avant_deplanification,jobs;nombre_de_job;dfl_node;link_diag;geometrie;sbgclr;sdrwlbl;sshape;planning" >>damien88.txt


 
je crée un fichier avec mes en-tête de colonne pour mon futur fichier CSV
 
et la je veux remplir ce fichier texte en respectant l'ordre des en-tete de colonne que j'viens de lui donner d'après les blocs de données que j'ai donné plus haut
 
tout ca dans le but d'avoir un fichier texte en sortie (délimité par des ";" )

Code :
  1. nom;mode;heure_debut;heure_fin;type_periodicite;cyclique;cycle,periodicite;status;fsatus;ne_pas_deplanifier;attendre_avant_deplanification,jobs;nombre_de_job;dfl_node;link_diag;geometrie;sbgclr;sdrwlbl;sshape;planning


 
 
avec toutes mes colonnes remplies en fonction de mes blocs.
J'ai bien essayé avec switch et case pour chaque cas en affectant differentes variables pour recuperer les info que j'voulais mais sans succes, si une personne voudrait bien m'aider...
 
Cordialement
 
Bonne fin de journée

Reply

Marsh Posté le 16-03-2010 à 15:21:56   

Reply

Marsh Posté le 16-03-2010 à 16:52:00    

tiens, ca faisait longtemps que j'avais pas vu un export vtom... :D
 
t'as quoi comme code pour le moment? (a part ton sed?)

Reply

Marsh Posté le 16-03-2010 à 17:58:48    

Si j'ai bien compris :

 

tu peux parcourir ton fichier

Code :
  1. while read line
  2. do
  3. done < fichier
 


1. Tu nies les lignes vides
2. Tu coupes sur ":" => debut=$(echo $line | cut -d ":" -f1)
    si $debut = '[app' => t'es dans un nouveau bloc => tu commences à construire la ligne que tu vas ajouter à ton CSV.

 

   Tant que tu n'es pas dans un nouveau bloc, tu coupes sur "=" (cut -d "=" -f2-)
    => tu ajoutes la valeurs à ta ligne précédée d'un ";"

 

3. Quand tu arrives dans un nouveau bloc => tu ajoutes ta ligne dans ton CSV et tu recommences à construire ta ligne
4. Après avoir lu tout ton fichier, tu ajoutes la ligne à ton CSV (puisque tu n'entreras plus dans un nouveau bloc)

 


Message édité par art_dupond le 16-03-2010 à 18:28:09

---------------
oui oui
Reply

Marsh Posté le 17-03-2010 à 09:02:05    

tu sais quoi ben c'est ske j'ai fait en fin de journée après avoir posé proprement l'algo :d merci encore !

Reply

Marsh Posté le 18-03-2010 à 09:11:15    

voila une partie du code :) juste pour gerer [app:
 

Code :
  1. #!/bin/ksh -vx
  2. FichierSortie=/home4/dpineau/damien.txt
  3. FichierEntre=/home4/dpineau/export_vtom.exp
  4. FichierEntre2=home4/dpineau/totototo.txt
  5. sed -n '/\[app:/,/\""/p' $FichierEntre >totototo.txt
  6. sed "/derniere_exec/d;/derniere_stat/d;/derniere_exec_fin/d;/derniere_date/d"  totototo.txt>>$FichierSortie
  7. echo "nom,mode,heure_debut,heure_fin,type_periodicite,cyclique,cycle,periodicite,machine,status,fstatus,ne_deplanifier,attendre_avant_deplanification,heure_deplanification,heure_deplanification,lien_vers,lin_de,jobs,_nombre_de_job,dfl_node,link_diag,geometrie,sbgclr,slblclr,sdrwlbl,sshape,planning" >damien88.txt
  8. for Line in `cat $FichierSortie`
  9. do
  10. if [ `echo $Line | grep '^\[app:' | wc -l` -eq 1 ] ;
  11.  then
  12.   attribut=$(echo $Line | cut -d ":" -f1 | cut -d "[" -f2-) && valeur=$(echo $Line | cut -d ":" -f2- | cut -d "]" -f1)
  13.  else
  14.   attribut=$(echo $Line | cut -d "=" -f1) && valeur=$(echo $Line | cut -d "=" -f2-)
  15. fi
  16.  case $attribut in
  17.   app) nom=$valeur ;;
  18.   mode) mode=$valeur ;;
  19.   heure_debut) heure_debut=$valeur ;;
  20.   heure_fin) heure_fin=$valeur ;;
  21.   type_periodicite) type_perio=$valeur ;;
  22.   cyclique) cyclique=$valeur ;;
  23.   cycle) cycle=$valeur ;;
  24.   periodicite) perio=$valeur ;;
  25.   status) status=$valeur ;;
  26.   fstatus) fstatus=$valeur ;;
  27.   ne_pas_deplanifier) ne_pas_deplanifier=$valeur ;;
  28.   attendre_avant_deplanification) attendre_avant_deplanification=$valeur ;;
  29.   jobs) jobs=$valeur ;;
  30.   nombre_de_jobs) nbr_job=$valeur ;;
  31.   dfl_node) dfl_node=$valeur ;;
  32.   link_diag) link_diag=$valeur ;;
  33.   geometrie) geometrie=$valeur ;;
  34.   sbgclr) sbgclr=$valeur ;;
  35.   slblclr) slblclr=$valeur ;;
  36.   sdrwlbl) sdrwlbl=$valeur ;;
  37.   sshape) sshape=$valeur ;;
  38.   planning) planning=$valeur ;;
  39.   *) echo $nom,$mode,$heure_debut,$heure_fin,$type_perio,$cyclique,$cycle,$perio,$status,$fstatus,$ne_pas_deplanifier,$attendre_avant_deplanification,$jobs,$nbr_job,$dfl_node,$link_diag,$geometrie,$sbgclr,$slblclr,$sdrwlbl,$sshape,$planning | sort -u>>damientototototot.txt
  40.  esac
  41. done

Reply

Marsh Posté le 23-03-2010 à 10:31:04    

J'étais parti à bricoler un truc bizarre avec un AWK piqué des hannetons mais ta solution me semble bien plus propre et claire ^^
 
Jayjay !


---------------
En programmation, quand t'as un problème et qu'il n'y a que deux solutions valides, seule la troisième fonctionne !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed