traitement de texte en masse

traitement de texte en masse - Logiciels - Windows & Software

Marsh Posté le 05-07-2005 à 16:49:42    

le titre du sujet est explicite, désolé j'ai pas trouvé mieux.
 
En fait j'ai un problème :  
 
j'ai un fichier excel de quelques miliers de lignes formaté de la façon suivante :  
 


blablabla
          doudoudou     1     dodo     xxxxx     tatata     0000000000
          doudoudou     1     dodo     xxxxx     tatata     0000000000
          doudoudou     1     dodo     xxxxx     tatata     0000000000
blublublu
          doudoudou     1     dodo     xxxxx     tatata     0000000000
          doudoudou     1     dodo     xxxxx     tatata     0000000000
          doudoudou     1     dodo     xxxxx     tatata     0000000000


 
Tout ça dans un document excel
 
Je souhaite obtenir le résultat suivant :  
 


blablabla
          doudoudou      
          1 dodo xxxxx tatata
          0000000000
 
          doudoudou      
          1 dodo xxxxx tatata
          0000000000
 
          doudoudou      
          1 dodo xxxxx tatata
          0000000000
 
blublublu
 
          doudoudou      
          1 dodo xxxxx tatata
          0000000000
 
          doudoudou      
          1 dodo xxxxx tatata
          0000000000
 
          doudoudou      
          1 dodo xxxxx tatata
          0000000000


 
Mais la blague c'est que je veux cette disposition pour toutes les lignes, sans que ça apparaisse dans un tableau, grosso modo un truc au kilomètre quoi.
 
Pour le passage de excel (tableau) vers du word (sans tableau) je suis passé par un fichier CSV (avec openoffice) et j'ai donc une mise en page valable dans word.
 
Maintenant si je veux ma 'bonne' disposition je prends textpad et je me farçis toutes les lignes les unes après les autres.
 
Vous ne connaitriez pas une méthode plus rapide?
 
Merci!

Reply

Marsh Posté le 05-07-2005 à 16:49:42   

Reply

Marsh Posté le 05-07-2005 à 17:16:21    

[:sisicaivrai]

Reply

Marsh Posté le 05-07-2005 à 17:50:23    

Bonsoir,
 
Tu as besoin d'apprendre un langage de programmation : il y a un forum http://forum.hardware.fr/hardwaref [...] _sujet.htm
 
