none
Cherche un nom de rue dans les fichier xml RRS feed

  • Question

  • Bonjour Monsieur

    Svp.

    A trouver:
    Cherche la rue: "Kapuzinergasse"

    dans les fichier xml qui sont organise en ordre alphabétique
    [buchstabe-a.xml..buchstabe-w.xml, buchstabe-z.xml]

    et d'inscrire toute les information dans un
    nouvelle fichier "Kapuzinergasse" xml.

    La structure des fichier:

    <adresse>
    	<suche buchstabe="A">
    		<root a_Lname1938="Abdank" a_Fname1938="Julius" a_job1938="Zählerhilfsmonteur des EWI" a_city_name1938="" a_street_name1938="Kapuzinergasse" a_hnr1938="34" a_lnr="1"/>
    	</suche>
    </adresse>

    Merci pour votre aide

    Arnold

    samedi 27 juin 2020 08:30

Réponses

  • Bonsoir,

    en fait, j'ai montré 2 bouts de scripts, au départ, en séparant les problèmes.

    La 2ème partie du script devrait être inclue dans la 1ère boucle...

    cls
    
    $x=get-childitem "C:\Users\admin\OneDrive\Marion\xml-1938\index-rue-xml\*.xml"
    foreach ($i in $x) {
      $id=$i
    
    
    [xml]$fic=get-content $id
    
    # caption letter
    $LettreUpper=$fic.adresse.suche.buchstabe
    
    # letter transform to lower A-Z to a-z
    $LettreLower = $LettreUpper.ToLower()
    $new_letter = $LettreLower+"_street_name1938"
    $strasse=$fic.adresse.suche.root.$new_letter
    
    # maintenant, on peut vérifier si l'adresse contient le mot recherché...
    
    if ( $fic.adresse.suche.root.$new_letter -like "*Kapuziner*" ) {echo "Vrai"}
    
    }

    Le script d'avant ne traitait que le dernier fichier contenant z.

    Maintenant, tous les fichiers seront passés en revue. Il suffisait de décaler la fin de boucle } en fin de programme.

    A bientôt,


    Thierry DEMAN-BARCELO. Office Apps&Services MVP. MCSE:Enterprise admin, Messaging, Server Infrastructure 2016(89 MCPs). MCSA Office 365,Microsoft 365 Certified: Messaging Administrator Associate,Modern Desktop Administrator Associate, Security Admin https://base.faqexchange.info

    • Marqué comme réponse arnold_ mardi 30 juin 2020 19:18
    mardi 30 juin 2020 16:21

