|
|
|
|
Bonjour,
Savez-vous ou je peux trouver expliqué simplement comment faire des manipulation simple sur des fichier .txt?
Le problème : j'ai un fichier de structure
M/J/A [tab] hh:mm:ss [tab] C [tab] mS/cm [tab] m
03/11/2005 [tab] 15:15:08 [tab] 10.40 [tab] 0.660 [tab] 0.041
Et pour le rentrer dans un autre programme, j'ai besoin de
J/M/A [espace] hh:mm:ss [tab] C [tab] mS/cm [tab] m
11/03/2005 [espace] 15:15:08 [tab] 10.40 [tab] 0.660 [tab] 0.041
(ordre jour/mois et premier tab tranformé en espace)
et ce pour quelques milliers de lignes (donc exclus de faire cela à la main).
Comme c'est pour mon mémoire en dess en hydrogéologie, j'ai aucune connaisance de programmation. J'imagine qu'un petit script peut facilement faire cela, mais j'en ai jamais fais.
Comme environement, je peux le faire en XP, ou en linux debian, au choix.
Merci d'avance pour les pistes/liens utile.
Renisaac
Salut,
|
Salut obeet,
sed "s/[tab]/[espace]/" fichier_sortie avec comme question, comment dire [tab] et [espace]? Comment dire le fichier d'entrée? et cela ne résout pas le problème de permutation. Renisaac |
T'es sur la bonne piste mais c'est plutôt:
sed "s/[tab]/[espace]/" fichier_entrée > fichier_sortie reste le tab et le espace... tab se traduit par: \t et espace je ne sais pas, essaye de mettre tout simplement un espace... D'autres semblent utiliser <Space><Tab> mais j'ai pas de pingouin sous la main pour tester It is only by not paying one's bills that one can hope to live in the memory of the commercial classes. |
Et comme ce n'était pas encore tout à fait l'heure de partir je me suis penché sur l'autre problème:
sed15 s/\([0-9]+\/\)\([0-9]+\/\)\([0-9]+\)/\2\1\3/g test.txt Donc récapitulons, pour commencer à voir si ça marche chez toi commence avec sed s/\t/" "/g entrée.txt > sortie.tmp sed s/\([0-9]+\/\)\([0-9]+\/\)\([0-9]+\)/\2\1\3/g sortie.tmp > sortie.txt Si jamais ça ne marche pas, les choses que tu peux tester en plus: Mettre des ' ou des " autour de s/.../g Ne pas mettre les \ devant les ( et les ) Ne pas mettre les " autour de l'espace (eventuellement ' ) Remplacer les \ dans \2\1\3 par des % ou de $ Voilà, tiens moi au courant pour savoir si ça marche... Un détail si tu dois faire ça plusieurs fois, mets ça dans un script histoire de ne pas avoir à te creuser la tête à chaque fois :o) It is only by not paying one's bills that one can hope to live in the memory of the commercial classes. |
Et tu me dis ça juste après que j'ai rebooter en linux :(
sed "s/\t/ /" li050311.txt > li050311B.txta parfaitement fonctionné! Merci déjà pour cela. Je garde bien cette commande pour les autres fichiers. Maintenant l'inversion jours/mois. As-tu une idée? ou qq'un d'autre? J'offre un verre à leuven, belgique, à celui qui trouve. Renisaac
|
2° ligne, en linux : message d'erreur :
17:34 renisaac@localhost /mnt/win_d/document/ecowwin% sed s/\([0-9]+\/\)\([0-9]+\/\)\([0-9]+\)/\2\1\3/g li050311B.txt > li050311C.txt zsh: no matches found: s/([0-9]+/)([0-9]+/)([0-9]+)/213/g zsh: exit 1 sed s/\([0-9]+\/\)\([0-9]+\/\)\([0-9]+\)/\2\1\3/g li050311B.txt > 17:35 renisaac@localhost /mnt/win_d/document/ecowwin% J'ai pas encore pris le temps de bien regarder dans le man ce que tu m'a fait faire. je regarde, puis je reboot en windows pour essayer l'autre commande. Renisaac |
Bon, il faut de tout façon les " autoure de s/.../g et remplacer les \2\1\3 par soit $ soit % pour que linux ne râle pas. Les \ avant les ( n'ont pas l'aire d'avoir d'influence. Mais malgrés tout cela, pas d'inversion jours/mois :(
|
Bon, en windows maintenant :
sed s/\t/" "/ li050311.txt > li050311B.txt Pas de g à la fin pour ne changer que le premier tab en espace, parfais. par contre sed s/\([0-9]+\/\)\([0-9]+\/\)\([0-9]+\)/\2\1\3/g li050311B.txt > li050311C.txt me recopie le fichier tel quel. L'ordre dans lequel je fais ces opérations n'a pour moi pas d'importance. Et je peux utiliser d'autres outils. J'ai bien essayé de voir avec les formats de date dans excel ou OOo, mais j'ai pas encore réussi. quelqu'un a-t-il une idée ou foire ma commande? comment faire d'autre? Renisaac |
Salut,
sed 's/^\([0-9][0-9]*\/\)\([0-9][0-9]*\/\)/\2\1/'Pour ne pas être obligé de passer par un fichier temporaire, tu peux utiliser l'option "-i" de "sed". Allez un ch'tit exemple : [jp@Mandrake tmpfs]$ cat fichier.txt 03/11/2005 15:15:08 10.40 0.660 0.041 03/11/2005 15:15:08 10.40 0.660 0.041 03/11/2005 15:15:08 10.40 0.660 0.041 03/11/2005 15:15:08 10.40 0.660 0.041 03/11/2005 15:15:08 10.40 0.660 0.041 03/11/2005 15:15:08 10.40 0.660 0.041 [jp@Mandrake tmpfs]$ sed -i 's/^\([0-9][0-9]*\/\)\([0-9][0-9]*\/\)/\2\1/' fichier.txt [jp@Mandrake tmpfs]$ cat fichier.txt 11/03/2005 15:15:08 10.40 0.660 0.041 11/03/2005 15:15:08 10.40 0.660 0.041 11/03/2005 15:15:08 10.40 0.660 0.041 11/03/2005 15:15:08 10.40 0.660 0.041 11/03/2005 15:15:08 10.40 0.660 0.041 11/03/2005 15:15:08 10.40 0.660 0.041 [jp@Mandrake tmpfs]$;-)) Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé. |
Bonjour en ce moment je suis en plein projet j'ai un fichier.txt enregistré sous mon disque (C:\text\fichier.txt) dur et je dois extraire les données de ce fichier.txt en passant par du langage c ou c++. Sachant que je dois afficher ma chaine extraite sous C++Builder_5 à partir d'un IHM (interface homme machine) que j'ai crée... Sachant que dans mon fichier.txt contient des points "." utilisé pour la séparation des données. je vous remercie d"avance tt aide seré la bienvenue!!!!!!!!!!! |