Si tu connais plus ou moins les expressions régulières, Editpad (Pro - 30 jours d'essaie) peut t'aider.

Reply

Marsh Posté le 05-07-2005 à 18:25:02    

en fait je ne vois pas le rapport avec la programmation : je ne vais pas pondre un soft en turbopascal pour parcourir mon fichier, d'autant qu'il n'y a pas une ligne identique, et qu'il n'y a pas un mot identique, que les coupures ne sont pas toutes au même endroit...

Reply

Marsh Posté le 05-07-2005 à 18:30:07    

Pas un soft mais un script.
 
Et puis pas de mot identique mais il doit y avoir un certain "format", parce que sinon je ne vois pas comment tu peux t'en sortir :)


Message édité par wackevat le 05-07-2005 à 18:31:21
Reply

Marsh Posté le 05-07-2005 à 20:48:33    

Pas évident ton truc.
Tu n'aurais pas Access par hazard ? Parce qu'alors ce serait très facile à faire.
 
Je bosse sur ton problème, mais en VBA dans Excel.
Je reviens demain.
 
A+

Reply

Marsh Posté le 05-07-2005 à 22:06:04    

Au niveau de la structure, tu as bien une ligne avec un seul champ suivie de plusieures lignes comportant X champs ?


Message édité par Deadlock le 05-07-2005 à 22:23:17

---------------
Institutions européennes: Ensemble d'outils dont le but est de transformer une grande quantité d'argent en merde. Cette merde est utilisée pour créer de nouveaux fonctionnaires. L'argent restant payant des externes pour faire leur travail.
Reply

Marsh Posté le 05-07-2005 à 22:22:08    

Si c'est le cas, tu installes Cygwin ou n'importe quel package permettant d'utiliser la commande AWK (ou NAWK, GAWK, ...) sous windows et tu peux faire ça en une simple commande:
 
$ cat input.txt

blablabla
          doudoudo1     1     dodo1    xxxx1     tatat1     0000000001
          doudoudo2     2     dodo2    xxxx2     tatat2     0000000002
          doudoudo3     3     dodo3    xxxx3     tatat3     0000000003
blublublu
          doudoudo4     4     dodo4    xxxx4     tatat4     0000000004
          doudoudo5     5     dodo5    xxxx5     tatat5     0000000005
          doudoudo6     6     dodo6    xxxx6     tatat6     0000000006


 
$  awk 'NF == 1 { print $0 ; next } { print "\t"$1"\n\t"$2" "$3" "$4" "$5"\n\t"$6"\n" }' input.txt

blablabla
        doudoudo1
        1 dodo1 xxxx1 tatat1
        0000000001
 
        doudoudo2
        2 dodo2 xxxx2 tatat2
        0000000002
 
        doudoudo3
        3 dodo3 xxxx3 tatat3
        0000000003
 
blublublu
        doudoudo4
        4 dodo4 xxxx4 tatat4
        0000000004
 
        doudoudo5
        5 dodo5 xxxx5 tatat5
        0000000005
 
        doudoudo6
        6 dodo6 xxxx6 tatat6
        0000000006


 
C'est la méthode la plus simple et la plus rapide ... car AWK est fait pour ce genre de traitement.
Comme dans ton exemple je ne sais pas si tu veux une ligne vierge entre la première et la seconde (tes deux exemples sont différents) tu peux ajouter cette ligne en remplaçant le { print $0 ; next } par { print $0"\n" ; next }


Message édité par Deadlock le 05-07-2005 à 22:30:37

---------------
Institutions européennes: Ensemble d'outils dont le but est de transformer une grande quantité d'argent en merde. Cette merde est utilisée pour créer de nouveaux fonctionnaires. L'argent restant payant des externes pour faire leur travail.
Reply

Marsh Posté le 05-07-2005 à 23:32:35    

wackevat a écrit :

Pas un soft mais un script.
 
Et puis pas de mot identique mais il doit y avoir un certain "format", parce que sinon je ne vois pas comment tu peux t'en sortir :)


oui, le format que j'ai indiqué juste au dessus :)

Reply

Marsh Posté le 05-07-2005 à 23:32:46    

Papy Octet a écrit :

Pas évident ton truc.
Tu n'aurais pas Access par hazard ? Parce qu'alors ce serait très facile à faire.
 
Je bosse sur ton problème, mais en VBA dans Excel.
Je reviens demain.
 
A+


 
 
je t'en remercie :jap:

Reply

Marsh Posté le 05-07-2005 à 23:32:46   

Reply

Marsh Posté le 05-07-2005 à 23:33:27    

Deadlock a écrit :

Si c'est le cas, tu installes Cygwin ou n'importe quel package permettant d'utiliser la commande AWK (ou NAWK, GAWK, ...) sous windows et tu peux faire ça en une simple commande:
 
$ cat input.txt

blablabla
          doudoudo1     1     dodo1    xxxx1     tatat1     0000000001
          doudoudo2     2     dodo2    xxxx2     tatat2     0000000002
          doudoudo3     3     dodo3    xxxx3     tatat3     0000000003
blublublu
          doudoudo4     4     dodo4    xxxx4     tatat4     0000000004
          doudoudo5     5     dodo5    xxxx5     tatat5     0000000005
          doudoudo6     6     dodo6    xxxx6     tatat6     0000000006


 
$  awk 'NF == 1 { print $0 ; next } { print "\t"$1"\n\t"$2" "$3" "$4" "$5"\n\t"$6"\n" }' input.txt

blablabla
        doudoudo1
        1 dodo1 xxxx1 tatat1
        0000000001
 
        doudoudo2
        2 dodo2 xxxx2 tatat2
        0000000002
 
        doudoudo3
        3 dodo3 xxxx3 tatat3
        0000000003
 
blublublu
        doudoudo4
        4 dodo4 xxxx4 tatat4
        0000000004
 
        doudoudo5
        5 dodo5 xxxx5 tatat5
        0000000005
 
        doudoudo6
        6 dodo6 xxxx6 tatat6
        0000000006


 
C'est la méthode la plus simple et la plus rapide ... car AWK est fait pour ce genre de traitement.
Comme dans ton exemple je ne sais pas si tu veux une ligne vierge entre la première et la seconde (tes deux exemples sont différents) tu peux ajouter cette ligne en remplaçant le { print $0 ; next } par { print $0"\n" ; next }


 
 
j'ai un linux a mes cotés, je vais tester ça dès mon arrivée au taf  [:plat00n]

Reply

Marsh Posté le 05-07-2005 à 23:34:19    

par contre deadlock, tu pourrais m'expliquer le fonctionnement de ta ligne de commande s'il te plait? :jap:

Reply

Marsh Posté le 06-07-2005 à 08:22:42    

Krapaud a écrit :

par contre deadlock, tu pourrais m'expliquer le fonctionnement de ta ligne de commande s'il te plait? :jap:

C'est assez basic comme AWK. AWK fait du traitement séquentiel sur des fichiers texte. Il commence par la première ligne et applique les règles définies ligne par ligne. $0 représente la ligne complète, $1 à $n représentent les champs de cette ligne séparés par la variable FS (Field separator) qui par défaut utilise l'espace ou la TAB, FS n'est donc pas renseigné dans cet exemple car induit. NF retourne le nombre de champs dans la ligne en cours ($0).
La commande que je t'ai donnée est un simple IF ... THEN ... ELSE
 
NF == 1 -> Si le nombre de champs est égal à 1
{ print $0 ; next } -> Alors affiche la ligne complète et passe à la suivante
{ print "\t"$1"\n\t"$2" "$3" "$4" "$5"\n\t"$6"\n" } -> Dans le cas contraire (nombre de champs différent de 1) affiche une TAB + champ1 + CR + TAB + champ2 + SPC + champ3 + SPC + champ4 + SPC + champ5 + CR + TAB + champ6 + CR
 
Et ainsi de suite ...
Mais encore une fois c'est un AWK des plus simples, le AWK est proche du C avec des clauses BEGIN/END, des tableaux multi-dim, des boucles, traitment NUM/STR, incrémentations (i++, ++i, i--, ...) etc, etc, ...


Message édité par Deadlock le 06-07-2005 à 08:25:50

---------------
Institutions européennes: Ensemble d'outils dont le but est de transformer une grande quantité d'argent en merde. Cette merde est utilisée pour créer de nouveaux fonctionnaires. L'argent restant payant des externes pour faire leur travail.
Reply

Marsh Posté le 06-07-2005 à 12:49:04    

je nai qu'une chose à dire :  [:plat00n]  [:plat00n]  [:plat00n]  [:plat00n]  [:plat00n]  [:plat00n]  
 
ça marche presque, j'ai une ou deux modifs à faire mais c'est ça :o

Reply

Marsh Posté le 06-07-2005 à 12:50:27    

par contre ça me supprime des éléments :o

Reply

Marsh Posté le 06-07-2005 à 12:53:30    

Si tu as des exceptions (lignes vides, test sur certains champs, ...) donne les moi et je les prendrais en compte. Ca peut être utile si tu dois faire ce traitement plusieures fois.


---------------
Institutions européennes: Ensemble d'outils dont le but est de transformer une grande quantité d'argent en merde. Cette merde est utilisée pour créer de nouveaux fonctionnaires. L'argent restant payant des externes pour faire leur travail.
Reply

Marsh Posté le 06-07-2005 à 12:54:23    

Krapaud a écrit :

par contre ça me supprime des éléments :o

Ah bon ? Ton exemple ne dois pas être suffisant pour déduire la structure alors.


---------------
Institutions européennes: Ensemble d'outils dont le but est de transformer une grande quantité d'argent en merde. Cette merde est utilisée pour créer de nouveaux fonctionnaires. L'argent restant payant des externes pour faire leur travail.
Reply

Marsh Posté le 06-07-2005 à 12:58:59    

ok, je vais te donner un exemple

Reply

Marsh Posté le 06-07-2005 à 13:00:51    

En fait je ne pense pas qu'il supprime des éléments mais si une ligne vierge est présente dans le fichier source celà va afficher 4 lignes vides (comme s'il manquait un élément). Tu peux ajouter un test au début pour éviter ça:
 
