Question
Extraire les 3 premiers blocs d'une adresse IP
- Marc
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 90
- Remerciements reçus 0
il y a 9 ans 1 mois #23068
par Marc
Réponse de Marc sur le sujet Re:Extraire les 3 premiers blocs d'une adresse IP
Bonjour a tous,
perso je ne maitrise pas suffisamment le dotnet.
Du coup j'aurais fais comme ça.
[code:1]
$ips = Import-Csv \"c:\temp\adresse_ip.csv\" -UseCulture #<- Je récupère mes IP
$ips|foreach{
#<- Dans cette variable je stock mon ip transformé
$a=\"\"
#<- Je split mon ip et récupère les 3 premiers digit
$_.AdresseIP.Split(\".\"«»)[0..2]|foreach{
#<- Je les réassemble et y rajoute le dernier .
$a+=$_ + \".\"
}
Write-Host $a
}
10.210.60.
10.220.105.
10.230.177.
10.240.117.
10.250.218.
[/code:1]
perso je ne maitrise pas suffisamment le dotnet.
Du coup j'aurais fais comme ça.
[code:1]
$ips = Import-Csv \"c:\temp\adresse_ip.csv\" -UseCulture #<- Je récupère mes IP
$ips|foreach{
#<- Dans cette variable je stock mon ip transformé
$a=\"\"
#<- Je split mon ip et récupère les 3 premiers digit
$_.AdresseIP.Split(\".\"«»)[0..2]|foreach{
#<- Je les réassemble et y rajoute le dernier .
$a+=$_ + \".\"
}
Write-Host $a
}
10.210.60.
10.220.105.
10.230.177.
10.240.117.
10.250.218.
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 9 ans 1 mois #23070
par Philippe
Réponse de Philippe sur le sujet Re:Extraire les 3 premiers blocs d'une adresse IP
salut à tous
une autre approche en expressions régulières :
[code:1]$csvfile = \"C:\Powershell\A*.csv\"
$listeIP = Import-CSV $csvfile -Delimiter \";\"
Foreach ($ip in $listeIP) {
$NewIP = ($ip.\"Adresse IP\" -split \"^(\d{1,3}\.\d{1,3}\.\d{1,3})\"«»)[1]
Write-host $NewIP
}
[/code:1]
les techniques pour avoir un résultat ne manque pas
seul impératif connaître les données et leurs formats
.
une autre approche en expressions régulières :
[code:1]$csvfile = \"C:\Powershell\A*.csv\"
$listeIP = Import-CSV $csvfile -Delimiter \";\"
Foreach ($ip in $listeIP) {
$NewIP = ($ip.\"Adresse IP\" -split \"^(\d{1,3}\.\d{1,3}\.\d{1,3})\"«»)[1]
Write-host $NewIP
}
[/code:1]
les techniques pour avoir un résultat ne manque pas
seul impératif connaître les données et leurs formats
.
Connexion ou Créer un compte pour participer à la conversation.
- Vega
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 8
- Remerciements reçus 0
il y a 9 ans 1 mois #23072
par Vega
Réponse de Vega sur le sujet Re:Extraire les 3 premiers blocs d'une adresse IP
Excellent Marcci, merci. Ça fonctionne très bien.
Je souhaiterais bien aboutir aussi la méthode de Laurent, même si plus le temps passe moins je crois que je vais y arriver. C'est un véritable casse-tête pour se mettre à niveau.
J'avance par étape, maintenant que le plus dur est fait, je positionne ma colonne adresse IP entre deux autres colonnes, dans un fichier CSV.
Fichier CSV : specimen.csv (séparateur \";\")
Quand je l'édite, j'ai le contenu suivant :
[code:1]
Numéro de série;Adresse IP;Dernière mise à jour
AZ12345;10.201.174.39;2017-02-01 09:00:10
AZ67890;10.201.104.37;2016-06-28 10:10:41
AZ23456;10.201.67.47;2017-02-01 09:00:23
AZ78901;10.201.167.80;2017-02-01 08:50:31
AZ23498;10.201.212.47;2016-06-14 13:56:51
[/code:1]
L'idée, c'est de modifier la colonne \"Adresse IP\" en récupérant les 3 premiers blocs, comme on vient de faire, puis d'exporter le fichier modifié dans un nouveau fichier.
Voici mon code actuel :
[code:1]
$ips = Import-CSV \"C:\Powershell\Sp*.csv\" -UseCulture
$ips | foreach {
$a=\"\"
$_.\"Adresse IP\".Split(\".\"«»)[0..2]|foreach {
$a+=$_ + \".\"
}
$ips
#Write-Host $a
} | Export-Csv C:\Powershell\Fichier_OK.csv -NoTypeInformation
[/code:1]
Ce qui me donne en sorti :
[code:1]
\"Num?ro de s?rie\",\"Adresse IP\",\"Derni?re mise ? jour\"
\"AZ12345\",\"10.210.60.39\",\"2017-02-01 09:00:10\"
\"AZ67890\",\"10.220.105.50\",\"2016-06-28 10:10:41\"
\"AZ23456\",\"10.230.177.47\",\"2017-02-01 09:00:23\"
\"AZ78901\",\"10.240.117.80\",\"2017-02-01 08:50:31\"
\"AZ23498\",\"10.250.218.47\",\"2016-06-14 13:56:51\"
\"AZ12345\",\"10.210.60.39\",\"2017-02-01 09:00:10\"
\"AZ67890\",\"10.220.105.50\",\"2016-06-28 10:10:41\"
\"AZ23456\",\"10.230.177.47\",\"2017-02-01 09:00:23\"
\"AZ78901\",\"10.240.117.80\",\"2017-02-01 08:50:31\"
\"AZ23498\",\"10.250.218.47\",\"2016-06-14 13:56:51\"
\"AZ12345\",\"10.210.60.39\",\"2017-02-01 09:00:10\"
\"AZ67890\",\"10.220.105.50\",\"2016-06-28 10:10:41\"
\"AZ23456\",\"10.230.177.47\",\"2017-02-01 09:00:23\"
\"AZ78901\",\"10.240.117.80\",\"2017-02-01 08:50:31\"
\"AZ23498\",\"10.250.218.47\",\"2016-06-14 13:56:51\"
\"AZ12345\",\"10.210.60.39\",\"2017-02-01 09:00:10\"
\"AZ67890\",\"10.220.105.50\",\"2016-06-28 10:10:41\"
\"AZ23456\",\"10.230.177.47\",\"2017-02-01 09:00:23\"
\"AZ78901\",\"10.240.117.80\",\"2017-02-01 08:50:31\"
\"AZ23498\",\"10.250.218.47\",\"2016-06-14 13:56:51\"
\"AZ12345\",\"10.210.60.39\",\"2017-02-01 09:00:10\"
\"AZ67890\",\"10.220.105.50\",\"2016-06-28 10:10:41\"
\"AZ23456\",\"10.230.177.47\",\"2017-02-01 09:00:23\"
\"AZ78901\",\"10.240.117.80\",\"2017-02-01 08:50:31\"
\"AZ23498\",\"10.250.218.47\",\"2016-06-14 13:56:51\"
[/code:1]
Pas très glorieux, ça boucle 5 fois, comme le nombre d'enregistrement dans mon fichier. un léger détail doit m'échapper
Je souhaiterais bien aboutir aussi la méthode de Laurent, même si plus le temps passe moins je crois que je vais y arriver. C'est un véritable casse-tête pour se mettre à niveau.
J'avance par étape, maintenant que le plus dur est fait, je positionne ma colonne adresse IP entre deux autres colonnes, dans un fichier CSV.
Fichier CSV : specimen.csv (séparateur \";\")
Quand je l'édite, j'ai le contenu suivant :
[code:1]
Numéro de série;Adresse IP;Dernière mise à jour
AZ12345;10.201.174.39;2017-02-01 09:00:10
AZ67890;10.201.104.37;2016-06-28 10:10:41
AZ23456;10.201.67.47;2017-02-01 09:00:23
AZ78901;10.201.167.80;2017-02-01 08:50:31
AZ23498;10.201.212.47;2016-06-14 13:56:51
[/code:1]
L'idée, c'est de modifier la colonne \"Adresse IP\" en récupérant les 3 premiers blocs, comme on vient de faire, puis d'exporter le fichier modifié dans un nouveau fichier.
Voici mon code actuel :
[code:1]
$ips = Import-CSV \"C:\Powershell\Sp*.csv\" -UseCulture
$ips | foreach {
$a=\"\"
$_.\"Adresse IP\".Split(\".\"«»)[0..2]|foreach {
$a+=$_ + \".\"
}
$ips
#Write-Host $a
} | Export-Csv C:\Powershell\Fichier_OK.csv -NoTypeInformation
[/code:1]
Ce qui me donne en sorti :
[code:1]
\"Num?ro de s?rie\",\"Adresse IP\",\"Derni?re mise ? jour\"
\"AZ12345\",\"10.210.60.39\",\"2017-02-01 09:00:10\"
\"AZ67890\",\"10.220.105.50\",\"2016-06-28 10:10:41\"
\"AZ23456\",\"10.230.177.47\",\"2017-02-01 09:00:23\"
\"AZ78901\",\"10.240.117.80\",\"2017-02-01 08:50:31\"
\"AZ23498\",\"10.250.218.47\",\"2016-06-14 13:56:51\"
\"AZ12345\",\"10.210.60.39\",\"2017-02-01 09:00:10\"
\"AZ67890\",\"10.220.105.50\",\"2016-06-28 10:10:41\"
\"AZ23456\",\"10.230.177.47\",\"2017-02-01 09:00:23\"
\"AZ78901\",\"10.240.117.80\",\"2017-02-01 08:50:31\"
\"AZ23498\",\"10.250.218.47\",\"2016-06-14 13:56:51\"
\"AZ12345\",\"10.210.60.39\",\"2017-02-01 09:00:10\"
\"AZ67890\",\"10.220.105.50\",\"2016-06-28 10:10:41\"
\"AZ23456\",\"10.230.177.47\",\"2017-02-01 09:00:23\"
\"AZ78901\",\"10.240.117.80\",\"2017-02-01 08:50:31\"
\"AZ23498\",\"10.250.218.47\",\"2016-06-14 13:56:51\"
\"AZ12345\",\"10.210.60.39\",\"2017-02-01 09:00:10\"
\"AZ67890\",\"10.220.105.50\",\"2016-06-28 10:10:41\"
\"AZ23456\",\"10.230.177.47\",\"2017-02-01 09:00:23\"
\"AZ78901\",\"10.240.117.80\",\"2017-02-01 08:50:31\"
\"AZ23498\",\"10.250.218.47\",\"2016-06-14 13:56:51\"
\"AZ12345\",\"10.210.60.39\",\"2017-02-01 09:00:10\"
\"AZ67890\",\"10.220.105.50\",\"2016-06-28 10:10:41\"
\"AZ23456\",\"10.230.177.47\",\"2017-02-01 09:00:23\"
\"AZ78901\",\"10.240.117.80\",\"2017-02-01 08:50:31\"
\"AZ23498\",\"10.250.218.47\",\"2016-06-14 13:56:51\"
[/code:1]
Pas très glorieux, ça boucle 5 fois, comme le nombre d'enregistrement dans mon fichier. un léger détail doit m'échapper
Connexion ou Créer un compte pour participer à la conversation.
- Vega
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 8
- Remerciements reçus 0
il y a 9 ans 1 mois #23073
par Vega
Réponse de Vega sur le sujet Re:Extraire les 3 premiers blocs d'une adresse IP
Merci beaucoup 6ratgus, en effet je vois avec vous 3 qu'il y a de nombreuses approches différentes.
Si tu as du temps à perdre (la blague...) je te laisse lire mon dernier message. En attendant, je me remets aux recherches! Merci!
Si tu as du temps à perdre (la blague...) je te laisse lire mon dernier message. En attendant, je me remets aux recherches! Merci!
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 9 ans 1 mois #23076
par Philippe
Réponse de Philippe sur le sujet Re:Extraire les 3 premiers blocs d'une adresse IP
tu a de la chance j'ai du temps \"à perdre\" 
environ 5 mns
d'abord les erreurs de codage :
sur l'import, perso j'ai du rajouter \"-Encoding UTF7\" pour ne pas avoir de problème d'accent
mais tu n'a peut être pas le problème !
sur cette partie de ligne de code \"$_.\"Adresse IP\".Split(\".\")[0..2]\"
tu a trouvé l'astuce pour les nom de colonne avec des espaces, c'est une bonne chose
a toi de voir quelle solution tu utilise pour la transformation de adresse IP, on t'a donnée plusieurs methodes, tu est maitre de ce choix
pour le fait que tu ai 5 fois la même chose dans le fichier destination.
le pourquoi : parce que tu a mis dans ta boucle principale \"$ips\" qui contient tout ton fichier source
ton fichier contient 5 lignes donc tu va avoir 5 fois tout ton fichier source dans l'export !!!
je pense que tu doit supprimé cette ligne !!!
pour la solution de ce problème, tu doit voir \"$ips\" comme un object de type tableau (ici tableau de chaine de caractère) un peu comme un tableau excel
tu doit changer le contenue d'une cellule d'une ligne
dans ton cas dans une boucle ça s'écrit :
$_.'Adresse IP' = la nouvelle ip
le reste est bon donc a toi de jouer !!!
<br><br>Message édité par: 6ratgus, à: 2/02/17 17:41
environ 5 mns
d'abord les erreurs de codage :
sur l'import, perso j'ai du rajouter \"-Encoding UTF7\" pour ne pas avoir de problème d'accent
mais tu n'a peut être pas le problème !
sur cette partie de ligne de code \"$_.\"Adresse IP\".Split(\".\")[0..2]\"
tu a trouvé l'astuce pour les nom de colonne avec des espaces, c'est une bonne chose
a toi de voir quelle solution tu utilise pour la transformation de adresse IP, on t'a donnée plusieurs methodes, tu est maitre de ce choix
pour le fait que tu ai 5 fois la même chose dans le fichier destination.
le pourquoi : parce que tu a mis dans ta boucle principale \"$ips\" qui contient tout ton fichier source
ton fichier contient 5 lignes donc tu va avoir 5 fois tout ton fichier source dans l'export !!!
je pense que tu doit supprimé cette ligne !!!
pour la solution de ce problème, tu doit voir \"$ips\" comme un object de type tableau (ici tableau de chaine de caractère) un peu comme un tableau excel
tu doit changer le contenue d'une cellule d'une ligne
dans ton cas dans une boucle ça s'écrit :
$_.'Adresse IP' = la nouvelle ip
le reste est bon donc a toi de jouer !!!
Connexion ou Créer un compte pour participer à la conversation.
- Vega
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 8
- Remerciements reçus 0
il y a 9 ans 1 mois #23077
par Vega
Réponse de Vega sur le sujet Re:Extraire les 3 premiers blocs d'une adresse IP
Merci d'avoir pris le temps d'expliquer.
Je suis dessus là, mais je n'arrive pas à parcourir mon tableau ($ips) si je l'enlève au début, j'ai des erreurs d'exécution.
J'aurais bien vu un truc dans le genre :
[code:1]
$ips = Import-CSV \"C:\Powershell\Sp*.csv\" -UseCulture
#$ip |
foreach ($ip in $ips) {
$a=\"\"
$_.\"Adresse IP\".Split(\".\"«»)[0..2] | foreach {
$a+=$_ + \".\"
}
Write-Host $a
}
$ips | Export-Csv C:\Powershell\Fichier_OK.csv -NoTypeInformation
[/code:1]
Mais ça ne reconnait pas mon \"foreach\" je ne comprends pas pourquoi. Et ça me renvoit une erreur :
[code:1]
PS C:\Users\5931517> C:\Powershell\Print.ps1
Vous ne pouvez pas appeler de méthode sur une expression ayant la valeur Null.
Au niveau de C:\Powershell\Print.ps1 : 8 Caractère : 33
+ $_.\"Adresse IP\".Split <<<< (\".\"«»)[0..2] | foreach {
+ CategoryInfo : InvalidOperation: (Split:«»String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
[/code:1]
Je dois rentrer je continuerai chez moi ce soir... Par contre je n'ai pas l'impression d'être presque au bout là!!! A suivre
Je suis dessus là, mais je n'arrive pas à parcourir mon tableau ($ips) si je l'enlève au début, j'ai des erreurs d'exécution.
J'aurais bien vu un truc dans le genre :
[code:1]
$ips = Import-CSV \"C:\Powershell\Sp*.csv\" -UseCulture
#$ip |
foreach ($ip in $ips) {
$a=\"\"
$_.\"Adresse IP\".Split(\".\"«»)[0..2] | foreach {
$a+=$_ + \".\"
}
Write-Host $a
}
$ips | Export-Csv C:\Powershell\Fichier_OK.csv -NoTypeInformation
[/code:1]
Mais ça ne reconnait pas mon \"foreach\" je ne comprends pas pourquoi. Et ça me renvoit une erreur :
[code:1]
PS C:\Users\5931517> C:\Powershell\Print.ps1
Vous ne pouvez pas appeler de méthode sur une expression ayant la valeur Null.
Au niveau de C:\Powershell\Print.ps1 : 8 Caractère : 33
+ $_.\"Adresse IP\".Split <<<< (\".\"«»)[0..2] | foreach {
+ CategoryInfo : InvalidOperation: (Split:«»String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
[/code:1]
Je dois rentrer je continuerai chez moi ce soir... Par contre je n'ai pas l'impression d'être presque au bout là!!! A suivre
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.051 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Extraire les 3 premiers blocs d'une adresse IP