Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1589 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

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

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1974166
hazzelthor​n
Payday vador
Posté le 16-03-2010 à 15:21:56  profilanswer
 

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

mood
Publicité
Posté le 16-03-2010 à 15:21:56  profilanswer
 

n°1974219
pataluc
Posté le 16-03-2010 à 16:52:00  profilanswer
 

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?)

n°1974247
art_dupond
je suis neuneu... oui oui !!
Posté le 16-03-2010 à 17:58:48  profilanswer
 

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
n°1974359
hazzelthor​n
Payday vador
Posté le 17-03-2010 à 09:02:05  profilanswer
 

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 !

n°1974781
hazzelthor​n
Payday vador
Posté le 18-03-2010 à 09:11:15  profilanswer
 

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

n°1976203
Kerrozen
To be or not to be ... cool ..
Posté le 23-03-2010 à 10:31:04  profilanswer
 

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 !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

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

 

Sujets relatifs
[Flash] Masquage selon fichier PNGcouper une facture vers un fichier client
Déplacer une ligne de code dans un fichier XML ?Afficher le nom du fichier ouvert dans une macro sous Excel
lecture de fichier binaire .odb du logiciel ABAQUSProbleme variable fichier [ langage C ]
Access - lire les propriétés du fichier .mdb (auteur, sujet....)Case avec critères de recherches un peu tordus
batch date de création de fichierChargement d'un fichier CSS en javascript
Plus de sujets relatifs à : case in blabla (KSH) ===> fichier CSV


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR