Question Tableau ou pas

Plus d'informations
il y a 3 ans 4 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.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 4 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]

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 4 mois #29062 par Arnaud Petitjean
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

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 ou d'un conseil ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 4 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.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 4 mois #29067 par Philippe
Réponse de Philippe sur le sujet Re:Tableau ou pas
salut Ludovic

Ludovic écrit:

Bien que j'aurais bien aimer comprendre ...

comme te la dis Arnaud \"il suffit de déclarer ta variable en type tableau avant de l'utiliser\"
[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.

Plus d'informations
il y a 3 ans 4 mois #29068 par Besançon Ludovic
Très clair.

Merci.

Ludovic.

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.054 secondes
Propulsé par Kunena