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

  FORUM HardWare.fr
  Programmation
  Divers

  Déplacement de chaines caractères

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Déplacement de chaines caractères

n°1806304
juanita88
Posté le 30-10-2008 à 12:30:48  profilanswer
 

Bonjour à tous et à toutes,
 
Je souhaiterais pouvoir déplacer un segment de phrase automatiquement (car j'ai plusieurs milliers de lignes et je ne me vois pas faire tout ça à la main !!)
 
Voici un exemple, j'ai ce schéma :
<record><rank><country><cont><pop (ou autres données)><year>  .. je voudrais arriver à :
<record><rank><country><pop (ou autres données)><cont><year>
 

Citation :

<record><rank>1</rank><country code="cn">Chine</country><cont>Asie</cont><pop>1330044605</pop><year>2008</year></record>
<record><rank>2</rank><country code="in">Inde</country><cont>Asie</cont><pop>1147995898</pop><year>2008</year></record>
<record><rank>3</rank><country code="us">Etats-Unis</country><cont>Am&#233;riques</cont><pop>303824646</pop><year>2008</year></record>
<record><rank>4</rank><country code="id">Indon&#233;sie</country><cont>Asie</cont><pop>237512355</pop><year>2008</year></record>
<record><rank>5</rank><country code="br">Br&#233;sil</country><cont>Am&#233;riques</cont><pop>191908598</pop><year>2008</year></record>
 
... les fichiers ne contiennent pas que des "<pop>"
 
<record><rank>1</rank><country code="">Inde</country><cont>Asie</cont><ssalim>204,4</ssalim><year>2005</year></record>
<record><rank>2</rank><country code="">Chine</country><cont>Asie</cont><ssalim>164,4</ssalim><year>2005</year></record>
<record><rank>3</rank><country code="">Bangladesh</country><cont>Asie</cont><ssalim>44,0</ssalim><year>2005</year></record>
<record><rank>4</rank><country code="">Ethiopie</country><cont>Afrique</cont><ssalim>28,7</ssalim><year>2005</year></record>
<record><rank>5</rank><country code="">Pakistan</country><cont>Asie</cont><ssalim>26,3</ssalim><year>2005</year></record>


 
-> Il faudrait que je puisse glisser les lignes "<cont>" avant les lignes "<year".
 
Merci d'avance

mood
Publicité
Posté le 30-10-2008 à 12:30:48  profilanswer
 

n°1806431
juanita88
Posté le 30-10-2008 à 16:08:32  profilanswer
 

Personne ne connait une astuce ?
 
J'aurai voulu commencer ce travail bientôt

n°1806465
gilou
Modérateur
Modzilla
Posté le 30-10-2008 à 16:42:05  profilanswer
 

Tu fais ça par exemple en perl:

Code :
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. use Tie::File;
  5.  
  6. my $filename = "juanita88.txt";
  7. tie my @data, 'Tie::File', $filename or die "Can't tie file $filename";
  8. foreach (@data) {
  9.    s/^(.*)(\<cont\>[^<]*\<\/cont\> )(.*)(\<year\>[^<]*\<\/year\> )(.*)$/$1$3$2$4$5/o if (/\<cont\>/o);
  10. }
  11. untie @data;

Attention, le forum rajoute un blanc après [^<]*\<\/cont\> et [^<]*\<\/year\> avant la parenthèse fermante, alors qu'il ne doit pas y en avoir.
 
fichier juanita88.txt avant:

Citation :

<record><rank>1</rank><country code="cn">Chine</country><cont>Asie</cont><pop>1330044605</pop><year>2008</year></record>
<record><rank>2</rank><country code="in">Inde</country><cont>Asie</cont><pop>1147995898</pop><year>2008</year></record>
<record><rank>3</rank><country code="us">Etats-Unis</country><cont>Am&#233;riques</cont><pop>303824646</pop><year>2008</year></record>
<record><rank>4</rank><country code="id">Indon&#233;sie</country><cont>Asie</cont><pop>237512355</pop><year>2008</year></record>
<record><rank>5</rank><country code="br">Br&#233;sil</country><cont>Am&#233;riques</cont><pop>191908598</pop><year>2008</year></record>


et après:

Citation :

<record><rank>1</rank><country code="cn">Chine</country><pop>1330044605</pop><cont>Asie</cont><year>2008</year></record>
<record><rank>2</rank><country code="in">Inde</country><pop>1147995898</pop><cont>Asie</cont><year>2008</year></record>
<record><rank>3</rank><country code="us">Etats-Unis</country><pop>303824646</pop><cont>Am&#233;riques</cont><year>2008</year></record>
<record><rank>4</rank><country code="id">Indon&#233;sie</country><pop>237512355</pop><cont>Asie</cont><year>2008</year></record>
<record><rank>5</rank><country code="br">Br&#233;sil</country><pop>191908598</pop><cont>Am&#233;riques</cont><year>2008</year></record>


Noter que ce script modifie le fichier de départ, donc le sauvegarder au cas ou, avant application du script ou adapter le script.
Il aura pour effet de déplacer ce qui est entre la balise cont juste avant la balise year.
A+,


Message édité par gilou le 30-10-2008 à 17:14:36

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1806470
masklinn
í dag viðrar vel til loftárása
Posté le 30-10-2008 à 16:51:16  profilanswer
 

C'est quoi l'intérêt [:petrus dei]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1806481
gilou
Modérateur
Modzilla
Posté le 30-10-2008 à 17:07:08  profilanswer
 

Je me le suis aussi demandé, vu que dans ce fichier xml, les balises en question etant de même rang, leur ordre ne devrait pas avoir d'importance, sauf s'il y a un schema associé utilisé pour faire une validation.
A+,

Message cité 1 fois
Message édité par gilou le 30-10-2008 à 17:11:35

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1806486
masklinn
í dag viðrar vel til loftárása
Posté le 30-10-2008 à 17:15:09  profilanswer
 

gilou a écrit :

sauf s'il y a un scheme associé utilisé pour faire une validation.
A+,


Et encore, même en XSD il est possible de créer des groupes sans ordre [:pingouino] (c'est plus facile en RNG par contre)

 

edit: et accessoirement, je ferais ce genre de manips avec une lib XML dans [langage de prog préféré], genre ElementTree en Python, perso.

Message cité 1 fois
Message édité par masklinn le 30-10-2008 à 17:15:49

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1806521
gilou
Modérateur
Modzilla
Posté le 30-10-2008 à 17:34:09  profilanswer
 

masklinn a écrit :

edit: et accessoirement, je ferais ce genre de manips avec une lib XML dans [langage de prog préféré], genre ElementTree en Python, perso.

Pour du XML de profondeur 1, avec une ligne = un record, c'est souvent plus couteux en perfs.
Par contre, des qu'on a besoin d'un peu de contexte, ou bien quand on a des records multi lignes, c'est plus efficace et sur, de parser en un arbre.
Je pourrais employer XML::Simple::Tree en perl par exemple.
 
En SGML, les groupes sans ordres étaient une des constructions de base, au même titre que les groupes ordonnés, les repetitions et les choix. Ca a sauté en XML pour une raison simple: écrire un parser qui détecte les ambiguités dans un schéma devenait beaucoup plus compliqué. Mais Relax etant inventé par J Clark, qui a écrit aussi un des meilleurs parsers SGML, il a conservé avec raison cette possibilité dans le langage.
A+,

Message cité 1 fois
Message édité par gilou le 30-10-2008 à 17:40:12

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1806543
masklinn
í dag viðrar vel til loftárása
Posté le 30-10-2008 à 17:56:59  profilanswer
 

gilou a écrit :

Pour du XML de profondeur 1, avec une ligne = un record, c'est souvent plus couteux en perfs.


Ouais enfin là ça m'a l'air d'être un one-shot, puisqu'il parle de le faire à la main, et sur quelques milliers de lignes je doute que le coût soit bien terrifiant (j'ai joué à parser, filtrer et réordonner des dump XML de log SVN, 38Mo de XML ça coûte mais 1 ou 2Mo pas vraiment, et je fais mes manips avec cElementTree)

gilou a écrit :

Je pourrais employer XML::Simple::Tree en perl par exemple.


Ou lxml, il y a des bindings de partout (y compris Python) et ça marche pas mal d'habitudes.

gilou a écrit :

En SGML, les groupes sans ordres étaient une des constructions de base, au même titre que les groupes ordonnés, les repetitions et les choix.


:jap: (les répétitions et les choix sont des constructions de base en XSD, mais j'ai vérifié et en fait les groupes non ordonnés sont quasi impossibles à exprimer, je me souvenais plus de ça [:pingouino])


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1806564
juanita88
Posté le 30-10-2008 à 18:28:57  profilanswer
 

Ok mais excusez moi, je suis une grande débutante en programmation (d'ou le xml), c'est quoi PERL ?
 
Pour répondre à vos questions, mes fichiers xml sont destinés à activewidgets (http://www.activewidgets.com/general.demos/), donc je pense que l'ordre des colonnes est prise en compte

n°1806565
gilou
Modérateur
Modzilla
Posté le 30-10-2008 à 18:31:01  profilanswer
 

Citation :

c'est quoi PERL ?

C'est quoi google?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le 30-10-2008 à 18:31:01  profilanswer
 

n°1806679
juanita88
Posté le 30-10-2008 à 22:53:51  profilanswer
 

Voilà je me suis renseigné sur PERL, un peu compliqué tout ça.. je n'ai ni en ligne, ni en local reussie à faire fonctionner ce script...
 
N'existe-il pas un petit logiciel qui me permetterait de le faire ?

n°1806682
masklinn
í dag viðrar vel til loftárása
Posté le 30-10-2008 à 23:03:53  profilanswer
 

ben oui, perl


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1806945
juanita88
Posté le 31-10-2008 à 14:11:06  profilanswer
 

C'est y est !! C'est rigolo mais pourquoi s'embêter avec PERl alors qu'il suffit d'ouvrir mon xml sous excel et hop, un petit glisser de mes colonnes !!!
Merci !

n°1806953
Taz
bisounours-codeur
Posté le 31-10-2008 à 14:23:55  profilanswer
 

amis programmateurs bonjour.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  Déplacement de chaines caractères

 

Sujets relatifs
caracteres incompréhensiblesRechercher la suite d'un début de chaine de caractères
Déplacement d'objets en ajax[C++][Vector & String][Memoire] Excep sur ~ d'un vecteur de string> 15
[o'caml] fonctions de formatage de chaines[FORTRAN] Concaténation de chaines... :(
Pourquoi quand je génère mon fichier xml j'ai ces caractères � ?flash: synchroniser drag d'un objet et défilement du scénario
[Résolu]Petite question trés simple pour comparaison entre deux chaineregex validant chaine de caractères pouvant être nulle
Plus de sujets relatifs à : Déplacement de chaines caractères


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