Question
resultat \"split\" bizarre
- Romain F.
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 8
- Remerciements reçus 0
J'ai fait une fonction split sur un fichier txt
mais le résultat obtenue n'est pas comme je le souhaiterais ...
Mon code est le suivant :
[code:1]$CSV = Import-Csv -Path \".\Resultats.csv\" -delimiter \",\"
foreach ($line in $CSV)
{
$line
$split = $line -split ','
for ($i=0 ;$i –le ($split.Length) ;$i++)
{
Write-output $split[$i]>> \".\Resultats2.txt\"
}
}
[/code:1]
mais mon fichier de sortie apparrait commme ca :
[code:1]@{172.19.XXX.XX
Teleste
MPH101
\"3.0.22\"
HK00XXXXXX
\"2.0\"
\"CD-0029\"=172.19.XXX.XX
HK00XXXXXX
P2
VE2
\"Encoder 2 - H.264\"
H_264
=12/1
CBR
1800
100.0
3
232.19.XX.XX
5008
true}
@{172.19.XXX.XX
Teleste
MPH101
\"3.0.22\"
HK00XXXXX
\"2.0\"
\"CD-0029\"=172.19.XXX.XX
Teleste
MPH101
\"3.0.22\"
HK00XXXXX
\"2.0\"
\"CD-0030\"}[/code:1]
Ce qui me dérange c'est le \"@{172.19.XXX.XX\" et \"}\" qui apparait au début et à la fin de chaque, est il possible de changer ca ?
surtout que le \"@{172.19.XXX.XX\" est le meme pour TOUTE les lignes , alors que dans mon fichier cela change au fur et a mesure ...
Mon programme prend t il cette première ligne comme un header .
Connexion ou Créer un compte pour participer à la conversation.
- darphboubou
- Hors Ligne
- Membre premium
-
- Messages : 135
- Remerciements reçus 0
en gros
[code:1]
$line1=$line
$split = $line1 -split ','
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Romain F.
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 8
- Remerciements reçus 0
Connexion ou Créer un compte pour participer à la conversation.
- SiSMik
- Hors Ligne
- Membre platinium
-
- Messages : 492
- Remerciements reçus 0
En plus de ça, je viens de comprendre ton problème. Tout est dans le fait que ton csv est foireux. en gros chaque ligne ne contient pas le même nombre de champs.
du coup, pour traiter chaque ligne, il va falloir que tu fasses, un get-content de ton fichier ave cun foreach sur chaque ligne comme tu veux le faire.
Par contre, tu vas galérer vu que chaque ligne de contiendra pas le même nombre de champs.
Amuses toi bien.
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
- Messages : 968
- Remerciements reçus 0
[code:1]
$CSV = Import-Csv -Path \".\Resultats.csv\" -delimiter \",\"
[/code:1]
Tu n'as pas besoin d'utiliser le paramétre '-delimiter' car le séparateur par défaut se trouve être justement ... la virgule
[code:1]
PS>Get-Help import-csv
NOM
Import-CSV
RÉSUMÉ
Convertit les propriétés d'objet d'un fichier CSV (fichier de valeurs séparées par des virgules) en versions CSV de
s objets d'origine.
[/code:1]
Ici tu importes un fichier CSV et tu récupères donc, dans la variable $CSV, un tableau d'objets personnalisés (PSCustomObject).
Exemple avec un fichier csv tel que :
A,B,C,D
valeur1,valeur2,valeur3,valeur4
valeur11,valeur12,valeur13,valeur14
valeur21,valeur22,valeur23,valeur24
[code:1]
PS> $CSV = Import-Csv -Path \".\Resultats.csv\"
PS>$csv
A B C D
- - - -
valeur1 valeur2 valeur3 valeur4
valeur11 valeur12 valeur13 valeur14
valeur21 valeur22 valeur23 valeur24
PS> $CSV | Get-Member
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
----
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
A NoteProperty System.String A=valeur1
B NoteProperty System.String B=valeur2
C NoteProperty System.String C=valeur3
D NoteProperty System.String D=valeur4
[/code:1]
Chaque nom de colonne représente une 'NoteProperty' de chaque Objet, sachant que l'on récupère un objet personnalisé par ligne ... La 'définition' correspond à la valeur de la propriété concernée.
Du coup, je ne comprends pas l'histoire du 'split' sur la virgule : après le 'Import-Csv', il n'est plus question de ','
Essayes plutôt :
[code:1]
$CSV = Get-Content .\Resultats.csv
[/code:1]
Dans ce cas, le foreach va te renvoyer chaque ligne du fichier (une chaine de caractères) que tu vas pouvoir ensuite traiter avec ton split.
Sinon, avec un 'Import-Csv', en considérant que ton fichier csv est bien un fichier csv digne de ce nom et qu'il contient donc un Header (des noms de colonne) :
[code:1]
$CSV = Import-Csv .\Resultats.csv
# On récupère les noms de colonne => les noms des propriétés (NoteProperty) de chaque objet
$NoteProperties = $CSV | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name
# On traite chaque objet récupéré via le Import-Csv
foreach ($obj in $CSV)
{
# Pour chaque propriété d'objet
Foreach($NoteProperty in $NoteProperties){
# On ajoute la valeur de la propriét de l'objet en cours dans le fichier texte
Write-output $obj.\"$Noteproperty\" | Out-File \".\Resultats2.txt\" -Append
}
}
[/code:1]
Si ton fichier ne contient pas de Header, tu peux en spécifier un via le paramètre '-Header' sur 'Import-Csv' :
[code:1]
$CSV = Import-Csv .\Resultats.csv -Header A,B,C,D
[/code:1]
@+
Matthew BETTON
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
- Messages : 968
- Remerciements reçus 0
Si c'est toujours le même csv que l'autre jour, merci déjà de rester sur le même poste.
En plus de ça, je viens de comprendre ton problème. Tout est dans le fait que ton csv est foireux. en gros chaque ligne ne contient pas le même nombre de champs.
du coup, pour traiter chaque ligne, il va falloir que tu fasses, un get-content de ton fichier ave cun foreach sur chaque ligne comme tu veux le faire.
Par contre, tu vas galérer vu que chaque ligne de contiendra pas le même nombre de champs.
Amuses toi bien.
Salut Fab,
Encore la fête à la saucisse
Je sais, c'est moi la saucisse
@ ++
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- resultat "split" bizarre