|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | |||
|
Membre à l'essai
![]() Inscription : avril 2011 Messages : 38 ![]() |
Bonjour,
Je dois faire la migration d'un script vba en shell unix. L'objectif est de construire un fichier csv à partir de données brutes. Dans ce fichier je dois remplir un champs (nombre de mouvements) en fonction du champ contrat. En gros le champ Nombre de mouvement est égal à 0 sauf s'il ya doublons de contrat ID et dans ce cas le dernier doublons prend la valeur 1 et les champs précèdents ont la valeur 0 Citation:
Quelqu'un aurait il une idée sur comment je pourrai faire ca sans passer par les tableaux. Merci de votre aide Voici l'équivalence en vba Code :
|
|||
|
|
01
|
|
|
#2 |
|
Membre Expert
![]() Inscription : avril 2008 Messages : 800 ![]() |
Bonjour.
Il semble que tu donnes un exemple du résultat attendu, mais il manque le format des données d'entrée. Peux-tu le fournir? Es-tu contraint à 'ksh'? Pour dépasser les limites, as-tu (peux-tu) essayé(er) avec 'bash'? Sinon, il y a aussi awk et sed... (mais ça dépend de l'input) |
|
|
40
|
|
|
#3 |
|
Membre à l'essai
![]() Inscription : avril 2011 Messages : 38 ![]() |
Bonjour jack-ft,
En entrée j'ai un fichier CSV avec différents champs délimités par un ; LE champ contrat représente le 1 er champ. En fonction de ce champ je dois remplir un autre champ (redondance ou pas). je ne suis pas contraint à ksh le bash m'irait bien aussi. En utilisant les tableaux j'ai le message d'erreur tab: subscript out of range --> limite tableau 1024. |
|
|
01
|
|
|
#4 | |
|
Expert Confirmé Sénior
![]() Inscription : janvier 2011 Messages : 1 453 ![]() |
Salut,
Citation:
Merci.
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|
|
|
10
|
|
|
#5 | |||||
|
Membre à l'essai
![]() Inscription : avril 2011 Messages : 38 ![]() |
Citation:
Bonjour, Voici les formats de fichiers en entree et sortie. Avant Code :
Après Code :
|
|||||
|
|
00
|
|
|
#6 | ||||||
|
Expert Confirmé Sénior
![]() Inscription : janvier 2011 Messages : 1 453 ![]() |
Une solution à base de "sed". Attention codeur sensible s'abstenir, tarabiscotage en vue
![]() Le fichier d'entrée : Code :
Code :
Code :
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
||||||
|
|
20
|
|
|
#7 | ||||
|
Membre à l'essai
![]() Inscription : avril 2011 Messages : 38 ![]() |
Citation:
Citation:
Code :
sed: /\([^\n]*\).*\n\1$/! { is not a recognized function. |
||||
|
|
10
|
|
|
#8 | ||
|
Expert Confirmé Sénior
![]() Inscription : janvier 2011 Messages : 1 453 ![]() |
Normalement ça devrait l'être
Essaie en enlevant les espaces avant les "{" : Code :
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
||
|
|
10
|
|
|
#9 | ||
|
Membre à l'essai
![]() Inscription : avril 2011 Messages : 38 ![]() |
Merci zipe31,
Je vais tester demain matin. Vu la complexité du code (réservé que pour les experts je crois Mon cas réel: Jai un fichier csv result.csv avec différents champs séparés par des ; Ex Contrat;xxxx;xxxxxxx;xxxxx;xxxxx;xxxxxx Je fais une boucle Code :
Merci beaucoup |
||
|
|
10
|
|
|
#10 | |||||
|
Membre Expert
![]() Inscription : avril 2008 Messages : 800 ![]() |
Citation:
Du coup, je pense qu'on doit pouvoir obtenir, avec awk, une solution lisible (donc adaptable)... |
|||||
|
|
20
|
|
|
#11 | |
|
Membre à l'essai
![]() Inscription : avril 2011 Messages : 38 ![]() |
Citation:
Une solution sur awk serait la bienvenue : lol: merci |
|
|
|
00
|
|
|
#12 | |||
|
Membre à l'essai
![]() Inscription : avril 2011 Messages : 38 ![]() |
Citation:
Maintenant le problème réside dans la façon de l'adapter à mon programme |
|||
|
|
10
|
|
|
#13 | ||||||
|
Expert Confirmé Sénior
![]() Inscription : janvier 2011 Messages : 1 453 ![]() |
Le fichier avec d'autres champs :
Code :
Code :
Code :
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
||||||
|
|
20
|
|
|
#14 | ||
![]() ![]() Inscription : juin 2007 Messages : 1 111 ![]() |
Une solution plus simple utilisant awk:
Code :
__________________
ɹǝsn *sıɹɐlos* |
||
|
|
01
|
|
|
#15 | |||
|
Expert Confirmé Sénior
![]() Inscription : janvier 2011 Messages : 1 453 ![]() |
Citation:
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|||
|
|
10
|
|
|
#16 | ||
![]() ![]() Inscription : juin 2007 Messages : 1 111 ![]() |
Bien vu. Elle doit l'être maintenant:
Code :
__________________
ɹǝsn *sıɹɐlos* |
||
|
|
10
|
|
|
#17 |
|
Expert Confirmé Sénior
![]() Inscription : janvier 2011 Messages : 1 453 ![]() |
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|
|
10
|
|
|
#18 | ||||||
|
Membre à l'essai
![]() Inscription : avril 2011 Messages : 38 ![]() |
Je l'ai testé avec mon cas ca ne semble pas fonctionne.
Désolé je pense que je me suis mal exprimé sur mon cas réel. Voici les inputs et outputs souhaités Entrée Code :
Sortie actuelle avec le script ci dessus Code :
Code :
|
||||||
|
|
00
|
|
|
#19 | ||
![]() ![]() Inscription : juin 2007 Messages : 1 111 ![]() |
Code :
__________________
ɹǝsn *sıɹɐlos* |
||
|
|
20
|
|
|
#20 | ||||
|
Membre à l'essai
![]() Inscription : avril 2011 Messages : 38 ![]() |
La solution semble bien marcher sauf qu'en cas de redondance le champ Nombre de mouvement des premiers champs est égal à 0 il n' y a que le dernier qui prend 1.
J'ai l'impression que dans le script c'est plutôt l'inverse: La première ligne prend 1 et la seconde prend 0. Exemple: Code :
Code :
Je vous remercie déjà beaucoup ! |
||||
|
|
10
|
Copyright © 2000-2013 - www.developpez.com