Résolu
Manipulation de fichiers et transcodage
- Dead
- Auteur du sujet
- Hors Ligne
- Membre senior
Réduire
Plus d'informations
- Messages : 70
- Remerciements reçus 2
il y a 1 an 1 semaine - il y a 1 an 1 semaine #33641
par Dead
Manipulation de fichiers et transcodage a été créé par Dead
Bonjour,
Je vous explique mon atelier.
Je dois créer trois scripts, mais pour l'instant j'en ai fait qu'un pour essayer de mettre les grandes lignes.
J'ai deux ERP différents. Je dois récupérer les infos qui sont dans un fichier xml sur un serveur, transcoder les infos, et transférer le résultat sur l'autre serveur, sur l'autre ERP.
J'ai commencé un semblant de script. Mais j'ignore si je vais dans la bonne direction.
Le besoin général:
Etape 2: pour transcoder le code du bien, le format de sortie est bien-code>01.XX.0003</bien-code> ou XX sera généralement 00 mais pas obligatoirement. Format attendu : bien-code>010003</bien-code>
Etape 3: les fichiers doivent être envoyés sur un serveur FTP.
Voici mon script:
Je n'ai pas encore eu l'occasion de le tester. Mais il me semble bancale. Comment feriez vous cela en trois scripts, un pour chaque étape?
Merci pour votre aide!
Je vous explique mon atelier.
Je dois créer trois scripts, mais pour l'instant j'en ai fait qu'un pour essayer de mettre les grandes lignes.
J'ai deux ERP différents. Je dois récupérer les infos qui sont dans un fichier xml sur un serveur, transcoder les infos, et transférer le résultat sur l'autre serveur, sur l'autre ERP.
J'ai commencé un semblant de script. Mais j'ignore si je vais dans la bonne direction.
Le besoin général:
- Transcoder le code du programme
- Transcoder le code du bien
- Envoyer le fichier en FTP
Etape 2: pour transcoder le code du bien, le format de sortie est bien-code>01.XX.0003</bien-code> ou XX sera généralement 00 mais pas obligatoirement. Format attendu : bien-code>010003</bien-code>
Etape 3: les fichiers doivent être envoyés sur un serveur FTP.
Voici mon script:
# Charger le contenu du fichier XML
[xml]$xmlContent = Get-Content -Path "C:\Chemin\vers\votre\fichier.xml"
# Extraire les valeurs nécessaires du fichier XML
$codeDpt = $xmlContent.SelectSingleNode("//bien-dpt").InnerText
$codeProgramme = $xmlContent.SelectSingleNode("//bien-programme").InnerText
$codeBien = $xmlContent.SelectSingleNode("//bien-code").InnerText
# Étape 1
$codeProgrammeTranscode = TranscoderCodeProgramme -codeDpt $codeDpt -codeProgramme $codeProgramme
# Étape 2
$codeBienTranscode = TranscoderCodeBien -codeBien $codeBien
# Étape 3
EnvoyerEnFTP -cheminLocal "C:\Chemin\vers\votre\fichier.xml" -hoteFTP "serveur.com" -loginFTP "login-$codeDpt-B09" -motDePasseFTP "VotreMotDePasse" -repertoireFTP "/"
#######################################################################################################################################################################################
# Étape 1 : Transcoder le code du programme
function TranscoderCodeProgramme {
param (
[string]$codeDpt,
[string]$codeProgramme
)
switch ($codeDpt) {
20 { return "12$codeProgramme" }
21 { return "19$codeProgramme" }
22 { return "13$codeProgramme" }
23 { return "15$codeProgramme" }
default { return $codeProgramme }
}
}
# Étape 2 : Transcoder le code du bien
function TranscoderCodeBien {
param (
[string]$codeBien
)
return $codeBien -replace '\.00\.', ''
}
# Étape 3 : Envoyer le fichier en FTP
function EnvoyerEnFTP {
param (
[string]$cheminLocal,
[string]$hoteFTP,
[string]$loginFTP,
[string]$motDePasseFTP,
[string]$repertoireFTP
)
$sessionFTP = New-Object WinSCP.Session
try {
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
Protocol = [WinSCP.Protocol]::Sftp
HostName = $hoteFTP
UserName = $loginFTP
Password = $motDePasseFTP
SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
}
$sessionFTP.Open($sessionOptions)
$transferOptions = New-Object WinSCP.TransferOptions
$transferOptions.TransferMode = [WinSCP.TransferMode]::Binary
$transferResult = $sessionFTP.PutFiles($cheminLocal, $repertoireFTP, $False, $transferOptions)
$transferResult.Check()
Write-Host "Fichier envoyé avec succès!"
}
finally {
$sessionFTP.Dispose()
}
}
Je n'ai pas encore eu l'occasion de le tester. Mais il me semble bancale. Comment feriez vous cela en trois scripts, un pour chaque étape?
Merci pour votre aide!
Dernière édition: il y a 1 an 1 semaine par Arnaud Petitjean. Raison: Remise en forme du code et du message
Connexion ou Créer un compte pour participer à la conversation.
- ericlm128
- Visiteur
il y a 1 an 1 semaine #33645
par ericlm128
Réponse de ericlm128 sur le sujet Manipulation de fichiers et transcodage
Bonjour,
As tu un XML d'entré et un exemple de fichier de sortie souhaitez a nous fournir ?
As tu un XML d'entré et un exemple de fichier de sortie souhaitez a nous fournir ?
Connexion ou Créer un compte pour participer à la conversation.
- Dead
- Auteur du sujet
- Hors Ligne
- Membre senior
Réduire
Plus d'informations
- Messages : 70
- Remerciements reçus 2
il y a 1 an 1 semaine #33647
par Dead
Réponse de Dead sur le sujet Manipulation de fichiers et transcodage
Bonjour ercilm128, merci pour ton retour.
Je n'ai juste, pour le moment, que le fichier d'entrée.
Vous trouverez une capture ci-jointe.
Merci et bonne journée!
Je n'ai juste, pour le moment, que le fichier d'entrée.
Vous trouverez une capture ci-jointe.
Merci et bonne journée!
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- ericlm128
- Visiteur
il y a 1 an 1 semaine #33650
par ericlm128
Réponse de ericlm128 sur le sujet Manipulation de fichiers et transcodage
Merci mais je ne pense pas avoir le courage de créer le xml pour test.
Peux tu poser un bout de ce fichier au format xml ?
Peux tu poser un bout de ce fichier au format xml ?
Connexion ou Créer un compte pour participer à la conversation.
- Dead
- Auteur du sujet
- Hors Ligne
- Membre senior
Réduire
Plus d'informations
- Messages : 70
- Remerciements reçus 2
il y a 1 an 1 semaine #33651
par Dead
Réponse de Dead sur le sujet Manipulation de fichiers et transcodage
Voici un bout de code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<biens>
<entete>
<date>02/11/2023</date>
<nom-service>10938</nom-service>
<nombre-biens>84</nombre-biens>
<type-traitement>P</type-traitement>
<adr-mail-log>mail</adr-mail-log>
</entete>
<bien>
<bien-identification>
<bien-dpt>22</bien-dpt>
<bien-organisme>B02</bien-organisme>
<bien-programme>0616</bien-programme>
<bien-code>01.00.0001</bien-code>
</bien-identification>
<bien-infos>
<bien-nature>LOG</bien-nature>
<bien-type-zone>AUT</bien-type-zone>
<bien-type>T5</bien-type>
<bien-etage>000</bien-etage>
<bien-surhab>100.70</bien-surhab>
<bien-indci>C</bien-indci>
<bien-ascenseur>0</bien-ascenseur>
<bien-handicape>0</bien-handicape>
<bien-neuf>0</bien-neuf>
<bien-adresse>
<adr-librue>address</adr-librue>
<adr-libcomp1></adr-libcomp1>
<adr-libcomp2></adr-libcomp2>
<adr-cp>2Code_Postal</adr-cp>
<adr-ville>VILLE</adr-ville>
<adr-code-insee>Code INSEE</adr-code-insee>
</bien-adresse>
<bien-qrt>X</bien-qrt>
<bien-finan-actuel>6</bien-finan-actuel>
<bien-eau-chaude-charge>1</bien-eau-chaude-charge>
<bien-eau-froide-charge>1</bien-eau-froide-charge>
<bien-ascenseur-charge>1</bien-ascenseur-charge>
<bien-chauffage-charge>1</bien-chauffage-charge>
<bien-chauffage-type>5</bien-chauffage-type>
<bien-date-premloc>01/06/2023</bien-date-premloc>
<bien-acquisition></bien-acquisition>
<bien-domaine>S</bien-domaine>
<bien-budget>
<bien-budget-code>10</bien-budget-code>
<bien-budget-montant>0.00</bien-budget-montant>
</bien-budget>
<bien-budget>
<bien-budget-code>20</bien-budget-code>
<bien-budget-montant>0.00</bien-budget-montant>
</bien-budget>
<bien-budget>
<bien-budget-code>30</bien-budget-code>
<bien-budget-montant>0.00</bien-budget-montant>
</bien-budget>
<bien-budget>
<bien-budget-code>90</bien-budget-code>
<bien-budget-montant>0.00</bien-budget-montant>
</bien-budget>
<bien-budget>
<bien-budget-code>100</bien-budget-code>
<bien-budget-montant>0.00</bien-budget-montant>
</bien-budget>
<bien-budget>
<bien-budget-code>110</bien-budget-code>
<bien-budget-montant>0.00</bien-budget-montant>
</bien-budget>
<bien-budget>
<bien-budget-code>120</bien-budget-code>
<bien-budget-montant>0.00</bien-budget-montant>
</bien-budget>
<bien-budget>
<bien-budget-code>130</bien-budget-code>
<bien-budget-montant>0.00</bien-budget-montant>
</bien-budget>
<bien-complement>
<bien-comp-code>SIG01</bien-comp-code>
<bien-comp-val>1</bien-comp-val>
</bien-complement>
<bien-complement>
<bien-comp-code>SIG02</bien-comp-code>
<bien-comp-val>1</bien-comp-val>
</bien-complement>
<bien-complement>
<bien-comp-code>SIG03</bien-comp-code>
<bien-comp-val>1</bien-comp-val>
</bien-complement>
</bien-infos>
<bien-vacant>
<bien-disponible>OUI</bien-disponible>
<bien-date-dispo>01/06/2023</bien-date-dispo>
</bien-vacant>
</bien>
<?xml version="1.0" encoding="ISO-8859-1"?>
<biens>
<entete>
<date>02/11/2023</date>
<nom-service>10938</nom-service>
<nombre-biens>84</nombre-biens>
<type-traitement>P</type-traitement>
<adr-mail-log>mail</adr-mail-log>
</entete>
<bien>
<bien-identification>
<bien-dpt>22</bien-dpt>
<bien-organisme>B02</bien-organisme>
<bien-programme>0616</bien-programme>
<bien-code>01.00.0001</bien-code>
</bien-identification>
<bien-infos>
<bien-nature>LOG</bien-nature>
<bien-type-zone>AUT</bien-type-zone>
<bien-type>T5</bien-type>
<bien-etage>000</bien-etage>
<bien-surhab>100.70</bien-surhab>
<bien-indci>C</bien-indci>
<bien-ascenseur>0</bien-ascenseur>
<bien-handicape>0</bien-handicape>
<bien-neuf>0</bien-neuf>
<bien-adresse>
<adr-librue>address</adr-librue>
<adr-libcomp1></adr-libcomp1>
<adr-libcomp2></adr-libcomp2>
<adr-cp>2Code_Postal</adr-cp>
<adr-ville>VILLE</adr-ville>
<adr-code-insee>Code INSEE</adr-code-insee>
</bien-adresse>
<bien-qrt>X</bien-qrt>
<bien-finan-actuel>6</bien-finan-actuel>
<bien-eau-chaude-charge>1</bien-eau-chaude-charge>
<bien-eau-froide-charge>1</bien-eau-froide-charge>
<bien-ascenseur-charge>1</bien-ascenseur-charge>
<bien-chauffage-charge>1</bien-chauffage-charge>
<bien-chauffage-type>5</bien-chauffage-type>
<bien-date-premloc>01/06/2023</bien-date-premloc>
<bien-acquisition></bien-acquisition>
<bien-domaine>S</bien-domaine>
<bien-budget>
<bien-budget-code>10</bien-budget-code>
<bien-budget-montant>0.00</bien-budget-montant>
</bien-budget>
<bien-budget>
<bien-budget-code>20</bien-budget-code>
<bien-budget-montant>0.00</bien-budget-montant>
</bien-budget>
<bien-budget>
<bien-budget-code>30</bien-budget-code>
<bien-budget-montant>0.00</bien-budget-montant>
</bien-budget>
<bien-budget>
<bien-budget-code>90</bien-budget-code>
<bien-budget-montant>0.00</bien-budget-montant>
</bien-budget>
<bien-budget>
<bien-budget-code>100</bien-budget-code>
<bien-budget-montant>0.00</bien-budget-montant>
</bien-budget>
<bien-budget>
<bien-budget-code>110</bien-budget-code>
<bien-budget-montant>0.00</bien-budget-montant>
</bien-budget>
<bien-budget>
<bien-budget-code>120</bien-budget-code>
<bien-budget-montant>0.00</bien-budget-montant>
</bien-budget>
<bien-budget>
<bien-budget-code>130</bien-budget-code>
<bien-budget-montant>0.00</bien-budget-montant>
</bien-budget>
<bien-complement>
<bien-comp-code>SIG01</bien-comp-code>
<bien-comp-val>1</bien-comp-val>
</bien-complement>
<bien-complement>
<bien-comp-code>SIG02</bien-comp-code>
<bien-comp-val>1</bien-comp-val>
</bien-complement>
<bien-complement>
<bien-comp-code>SIG03</bien-comp-code>
<bien-comp-val>1</bien-comp-val>
</bien-complement>
</bien-infos>
<bien-vacant>
<bien-disponible>OUI</bien-disponible>
<bien-date-dispo>01/06/2023</bien-date-dispo>
</bien-vacant>
</bien>
Connexion ou Créer un compte pour participer à la conversation.
- ericlm128
- Visiteur
il y a 1 an 1 semaine - il y a 1 an 1 semaine #33682
par ericlm128
Réponse de ericlm128 sur le sujet Manipulation de fichiers et transcodage
Voici comment je procéderais.
PS : j'utilise "System.Xml.XmlDocument" pour préserver les espaces du document. Si ceci n'a aucun intérêt pour toi le code peut être simplifié
Désolé mais la partie FTP ne m'excite pas trop
$file_in = "test.xml"
$file_out = "test2.xml"
$codeConverter = @{
'20' = '12'
'21' = '19'
'22' = '13'
'23' = '15'
}
[System.Xml.XmlDocument] $xml = New-Object "System.XML.XMLDocument"
$xml.PreserveWhitespace = $true
$xml.Load($file_in)
$xml.SelectNodes('/biens/bien/bien-identification') | ForEach-Object {
$_.'bien-code' = $_.'bien-code' -replace '\.\d{2}\.'
$code = $codeConverter[$_.'bien-dpt']
if ($code -eq $null)
{
$code = $_.'bien-dpt'
}
$_.'bien-programme' = $code + $_.'bien-programme'
}
$xml.Save($file_out)
PS : j'utilise "System.Xml.XmlDocument" pour préserver les espaces du document. Si ceci n'a aucun intérêt pour toi le code peut être simplifié
Désolé mais la partie FTP ne m'excite pas trop
Dernière édition: il y a 1 an 1 semaine par ericlm128.
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.131 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Manipulation de fichiers et transcodage