Flux rss
Collection CommentÇaMarche.net
Rechercher : dans
Par :

Manipulation fichier .txt

renisaac, le mercredi 18 mai 2005 à 16:36:38 
 Signaler ce message aux modérateurs

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

1

teebo, le mercredi 18 mai 2005 à 16:39:29

Salut,
Sous linux avec sed tu peux utiliser des expressions régulières, regarde dans man sed si tu trouves ce que tu veux...
Je pourrais t'aider après si tu as des problèmes, le plus dur est l'invertion JMA mais ça doit être jouable quand même sans trop de problèmes
It is only by not paying one's bills that one can
hope to live in the memory of the commercial classes.

Répondre à teebo

2

renisaac, le mercredi 18 mai 2005 à 16:58:08

Salut obeet,

Donc si j'ai bien lu les man, pour remplacer mon premier tab par espace, ça doit être une fonction genre

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

Répondre à renisaac

3

teebo, le mercredi 18 mai 2005 à 17:05:42
  • +2

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.

Répondre à teebo

4

teebo, le mercredi 18 mai 2005 à 17:20:19
  • +1

En fait avec sed15 (qui fait plus ou moins la même chose sous windows) il me faut écrire

sed15 s/\t/" "/g entrée.txt

pour que ça marche
It is only by not paying one's bills that one can
hope to live in the memory of the commercial classes.

Répondre à teebo

5

teebo, le mercredi 18 mai 2005 à 17:30:38
  • +1

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.

Répondre à teebo

6

renisaac, le mercredi 18 mai 2005 à 17:31:34
  • +1

Et tu me dis ça juste après que j'ai rebooter en linux :(

bon,

sed "s/\t/ /" li050311.txt > li050311B.txt
a 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

Répondre à renisaac

8

teebo, le mercredi 18 mai 2005 à 17:40:14
  • +1

Ca marche moins bien la version windows :-P
Mais tu as regardé mes autres posts? Je pense avoir donné la solution (au pire repasse sous windows et télécharge sed15 :-D désolé je l'avais oublié en fait pour être honnête, j'avais récupéré ça un jour la commande me manquait)
It is only by not paying one's bills that one can
hope to live in the memory of the commercial classes.

Répondre à teebo

7

renisaac, le mercredi 18 mai 2005 à 17:40:02
  • +1

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

Répondre à renisaac

9

teebo, le mercredi 18 mai 2005 à 17:41:53
  • +1

Pour sed15 il faut la télécharger je ne sais plus où...

Pour le reste essaye

sed s/([0-9]+\/)([0-9]+\/)([0-9]+)/\2\1\3/g sans doute...
It is only by not paying one's bills that one can
hope to live in the memory of the commercial classes.

Répondre à teebo

10

teebo, le mercredi 18 mai 2005 à 17:42:13
  • +1

Bon je suis parti, suite demain...(ou ce soir...)
It is only by not paying one's bills that one can
hope to live in the memory of the commercial classes.

Répondre à teebo

11

renisaac, le mercredi 18 mai 2005 à 17:47:49
  • +1

OK, merci beaucoup en tout cas

Renisaac

Répondre à renisaac

12

renisaac, le mercredi 18 mai 2005 à 18:05:23
  • +1

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, je repasse en windows. si qq'un une idée en attandant...

Renisaac

Répondre à renisaac

13

renisaac, le mercredi 18 mai 2005 à 18:46:17
  • +1

Bon, en windows maintenant :

j'ai téléchargé la version gnu à cette page : http://users.cybercity.dk/~bse26236/batutil/help/SED.HTM#11.­80

pour remplacer le tab par espace, ça a de nopuveau été sans trop de pb :

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

Répondre à renisaac

14

jipicy, le mercredi 18 mai 2005 à 20:35:46
  • +1

Salut,

Tiens la syntaxe est la suivante :

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é. 

Répondre à jipicy

16

Obeet, le mercredi 18 mai 2005 à 22:50:15
  • +1

-i ?
Sinon apparement j'étais pas loin quand même :o)

Le TeebObeeT en pyjama

Répondre à Obeet

17

jipicy, le mercredi 18 mai 2005 à 22:59:21
  • +1

Salut le TeebObeet préféré de l'autre je sais plus comment ;-)

-i[suffix], --in-place[=suffix]

              edit files in place (makes backup if extension supplied)