awk 'length($0) == 0 { next } NF == 1 { print $0 ; next } { print "\t"$1"\n\t"$2" "$3" "$4" "$5"\n\t"$6"\n" }' input.txt


---------------
Institutions européennes: Ensemble d'outils dont le but est de transformer une grande quantité d'argent en merde. Cette merde est utilisée pour créer de nouveaux fonctionnaires. L'argent restant payant des externes pour faire leur travail.
Reply

Marsh Posté le 06-07-2005 à 13:00:52    

comme je te le disais, y'a un gros problème de mise en forme dans le document :  
 


Administrateurs de biens - syndics de copropriétés      
 SYNDICAT DES COPROPRIETAIRES LA CHAUMIIERE 71  route  du Pavé Blanc 01 46 32 75 22
 LAFERRIERE ANJUERE (Administrareur de Biens) 3  Rue Louis Dupont 01.46.42.41.65
Agences de voyage      
 CLEF DES VOYAGES (agréé Club Med) 4  Villa Cour Creuse 01.46.45.24.24
 LE MAS DES COLOMBES 134  rue  d'Estienne d Orves 01.46.62.06.02
 THOMAS COOK VOYAGES 17 bis avenue Jean Jaurès 01.55.95.04.90
 SELECTOUR METAYER VOYAGES 200 bis avenue Jean Jaurès 01.46.45.00.00
 AMBIANCES VACANCES 4  place Maurice Gunsbourg 01.46.45.00.89


