une petite aide serait la bienvenue en VBA

Image Ici, on parle de tout et de rien
Pas de dépannage dans cette section
Avatar du membre
maxou45
Admininistrateur
Admininistrateur
Messages : 25815
Enregistré le : 11 nov. 2011 19:42
Localisation : France - Loiret
    Windows 10 Firefox

une petite aide serait la bienvenue en VBA

Message par maxou45 » 28 nov. 2019 19:13

Bonsoir
Qui pourrait m'aider a resoudre un probleme devant lequel je bloque ?

je voudrais pouvoir modifier un fichier texte en vba ou en batch
il s'agit de remplacer dans un lot de fichier .txt tous les occurences contenus entre 2 chaines


par exemple mon fichier texte se presente comme ceci

<Placemark><name>Jeane</name><description>Terrain, dans les bois </description><Point><coordinates>6.700555,48.338611</coordinates></Point></Placemark>
<Placemark><name>Jeffreys</name><description>Cour privée avec des bancs</description><Point><coordinates>24.915364,-34.045949</coordinates></Point></Placemark>


et je voudrais obtenir ceci

Jeane,6.700555,48.338611
Jeffreys,24.915364,-34.045949

et ceci dans tous les fichiers contenus dans un repertoire et ses sous repertoires

le difficulté vient de ce que le texte compris entre <description> et </description> varie, ausi bien en longueur et comprte des ponctuations

,
Helper-diplômé de Image

Aujourd'hui, je ne fais rien et si ce soir je n'ai pas fini...Je continuerai demain !

Avatar du membre
little boy62
Modérateur
Modérateur
Messages : 1260
Enregistré le : 17 nov. 2011 11:12
    Windows 10 Firefox

Re: une petite aide serait la bienvenue en VBA

Message par little boy62 » 28 nov. 2019 21:41

Salut.

En gros:
- tu dois récupérer ce que tu as entre <name> et </name> pour le nom.
- tu dois récupérer ce que tu as entre <coordinates> et </coordinates> pour les coordonnées.
- tu auras donc les éléments requis pour réécrire le fichier texte.

Il doit surement exister une commande qui permet de récupérer une chaine de caractères entre deux termes.


Je saurais le faire en AutoIt, si jamais.




++
« Quelqu'un a dit qu'il n'y a que les imbéciles qui ne changent pas d'avis.. C'est bien mon avis, et je ne suis pas près d'en changer ! (Geluck, le Chat) »

Avatar du membre
maxou45
Admininistrateur
Admininistrateur
Messages : 25815
Enregistré le : 11 nov. 2011 19:42
Localisation : France - Loiret
    Windows 10 Firefox

Re: une petite aide serait la bienvenue en VBA

Message par maxou45 » 28 nov. 2019 22:30

Salut

je n'avais pas vu ca de cette facon

je sais supprimer une chaine caractere, alors, je supprimais les termes constants, tels que <Placemark><name>, </name> ...etc
mais j'etais bien incapable de supprimer la partie variable contenue entre <description> et </description>

je vais reessayer de prelever le contenu entre les balises ... les inscrire dans un autre fichiers ...
Helper-diplômé de Image

Aujourd'hui, je ne fais rien et si ce soir je n'ai pas fini...Je continuerai demain !

Avatar du membre
little boy62
Modérateur
Modérateur
Messages : 1260
Enregistré le : 17 nov. 2011 11:12
    Windows 10 Firefox

Re: une petite aide serait la bienvenue en VBA

Message par little boy62 » 28 nov. 2019 22:38

Salut.


Ce que j'ai fait en AutoIt :
- Pour chaque fichier, je lis ligne par ligne. Je récupère le NOM et les COORDONNEES
- Je remplace la ligne par ce que j'ai trouvé (exemple : nom,coordonnées).
Pas besoin donc de réécrire de nouveaux fichiers, j'utilise les fichiers existants.


Je viens de finir. J'ai commenté les lignes de codes.


Si tu veux voir le code, pas de souci.
Ca pourra t'aider à voir la méthode utilisée.


Tu as dis :
je supprimais les termes constants, tels que <Placemark><name>, </name> ...etc
J'y ai pensé aussi.


et vu que tu dois mettre une virgule, peut-être remplacer </name> par une virgule, au lieu de le supprimer.

EDIT : le script que j'ai fait, doit etre dans le dossier racine...

le code :




++
« Quelqu'un a dit qu'il n'y a que les imbéciles qui ne changent pas d'avis.. C'est bien mon avis, et je ne suis pas près d'en changer ! (Geluck, le Chat) »

Avatar du membre
maxou45
Admininistrateur
Admininistrateur
Messages : 25815
Enregistré le : 11 nov. 2011 19:42
Localisation : France - Loiret
    Windows 10 Firefox

Re: une petite aide serait la bienvenue en VBA

Message par maxou45 » 28 nov. 2019 23:37

:cheers:

ca me semble super, mais je ne connais pas du tout l'autoit

as tu le fichier ?