Ben voui, t'étais pas loin quand même ;-)) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. 

Répondre à jipicy

15

renisaac, le mercredi 18 mai 2005 à 21:20:29
  • +1

GENIAL

Merci beaucoup à tous les deux. C'est pas de la hot line, mais prèsque!

bon, plus qu'a me battre avec tempo pour faire ce que j'ai envie. Rarement vu un programme aussi contre-intuitif.

Bonne soirée.

Renisaac

Répondre à renisaac

19

 Sissiman_972, le jeudi 21 février 2008 à 14:21:18
  • +1

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!!!!!!!!!!!

Répondre à Sissiman_972
Programmation BATCH sur des fichiers txt Bonjour, Je souhaite créer un .BAT (sous Windows XP pro) pour exécuter une commande sur tous les fichiers txt se trouvant dans un dossier. J'utilise pour celà: for %%a in (*.txt) do ma_commande %%a Le pb c'est que le 1er fichier txt traité est le plus... www.commentcamarche.net/forum/affich-863065-programmation-batch-sur-des-fichiers-txt
Fichier TXT Format TXT Un fichier TXT est un fichier texte, c'est-à-dire un simple fichier contenant du texte au format ASCII. Pour ouvrir ou modifier un tel fichier, il suffit d'utiliser le bloc-notes ou un éditeur de texte traditionnel. www.commentcamarche.net/contents/fichier/txt.php3
Découper fichier TXT en pls fichiers Excel (Résolu) Bonjour, J'ai un fichier .txt qui contient 300 000 lignes. J'ai besoin de le mettre sous excel. Comment faire pour créer automatiquement un premier fichier avec les 65 536 premières lignes, un autre avec les 65536 suivantes ... et appeler ces fichiers... www.commentcamarche.net/forum/affich-3218992-decouper-fichier-txt-en-pls-fichiers-excel
[MS-Dos] Ecrire dans un fichier texte en batchPour écrire dans un fichier texte, il suffit d'utiliser une redirection ">" :echo texte_à_ecrire > fichier_de_sortie.txtPour écrire à la fin d'un texte existant (concaténation) :echo "ecriture a la fin du fichier ">> fichier_de_sortie.txt www.commentcamarche.net/faq/sujet-2695-ms-dos-ecrire-dans-un-fichier-texte-en-batch
Comment lire un fichier ligne par ligneComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier... www.commentcamarche.net/faq/sujet-5027-comment-lire-un-fichier-ligne-par-ligne
[MS-Dos] Lister le contenu d'un répertoire dans un fichierIl peut s'avérer pratique d'effectuer le listage d'un ou plusieurs répertoires dans un fichier, afin de tenir par exemple un catalogue de fichiers. Sous MS-Dos (ou sous Windows en ouvrant une fenêtre d'invite de commande MS-Dos) il est possible... www.commentcamarche.net/faq/sujet-948-ms-dos-lister-le-contenu-d-un-repertoire-dans-un-fichier
[Excel/VBA]ecrire un fichier .txtBonjour, Je souhaiterais faire une macro qui, à partir d'une feuille excel remplie de données, enregistre plusieurs fichiers .txt après avoir travaillé sur les données. Le travail consiste principalement à de la mise en forme, car les fichiers seront... www.commentcamarche.net/forum/affich-2235362-excel-vba-ecrire-un-fichier-txt
Comment creer un fichier txt en VB6Bonjour forum j'ai besoin de creer un fichier txt en VB6 est ce que quelqu'un a une idée? merci d'avance www.commentcamarche.net/forum/affich-1550698-comment-creer-un-fichier-txt-en-vb6
Formats et extensions de fichiersRemarque : La liste ci-dessous n'est pas exhaustive et certains noms d'extension peuvent avoir plusieures fonctionnalités. Quant aux programmes proposés pour utiliser ces fichiers, ils ne sont pas forcément les seuls, ni les plus... www.commentcamarche.net/contents/systemes/format.php3
PHP - Les fichiersLa gestion des fichiers avec PHP Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier... www.commentcamarche.net/contents/php/phpfich.php3
UNIX - Les fichiersIntroduction aux fichiers Unix Sous les systèmes UNIX tout élément est représenté sous forme de fichier. L'ensemble des fichiers est architecturé autour d'une unique arborescence dont la base, appelée racine, est notée «/». Types de... www.commentcamarche.net/contents/unix/unix-fichiers.php3