Toutes les réponses

  • Bonsoir,

    voici une méthode pour traiter au mieux les fichiers XML.

    L'aspect boucle sur les fichiers n'est, a priori, pas un problème.

    $x=get-childitem ".\*.xml"
    foreach ($i in $x) {
      $id=$i
    }

    L'astuce, c'est pour définir l'usage d'un fichier xml, et utiliser sa hiérarchie => Voici ce qui peut être mis dans la boucle indiquée plus haut!

    [xml]$fic=get-content $id # pour atteindre un élément de premier niveau echo $fic.adresse # Contenu du 2ème niveau : echo $fic.adresse.suche # variable du 2ème niveau echo $fic.adresse.suche.buchstabe # Contenu du 3ème niveau echo $fic.adresse.suche.root # Variable du 3ème niveau echo $fic.adresse.suche.root.a_street_name1938 $strasse=$fic.adresse.suche.root.a_street_name1938 # maintenant, on peut vérifier si l'adresse contient le mot recherché...

    if ( $fic.adresse.suche.root.a_street_name1938 -like "*Kapuziner*" ) {echo "Vrai"}

    A bientôt,



    Thierry DEMAN-BARCELO. Office Apps&Services MVP. MCSE:Enterprise admin, Messaging, Server Infrastructure 2016(89 MCPs). MCSA Office 365,Microsoft 365 Certified: Messaging Administrator Associate,Modern Desktop Administrator Associate, Security Admin https://base.faqexchange.info

    dimanche 28 juin 2020 22:27
  • Bonsoir Monsieur

    Merci pour la réponse.

    Le jour passe, j'ai mis au point un petit stuff pour le fichier en format de text.

    Pour l'instant les nom des rue ne pas important:

    Mais, je n'arrive pas ressortier les numéros de rue en séquentielle/index primaire:

    cls
    $FileList = Get-ChildItem -Path "C:\Users\admin\temp\Riesengasse-1939-index-nom\"
    $Riesengasse = $FileList | Select-String -Pattern '<td>Riesengasse</td>'
    $Riesengasse | Out-File "C:\Users\admin\temp\Riesengasse-1939-index-nom\Riesengasse-1939-index-nom.txt"
    
    II "C:\Users\admin\temp\Riesengasse-1939-index-nom\Riesengasse-1939-index-nom.txt" # 104 ko

    Voici le résultat en sur une page web:

    année 1937 et 1939

    Merci

    Arnold

    Nota bene:

    La méthode a étais: lire touts le fichier txt dans le même dossier

    lundi 29 juin 2020 21:50
  • Bonjour Monsieur

    Votre proposition est parfait!

    Le scripte fonction bien sur un seul ficher:

    Cause: le lettre [a] pose problème. Chaque fichier utilise un autre lettre de l'alphab.

    ex:

    a_street_name1938, b_street_name ….

    cls
    
    $x=get-childitem ".\buchstabe-a.xml"
    foreach ($i in $x) {
      $id=$i
    }
    
    [xml]$fic=get-content $id
    $strasse=$fic.adresse.suche.root.a_street_name1938
    # maintenant, on peut vérifier si l'adresse contient le mot recherché...
    
    if ( $fic.adresse.suche.root.a_street_name1938 -like "*Kapuziner*" ) {echo "Vrai"}

    La réponse a étais avec 2 vrai! pour le seul fichier utiliser.

    est il possible utiliser le regex pour contournée cette problème? 

    Merci

    Arnold

    mardi 30 juin 2020 08:17
  • Bonjour,

    si la lettre A, B, ... correspond à la lettre indiquée dans Buchstabe, on peut récupérer le contenu de cette variable :

    $Lettre=$fic.adresse.suche.buchstabe

    Puis réintégrer cette variable dans les champs utilisés ensuite.

    $strasse=$fic.adresse.suche.root.$lettre_street_name1938
    #

    On peut probablement récupérer l'année de la même manière.

    A bientôt,


    Thierry DEMAN-BARCELO. Office Apps&Services MVP. MCSE:Enterprise admin, Messaging, Server Infrastructure 2016(89 MCPs). MCSA Office 365,Microsoft 365 Certified: Messaging Administrator Associate,Modern Desktop Administrator Associate, Security Admin https://base.faqexchange.info

    mardi 30 juin 2020 10:39
  • Bonjour Monsieur

    Merci pour votre réponse.

    Mr. on est pas loin d'obtenir un résultat

    J'ai modifier l'égerment votre script. Mes excuse.

    cls
    
    $x=get-childitem "C:\Users\admin\OneDrive\Marion\xml-1938\index-rue-xml\*.xml"
    foreach ($i in $x) {
      $id=$i
    }
    
    [xml]$fic=get-content $id
    
    # caption letter
    $LettreUpper=$fic.adresse.suche.buchstabe
    
    # letter transform to lower A-Z to a-z
    $LettreLower = $LettreUpper.ToLower()
    $new_letter = $LettreLower+"_street_name1938"
    $strasse=$fic.adresse.suche.root.$new_letter
    
    # maintenant, on peut vérifier si l'adresse contient le mot recherché...
    
    if ( $fic.adresse.suche.root.$new_letter -like "*Kapuziner*" ) {echo "Vrai"}

    Il me semble, il me manque un 2eme boucle.

    Tell, j'ai obtenue 1 "vrai", du dernière fichier avec la lettre "z"

    Merci

    Arnold

    Nota bene

    Pour le test: J'avais choisie cette rue étant elle a une longueur de 2 kms, malgré une urbanisation peut développer e cette époque.

    mardi 30 juin 2020 13:02
  • Bonsoir,

    en fait, j'ai montré 2 bouts de scripts, au départ, en séparant les problèmes.

    La 2ème partie du script devrait être inclue dans la 1ère boucle...

    cls
    
    $x=get-childitem "C:\Users\admin\OneDrive\Marion\xml-1938\index-rue-xml\*.xml"
    foreach ($i in $x) {
      $id=$i
    
    
    [xml]$fic=get-content $id
    
    # caption letter
    $LettreUpper=$fic.adresse.suche.buchstabe
    
    # letter transform to lower A-Z to a-z
    $LettreLower = $LettreUpper.ToLower()
    $new_letter = $LettreLower+"_street_name1938"
    $strasse=$fic.adresse.suche.root.$new_letter
    
    # maintenant, on peut vérifier si l'adresse contient le mot recherché...
    
    if ( $fic.adresse.suche.root.$new_letter -like "*Kapuziner*" ) {echo "Vrai"}
    
    }

    Le script d'avant ne traitait que le dernier fichier contenant z.

    Maintenant, tous les fichiers seront passés en revue. Il suffisait de décaler la fin de boucle } en fin de programme.

    A bientôt,


    Thierry DEMAN-BARCELO. Office Apps&Services MVP. MCSE:Enterprise admin, Messaging, Server Infrastructure 2016(89 MCPs). MCSA Office 365,Microsoft 365 Certified: Messaging Administrator Associate,Modern Desktop Administrator Associate, Security Admin https://base.faqexchange.info

    • Marqué comme réponse arnold_ mardi 30 juin 2020 19:18
    mardi 30 juin 2020 16:21