EDIT:
je telecharge autoit, et je me documente
Helper-diplômé de Image

Aujourd'hui, je ne fais rien et si ce soir je n'ai pas fini...Je continuerai demain !

Avatar du membre
maxou45
Admininistrateur
Admininistrateur
Messages : 25815
Enregistré le : 11 nov. 2011 19:42
Localisation : France - Loiret
    Windows 10 Firefox

Re: une petite aide serait la bienvenue en VBA

Message par maxou45 » 29 nov. 2019 00:23

Re

Ca marche pas mal, juste quelques lignes dans mes fichiers qui sont mal traitées car il y a des lignes incompletes

exemple celle ci

<Placemark><name>EP Marclopt (42210) Grange Neuve</name><description>Curistes , nous vous accueillons dans notre grand jardin calme, plat, arboré et clos à 2km de Montrond-Les-Bains.
Commerces à proximité à pied (leader price à 800m, boulangerie pâtisserie à 1,2km). C Services [Vidange eaux noires] [Vidange eaux grises] [Point d'eau] [Electricité] [Douche] [WC publique] [Poubelle] Note: 5/5 (sur 1 évaluation) [+33629375763] [ID park4night : 85024]</description><Point><coordinates>4.224545,45.661017</coordinates></Point></Placemark>


car elle ne tient pas sur une ligne

je voudrais obtenir ceci

EP Marclopt (42210) Grange Neuve,4.224545,45.661017
Helper-diplômé de Image

Aujourd'hui, je ne fais rien et si ce soir je n'ai pas fini...Je continuerai demain !

Avatar du membre
Mick24
Modérateur
Modérateur
Messages : 3450
Enregistré le : 17 janv. 2012 20:25
Localisation : yvelines
    Windows 10 Chrome

Re: une petite aide serait la bienvenue en VBA

Message par Mick24 » 29 nov. 2019 21:07

:cool3:
Bonjour Maxou,
Deux soucis:
1-ton fichier présente la structure xml mais est au format texte Balise <></>
2-La balise< Placemark></Placemark> se répète

Réglons cela en moins de manip possible
Ne garde que la première et dernière balise < Placemark></Placemark> pour tes 3 lignes d'exemples

<Placemark><name>Jeane</name><description>Terrain, dans les bois </description><Point><coordinates>6.700555,48.338611</coordinates></Point></Placemark>
<Placemark><name>Jeffreys</name><description>Cour privée avec des bancs</description><Point><coordinates>24.915364,-34.045949</coordinates></Point></Placemark>
<Placemark><name>EP Marclopt (42210) Grange Neuve</name><description>Curistes , nous vous accueillons dans notre grand jardin calme, plat, arboré et clos à 2km de Montrond-Les-Bains.
Commerces à proximité à pied (leader price à 800m, boulangerie pâtisserie à 1,2km). C Services [Vidange eaux noires] [Vidange eaux grises] [Point d'eau] [Electricité] [Douche] [WC publique] [Poubelle] Note: 5/5 (sur 1 évaluation) [+33629375763] [ID park4night : 85024]</description><Point><coordinates>4.224545,45.661017</coordinates></Point></Placemark>

cela donne :
<Placemark><name>Jeane</name><description>Terrain, dans les bois </description><Point><coordinates>6.700555,48.338611</coordinates></Point>
<name>Jeffreys</name><description>Cour privée avec des bancs</description><Point><coordinates>24.915364,-34.045949</coordinates></Point>
<name>EP Marclopt (42210) Grange Neuve</name><description>Curistes , nous vous accueillons dans notre grand jardin calme, plat, arboré et clos à 2km de Montrond-Les-Bains.
Commerces à proximité à pied (leader price à 800m, boulangerie pâtisserie à 1,2km). C Services [Vidange eaux noires] [Vidange eaux grises] [Point d'eau] [Electricité] [Douche] [WC publique] [Poubelle] Note: 5/5 (sur 1 évaluation) [+33629375763] [ID park4night : 85024]</description><Point><coordinates>4.224545,45.661017</coordinates></Point></Placemark>

Maintenant colle en entête de ton document :
<?xml version="1.0"?>
<?xml-stylesheet type='text/xsl' href='style.xsl'?>

et enregistre le en test.xml

le tour est joué le document étant sur ton bureau , dans Powershell exécute ceci:

Code : Tout sélectionner

[xml]$test = Get-Content "$home/desktop\test.xml"
For ($i=0; $i -le 3; $i++) {
$test.Placemark.name[$i]+"  "+$test.Placemark.Point.coordinates[$i]  >> "C:\Users\utilisateur\Desktop\test.txt"
    }
Je sortais tranquillement du Bistro quand un imbécile m'a marché sur la main!

Avatar du membre
maxou45
Admininistrateur
Admininistrateur
Messages : 25815
Enregistré le : 11 nov. 2011 19:42
Localisation : France - Loiret
    Windows 10 Firefox

Re: une petite aide serait la bienvenue en VBA

Message par maxou45 » 29 nov. 2019 22:40

Salut

en fait ce sont des fichiers kml ... et j'en ai des centaines, leur entete est actuellement:

Code : Tout sélectionner

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<kml xmlns="http://earth.google.com/kml/2.2">
<Document><name>...Park4night</name><metadata><igoicon><filename>p4n_logo.bmp</filename></igoicon></metadata> 
<Folder><name>accueil entre particuliers</name>

je te mets 1 des fichiers (le plus petit) en PJ
Fichiers joints
p4n_camping.txt
(26.69 Kio) Téléchargé 9 fois
Helper-diplômé de Image

Aujourd'hui, je ne fais rien et si ce soir je n'ai pas fini...Je continuerai demain !

Avatar du membre
Mick24
Modérateur
Modérateur
Messages : 3450
Enregistré le : 17 janv. 2012 20:25
Localisation : yvelines
    Windows 10 Chrome

Re: une petite aide serait la bienvenue en VBA

Message par Mick24 » 30 nov. 2019 19:17

:cool3:
Salut Maxou ,il faut légèrement modifier ton fichier
la manip est très simple ( 10 seconde max ^^) mais l'explication par écrit est plus compliquée , je joins donc une vidéo explicative.
La vidéo dure plusieurs minutes car elle te permettra d'adapter suivant tes fichiers , bon visionnage:
https://www.dropbox.com/s/en1awo79gwv6a ... t.mp4?dl=0

2 Lignes de code après modif du fichier:

Code : Tout sélectionner

[xml]$test =  Get-Content "$home\Desktop\p4n_camping.xml"
$max = $test.kml.Placemark.name.Count
For ($i=0; $i -le $($max -1); $i++) {
$test.kml.Placemark.name[$i]+"   "+$test.kml.Placemark.Point.coordinates[$i]  >> "$home\Desktop\test.txt" } 

Code : Tout sélectionner

$test1 = Get-Content "C:\Users\utilisateur\Desktop\test.txt"
$test1.replace("C ","")>"C:\Users\utilisateur\Desktop\test.txt"
Je sortais tranquillement du Bistro quand un imbécile m'a marché sur la main!

Avatar du membre
maxou45
Admininistrateur
Admininistrateur
Messages : 25815
Enregistré le : 11 nov. 2011 19:42
Localisation : France - Loiret
    Windows 10 Firefox

Re: une petite aide serait la bienvenue en VBA

Message par maxou45 » 30 nov. 2019 19:32

Salut

Non, je ne veux pas le modifier .... j'en ai des centaines a traiter, donc des centaines a modifier
Helper-diplômé de Image

Aujourd'hui, je ne fais rien et si ce soir je n'ai pas fini...Je continuerai demain !

Avatar du membre
Mick24
Modérateur
Modérateur
Messages : 3450
Enregistré le : 17 janv. 2012 20:25
Localisation : yvelines
    Windows 10 Chrome

Re: une petite aide serait la bienvenue en VBA

Message par Mick24 » 30 nov. 2019 19:44

:cool3:
Le problème c'est: sont-ils tous identique dans la structure ? par exemple les mêmes balises ? , le C avec un espace dans <name>? se conserve t-il? est-il présent dans tout les fichiers?
si ils sont tous exactement identique ( dans la structure ) alors on peut effectivement coder quelque chose !
Je sortais tranquillement du Bistro quand un imbécile m'a marché sur la main!

Avatar du membre
maxou45
Admininistrateur
Admininistrateur
Messages : 25815
Enregistré le : 11 nov. 2011 19:42
Localisation : France - Loiret
    Windows 10 Firefox

Re: une petite aide serait la bienvenue en VBA

Message par maxou45 » 30 nov. 2019 19:58

o/ui, la structure est toujours la meme, et ils comportent environ 10 000 lignes chacun

les 4 lignes de debut

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<kml xmlns="http://earth.google.com/kml/2.2">
<Document><name>...Park4night</name><metadata><igoicon><filename>p4n_logo.bmp</filename></igoicon></metadata> <Folder><name>accueil entre particuliers</name>
<metadata><igoicon><filename>p4n_ep.bmp</filename></igoicon></metadata>

hormis les titres (en jaune) les balises sont toujours les memes



et la ligne de fin

</Folder></Document></kml>


je t'en remets un autre
Fichiers joints
p4n_accueil_entre_particuliers.txt
(63.64 Kio) Téléchargé 7 fois
Helper-diplômé de Image

Aujourd'hui, je ne fais rien et si ce soir je n'ai pas fini...Je continuerai demain !

Avatar du membre
Mick24
Modérateur
Modérateur
Messages : 3450
Enregistré le : 17 janv. 2012 20:25
Localisation : yvelines
    Windows 10 Chrome

Re: une petite aide serait la bienvenue en VBA

Message par Mick24 » 30 nov. 2019 20:05

:cool1:
Je me penche dessus demain APM a +
Je sortais tranquillement du Bistro quand un imbécile m'a marché sur la main!

Répondre