Question
Tableau ou pas
- Besançon Ludovic
- Auteur du sujet
- Hors Ligne
- Membre senior
Réduire
Plus d'informations
- Messages : 44
- Remerciements reçus 0
il y a 4 ans 9 mois #29056
par Besançon Ludovic
Tableau ou pas a été créé par Besançon Ludovic
Bonjour,
Je suis confronté à un problème de dimension ...
Powershell est trop fort et moi pas
[code:1]$myLines = Get-Content $myFicCSV
If (($myLines[0].ToCharArray() | Where-Object { $_ -eq ';' } | Measure-Object).Count -eq 0) {
Write-Host \"J'ai bien trouvé un ;\"
}[/code:1]
Dans presque tous les cas cela fonctionne bien.
Sauf si le fichier ne contient qu'une seule ligne, alors $myLines n'est plus un tableau et $myLines[0] est le premier caractère de la ligne !
Peut-on forcer $myLines a être un tableau ?
Est-il plus simple de tester la dimension ?
Comment faîtes-vous ?
Ce n'est pas la première fois que je me retrouve gêner par cette particularté de PowerShell de retourner un tableau ou pas dans une variable ...
Ludovic.
Je suis confronté à un problème de dimension ...
Powershell est trop fort et moi pas
[code:1]$myLines = Get-Content $myFicCSV
If (($myLines[0].ToCharArray() | Where-Object { $_ -eq ';' } | Measure-Object).Count -eq 0) {
Write-Host \"J'ai bien trouvé un ;\"
}[/code:1]
Dans presque tous les cas cela fonctionne bien.
Sauf si le fichier ne contient qu'une seule ligne, alors $myLines n'est plus un tableau et $myLines[0] est le premier caractère de la ligne !
Peut-on forcer $myLines a être un tableau ?
Est-il plus simple de tester la dimension ?
Comment faîtes-vous ?
Ce n'est pas la première fois que je me retrouve gêner par cette particularté de PowerShell de retourner un tableau ou pas dans une variable ...
Ludovic.
Connexion ou Créer un compte pour participer à la conversation.
- Karon
- Hors Ligne
- Membre junior
Réduire
Plus d'informations
- Messages : 23
- Remerciements reçus 0
il y a 4 ans 9 mois #29061
par Karon
Réponse de Karon sur le sujet Re:Tableau ou pas
Bonjour,
Voici peut être une solution
[code:1]
$myFicCSV = \"E:\programmation\powershell\Tableau\fichier.csv\"
$Car = \";\"
$Cpt = 0
$myLines = Get-Content $myFicCSV
#$myLines[0].ToCharArray() | Where-Object { $_ -eq ';' } | Measure-Object
ForEach ($Line in $myLines)
{
$NbrCAR = ($myLines[0].ToCharArray() | Where-Object { $_ -eq $Car } | Measure-Object).Count
If ($NbrCAR -gt 0)
{
$Cpt = $Cpt + 1
Write-Host (\"Il y a {0} caratere(s) {1} sur la ligne {2}.\" -f $NbrCAR,$Car,$Cpt)
}
}
[/code:1]
Voici peut être une solution
[code:1]
$myFicCSV = \"E:\programmation\powershell\Tableau\fichier.csv\"
$Car = \";\"
$Cpt = 0
$myLines = Get-Content $myFicCSV
#$myLines[0].ToCharArray() | Where-Object { $_ -eq ';' } | Measure-Object
ForEach ($Line in $myLines)
{
$NbrCAR = ($myLines[0].ToCharArray() | Where-Object { $_ -eq $Car } | Measure-Object).Count
If ($NbrCAR -gt 0)
{
$Cpt = $Cpt + 1
Write-Host (\"Il y a {0} caratere(s) {1} sur la ligne {2}.\" -f $NbrCAR,$Car,$Cpt)
}
}
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
- Hors Ligne
- Modérateur
il y a 4 ans 9 mois #29062
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:Tableau ou pas
Bonjour Ludovic,
Tout simplement il suffit de déclarer ta variable en type tableau avant de l'utiliser en faisant ceci :
[code:1]
$myLines = @()
[/code:1]
Sinon tu peux être plus direct en faisant cela:
[code:1]$myLines = @(Get-Content $myFicCSV)[/code:1]
Arnaud
Tout simplement il suffit de déclarer ta variable en type tableau avant de l'utiliser en faisant ceci :
[code:1]
$myLines = @()
[/code:1]
Sinon tu peux être plus direct en faisant cela:
[code:1]$myLines = @(Get-Content $myFicCSV)[/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.
- Besançon Ludovic
- Auteur du sujet
- Hors Ligne
- Membre senior
Réduire
Plus d'informations
- Messages : 44
- Remerciements reçus 0
il y a 4 ans 9 mois #29066
par Besançon Ludovic
Réponse de Besançon Ludovic sur le sujet Re:Tableau ou pas
Bonjour,
La deuxième solution fonctionne.
Pas la première
Mais une seule solution me suffit.
Bien que j'aurais bien aimer comprendre ...
Merci.
Ludovic.
La deuxième solution fonctionne.
Pas la première
Mais une seule solution me suffit.
Bien que j'aurais bien aimer comprendre ...
Merci.
Ludovic.
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 4 ans 9 mois #29067
par Philippe
Réponse de Philippe sur le sujet Re:Tableau ou pas
salut Ludovic
Ludovic écrit:
[code:1]$myLines = @()[/code:1]
ce qu'il n'a pas précisé c'est la façon de l'utiliser !
[code:1]$myLines += Get-Content $myFicCSV[/code:1]
sous Powershell contrairement à d'autre langage il n'y a pas d'instruction de déclaration qui fixe définitivement le type d'une variable
et donc le $myLines = @() crée la variable avec un tableau vide,
le = fait la création de la variable et y affecte le tableau vide crée par @()
et si ta bien suivis le égale recrée la variable même si elle existe déjà et donc supprime le typage précédent
du coup si après tu fais $myLines = Get-Content $myFicCSV tu supprime le tableau (et le typage de la variable) pour créé une variable du type de ce que renvoie l'instruction à droite du égale
c'est pour ça qu'après une déclaration pour forcer un typage, il faut utilisé la variable en ajoutent un contenu, avec des += par exemple
j’espère que je suis clair
Ludovic écrit:
comme te la dis Arnaud \"il suffit de déclarer ta variable en type tableau avant de l'utiliser\"Bien que j'aurais bien aimer comprendre ...
[code:1]$myLines = @()[/code:1]
ce qu'il n'a pas précisé c'est la façon de l'utiliser !
[code:1]$myLines += Get-Content $myFicCSV[/code:1]
sous Powershell contrairement à d'autre langage il n'y a pas d'instruction de déclaration qui fixe définitivement le type d'une variable
et donc le $myLines = @() crée la variable avec un tableau vide,
le = fait la création de la variable et y affecte le tableau vide crée par @()
et si ta bien suivis le égale recrée la variable même si elle existe déjà et donc supprime le typage précédent
du coup si après tu fais $myLines = Get-Content $myFicCSV tu supprime le tableau (et le typage de la variable) pour créé une variable du type de ce que renvoie l'instruction à droite du égale
c'est pour ça qu'après une déclaration pour forcer un typage, il faut utilisé la variable en ajoutent un contenu, avec des += par exemple
j’espère que je suis clair
Connexion ou Créer un compte pour participer à la conversation.
- Besançon Ludovic
- Auteur du sujet
- Hors Ligne
- Membre senior
Réduire
Plus d'informations
- Messages : 44
- Remerciements reçus 0
il y a 4 ans 9 mois #29068
par Besançon Ludovic
Réponse de Besançon Ludovic sur le sujet [Résolu] Re:Tableau ou pas
Très clair.
Merci.
Ludovic.
Merci.
Ludovic.
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.146 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Tableau ou pas