Question
[Résolu] Problème de boucle
- Corentin
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 29
- Remerciements reçus 0
il y a 7 ans 9 mois #25559
par Corentin
[Résolu] Problème de boucle a été créé par Corentin
Bonjour à tous, nouvelle journée, nouveau problème 
Ce programme récupère des données dans un fichier csv.
Ce fichier contient donc une colonne nommé PPPOE_USERNAME.
Toutes les lignes ne possèdent pas de données dans cette colonne.
J'aimerais que quand il y a quelque chose dans cette colonne, alors on va chercher le bon modèle et le fichier généré a le bon nom,
else on va chercher un autre modèle et le nom du fichier générer est différent.
Seulement mon programme actuellement il prend toujours le premier modèle et concernant les noms de fichiers il génère que des PPPOE sauf la dernière ligne de mon fichier csv ou la il prend le bon modèle et met le bon nom
[code:1]
$FichierCSV = Import-Csv -Path \"C:\Users\Corentin.FOURRIER\Documents\ecoles1.csv\" -Delimiter \",\"
$compteur = 0
do{
foreach ($Ligne in $FichierCSV) {
$NOM_ECOLE = $ligne.NOM_ECOLE
$ADDR_FW_LAN = $ligne.ADDR_FW_LAN
$ADDR_POOL_DHCP_LAN = $ligne.ADDR_POOL_DHCP_LAN
$ADDR_FW_WAN = $ligne.ADDR_FW_WAN
$ADDR_MASK_WAN = $ligne.ADDR_MASK_WAN
$ADDR_GW_WAN = $ligne.ADDR_GW_WAN
$MAC_FW = $ligne.MAC_FW
$PPPOE_USERNAME = $ligne.PPPOE_USERNAME
$PPPOE_PASSWORD = $ligne.PPPOE_PASSWORD
if ($PPPOE_USERNAME -ne $null){
$contentPPPOE = Get-Content \"C:\Users\Corentin.FOURRIER\Documents\USB_V2\autoconf.ADDR-MAC-MODELE-PPPOE.clish\" | foreach {
$_ -replace \"<NOM_ECOLE>\",$NOM_ECOLE -replace \"<ADDR_FW_LAN>\", $ADDR_FW_LAN -replace \"<ADDR_POOL_DHCP_LAN>\", $ADDR_POOL_DHCP_LAN -replace \"<ADDR_FW_WAN>\", $ADDR_FW_WAN -replace \"<ADDR_MASK_WAN>\", $ADDR_MASK_WAN -replace \"<ADDR_GW_WAN>\", $ADDR_GW_WAN -replace \"<MAC_FW>\", $MAC_FW -replace \"<PPPOE_USERNAME>\", $PPPOE_USERNAME -replace \"<PPPOE_PASSWORD>\", $PPPOE_PASSWORD }
Set-Content -Path \"C:\Users\Corentin.FOURRIER\Documents\autoconf.MAC.clish\autoconf.$MAC_FW.PPPOE.clish\" -Value $contentPPPOE
} else {
$contentFO = Get-Content \"C:\Users\Corentin.FOURRIER\Documents\USB_V2\autoconf.ADDR-MAC-MODELE-FO.clish\" | foreach {
$_ -replace \"<NOM_ECOLE>\",$NOM_ECOLE -replace \"<ADDR_FW_LAN>\", $ADDR_FW_LAN -replace \"<ADDR_POOL_DHCP_LAN>\", $ADDR_POOL_DHCP_LAN -replace \"<ADDR_FW_WAN>\", $ADDR_FW_WAN -replace \"<ADDR_MASK_WAN>\", $ADDR_MASK_WAN -replace \"<ADDR_GW_WAN>\", $ADDR_GW_WAN -replace \"<MAC_FW>\", $MAC_FW }
Set-Content -Path \"C:\Users\Corentin.FOURRIER\Documents\autoconf.MAC.clish\autoconf.$MAC_FW.FO.clish\" -Value $contentFO
}
$compteur++
}
} until ($Ligne -ne $null)
#echo $contentPPPOE
#echo $contentFO
echo \"Le programme a généré $compteur fichiers avec succés\"
[/code:1]
Message édité par: Corentin, à: 8/06/18 14:55
Message édité par: Corentin, à: 11/06/18 12:51<br><br>Message édité par: Corentin, à: 12/06/18 12:54
Ce programme récupère des données dans un fichier csv.
Ce fichier contient donc une colonne nommé PPPOE_USERNAME.
Toutes les lignes ne possèdent pas de données dans cette colonne.
J'aimerais que quand il y a quelque chose dans cette colonne, alors on va chercher le bon modèle et le fichier généré a le bon nom,
else on va chercher un autre modèle et le nom du fichier générer est différent.
Seulement mon programme actuellement il prend toujours le premier modèle et concernant les noms de fichiers il génère que des PPPOE sauf la dernière ligne de mon fichier csv ou la il prend le bon modèle et met le bon nom
[code:1]
$FichierCSV = Import-Csv -Path \"C:\Users\Corentin.FOURRIER\Documents\ecoles1.csv\" -Delimiter \",\"
$compteur = 0
do{
foreach ($Ligne in $FichierCSV) {
$NOM_ECOLE = $ligne.NOM_ECOLE
$ADDR_FW_LAN = $ligne.ADDR_FW_LAN
$ADDR_POOL_DHCP_LAN = $ligne.ADDR_POOL_DHCP_LAN
$ADDR_FW_WAN = $ligne.ADDR_FW_WAN
$ADDR_MASK_WAN = $ligne.ADDR_MASK_WAN
$ADDR_GW_WAN = $ligne.ADDR_GW_WAN
$MAC_FW = $ligne.MAC_FW
$PPPOE_USERNAME = $ligne.PPPOE_USERNAME
$PPPOE_PASSWORD = $ligne.PPPOE_PASSWORD
if ($PPPOE_USERNAME -ne $null){
$contentPPPOE = Get-Content \"C:\Users\Corentin.FOURRIER\Documents\USB_V2\autoconf.ADDR-MAC-MODELE-PPPOE.clish\" | foreach {
$_ -replace \"<NOM_ECOLE>\",$NOM_ECOLE -replace \"<ADDR_FW_LAN>\", $ADDR_FW_LAN -replace \"<ADDR_POOL_DHCP_LAN>\", $ADDR_POOL_DHCP_LAN -replace \"<ADDR_FW_WAN>\", $ADDR_FW_WAN -replace \"<ADDR_MASK_WAN>\", $ADDR_MASK_WAN -replace \"<ADDR_GW_WAN>\", $ADDR_GW_WAN -replace \"<MAC_FW>\", $MAC_FW -replace \"<PPPOE_USERNAME>\", $PPPOE_USERNAME -replace \"<PPPOE_PASSWORD>\", $PPPOE_PASSWORD }
Set-Content -Path \"C:\Users\Corentin.FOURRIER\Documents\autoconf.MAC.clish\autoconf.$MAC_FW.PPPOE.clish\" -Value $contentPPPOE
} else {
$contentFO = Get-Content \"C:\Users\Corentin.FOURRIER\Documents\USB_V2\autoconf.ADDR-MAC-MODELE-FO.clish\" | foreach {
$_ -replace \"<NOM_ECOLE>\",$NOM_ECOLE -replace \"<ADDR_FW_LAN>\", $ADDR_FW_LAN -replace \"<ADDR_POOL_DHCP_LAN>\", $ADDR_POOL_DHCP_LAN -replace \"<ADDR_FW_WAN>\", $ADDR_FW_WAN -replace \"<ADDR_MASK_WAN>\", $ADDR_MASK_WAN -replace \"<ADDR_GW_WAN>\", $ADDR_GW_WAN -replace \"<MAC_FW>\", $MAC_FW }
Set-Content -Path \"C:\Users\Corentin.FOURRIER\Documents\autoconf.MAC.clish\autoconf.$MAC_FW.FO.clish\" -Value $contentFO
}
$compteur++
}
} until ($Ligne -ne $null)
#echo $contentPPPOE
#echo $contentFO
echo \"Le programme a généré $compteur fichiers avec succés\"
[/code:1]
Message édité par: Corentin, à: 8/06/18 14:55
Message édité par: Corentin, à: 11/06/18 12:51<br><br>Message édité par: Corentin, à: 12/06/18 12:54
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 7 ans 9 mois #25561
par Arnaud Petitjean
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Réponse de Arnaud Petitjean sur le sujet Re:Problème de boucle
Bonjour Corentin,
Je pense que le problème n'est pas là où tu penses...
En effet, avec Set-Content tu réécrases à chaque fois ton fichier. Essaie plutôt avec la commande Add-Content.
Arnaud
Je pense que le problème n'est pas là où tu penses...
En effet, avec Set-Content tu réécrases à chaque fois ton fichier. Essaie plutôt avec la commande Add-Content.
Arnaud
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
- Corentin
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 29
- Remerciements reçus 0
il y a 7 ans 9 mois #25563
par Corentin
Réponse de Corentin sur le sujet Re:Problème de boucle
Bonne idée, seulement cela me poserait problème d'avoir deux fichiers avec la même adresse MAC, si par exemple on modifie des données et qu'on relance le programme je risquerait d'avoir deux fichier avec la même adresse MAC.
J'ai donc laissé les Set-Content, et je ne sais pas trop comment mais le programme fonctionne désormais.
Seulement j'ai toujours un petit bug,
Encore une fois c'est la dernière ligne de mon fichier csv qui pose problème, et donc le dernier fichier de généré, il n'y a pourtant aucune erreurs dans mon fichier csv
il est généré comme les fichiers qui ont des données dans la colonne PPPOE_USERNAME alors qu'il n'y en a pas.
Est-ce une erreur commune cette histoire de dernière ligne d'un fichier csv ? Car je ne comprend vraiment pas
J'ai donc laissé les Set-Content, et je ne sais pas trop comment mais le programme fonctionne désormais.
Seulement j'ai toujours un petit bug,
Encore une fois c'est la dernière ligne de mon fichier csv qui pose problème, et donc le dernier fichier de généré, il n'y a pourtant aucune erreurs dans mon fichier csv
il est généré comme les fichiers qui ont des données dans la colonne PPPOE_USERNAME alors qu'il n'y en a pas.
Est-ce une erreur commune cette histoire de dernière ligne d'un fichier csv ? Car je ne comprend vraiment pas
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 7 ans 9 mois #25564
par Arnaud Petitjean
Es-tu sûr qu'il n'y aurait pas un espace dans ta chaine ? Car un espace n'est pas une valeur nulle.
Pour en avoir le cœur net, essaie ceci:
[code:1]
$FichierCSV = Import-Csv -Path \"C:\Users\Corentin.FOURRIER\Documents\ecoles1.csv\" -Delimiter \",\"
$FichierCSV[-1].PPPOE_USERNAME -eq $null
[/code:1]
Arnaud
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Réponse de Arnaud Petitjean sur le sujet Re:Problème de boucle
il est généré comme les fichiers qui ont des données dans la colonne PPPOE_USERNAME alors qu'il n'y en a pas.
Es-tu sûr qu'il n'y aurait pas un espace dans ta chaine ? Car un espace n'est pas une valeur nulle.
Pour en avoir le cœur net, essaie ceci:
[code:1]
$FichierCSV = Import-Csv -Path \"C:\Users\Corentin.FOURRIER\Documents\ecoles1.csv\" -Delimiter \",\"
$FichierCSV[-1].PPPOE_USERNAME -eq $null
[/code:1]
Arnaud
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
- Corentin
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 29
- Remerciements reçus 0
il y a 7 ans 9 mois #25565
par Corentin
Réponse de Corentin sur le sujet Re:Problème de boucle
Le programme me renvoie \"True\" à cette commande
J'ai régler le problème en tous simplement créant une autre ligne vide en dessous
En gros la dernière ligne était la 23ème j'ai juste appuyer sur Entré pour créer une 24ème ligne.
C'est tout de même étrange ce problème de dernière ligne
<br><br>Message édité par: Corentin, à: 7/06/18 14:38
J'ai régler le problème en tous simplement créant une autre ligne vide en dessous
En gros la dernière ligne était la 23ème j'ai juste appuyer sur Entré pour créer une 24ème ligne.
C'est tout de même étrange ce problème de dernière ligne
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 7 ans 9 mois #25566
par Arnaud Petitjean
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Réponse de Arnaud Petitjean sur le sujet Re:Problème de boucle
Affiche $FichierCSV[-1] et vérifie que tes valeurs sont correctes.
L'indice -1 représente la dernière valeur d'un tableau.
L'indice -1 représente la dernière valeur d'un tableau.
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.046 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu] Problème de boucle