Message édité par Krapaud le 06-07-2005 à 13:01:28
Reply

Marsh Posté le 06-07-2005 à 13:02:26    

Deadlock a écrit :

En fait je ne pense pas qu'il supprime des éléments mais si une ligne vierge est présente dans le fichier source celà va afficher 4 lignes vides (comme s'il manquait un élément). Tu peux ajouter un test au début pour éviter ça:
 
awk 'length($0) == 0 { next } NF == 1 { print $0 ; next } { print "\t"$1"\n\t"$2" "$3" "$4" "$5"\n\t"$6"\n" }' input.txt


 
 
sisi, il supprime des éléments, par exemple, un truc qui commence par LA POSTE va se transformer en OSTE :??:
 

Reply

Marsh Posté le 06-07-2005 à 13:03:57    

désolé pour le spoiler mais j'ai pas le choix :D
 
sinon comme tu peux le constater :  
- les catégories peuvent contenir des espaces
- les numéros de téléphone sont soit séparés par des points, soit par des espaces
- les adresses peuvent contenir un "bis" "b" ou autre truc du genre :o

Reply

Marsh Posté le 06-07-2005 à 13:08:05    

Krapaud a écrit :

désolé pour le spoiler mais j'ai pas le choix :D
 
sinon comme tu peux le constater :  
- les catégories peuvent contenir des espaces
- les numéros de téléphone sont soit séparés par des points, soit par des espaces
- les adresses peuvent contenir un "bis" "b" ou autre truc du genre :o

Ah ben ouais on est loin de l'exemple dans ce cas ... tu as des champs de taille variable et surtout avec un nombre de mots non-statique :/
Tu sais pas le générer depuis Excel avec des séparateurs fixes (la virgule ou le point virgule) ?


---------------
Institutions européennes: Ensemble d'outils dont le but est de transformer une grande quantité d'argent en merde. Cette merde est utilisée pour créer de nouveaux fonctionnaires. L'argent restant payant des externes pour faire leur travail.
Reply

Marsh Posté le 06-07-2005 à 13:10:03    

Tu veux mon mail (MP) pour m'envoyer un morceau de fichier valide ? Parce qu'à faire du copy/paste ça bouffe les TAB et les transforme en SPC souvent ...
Je te fais ça dans l'après-midi j'ai un peu de temps aujourd'hui ;)


---------------
Institutions européennes: Ensemble d'outils dont le but est de transformer une grande quantité d'argent en merde. Cette merde est utilisée pour créer de nouveaux fonctionnaires. L'argent restant payant des externes pour faire leur travail.
Reply

Marsh Posté le 06-07-2005 à 14:49:16    

Deadlock a écrit :

Ah ben ouais on est loin de l'exemple dans ce cas ... tu as des champs de taille variable et surtout avec un nombre de mots non-statique :/
Tu sais pas le générer depuis Excel avec des séparateurs fixes (la virgule ou le point virgule) ?


si, aucun problème pour ça :)

Reply

Marsh Posté le 06-07-2005 à 14:49:38    

Deadlock a écrit :

Tu veux mon mail (MP) pour m'envoyer un morceau de fichier valide ? Parce qu'à faire du copy/paste ça bouffe les TAB et les transforme en SPC souvent ...
Je te fais ça dans l'après-midi j'ai un peu de temps aujourd'hui ;)


ah je veux bien si ça ne te dérange pas :jap:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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