Question Faire un tableau vite fait depuis Excel

Plus d'informations
il y a 10 ans 11 mois #5699 par Perso
Une petite fonction très simple à mettre dans votre profile et qui pourrait vite vous faire gagner du temps pour récupérer par exemple une liste de nom de machines, etc.

[code:1]function tab { [array]$script:tab=$(); do {$script:tab+=read-host} until (0) }[/code:1]


Alors voilà le mode d'emploi.

Jj'appelle la fonction, je colle ma colonne de tableur, j'ajoute des données si je veux, et je fait un simple ctrl-c.
eh ! hop, j'ai récupéré tout ça dans la variable $tab shell.

[PS] D:\dev\powershell>tab
gh
fguj
qsdry
sdfy
[PS] D:\dev\powershell>$tab
gh
fguj
qsdry
sdfy


Je n'ai pas encore trop réfléchi à la maniére de mettre le nom du tableau en paramétre, mais si vous avez une idée elle est bien venue.

ShellDealer sur Twitter

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

Plus d'informations
il y a 10 ans 11 mois #5703 par Laurent Dardenne
Salut,
Perso écrit:

Je n'ai pas encore trop réfléchi à la maniére de mettre le nom du tableau en paramétre, mais si vous avez une idée elle est bien venue.

Cela dépend :
- de la portée que tu veux donner à ton tableau,
- de la création ou non d'un nouveau tableau à chaque appel (ajout d'un switch Append ?).

Sinon je trouve l'idée simple, c'est à dire efficace ;)
Cela ressemble au Copy con du DOS.

En même temps j'ai un doute sur la présence du nom de portée Script au sein du code de la fonction...

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 11 mois #5711 par Arnaud
Salut !

Très astucieux en effet !:) Elle peut rendre bien des services...

On pourrait nommer cette fonction ConvertTo-Array.

Je me suis amusé à la modifier quelque peut pour la mettre un peu plus dans l'esprit PowerShell :laugh: :

[code:1]
function ConvertTo-Array
{
$tab=@()
Write-Host 'Collez ici vos données:'
do
{
$tab+=read-host
} until ($tab -eq '')
$tab[0..$($tab.length-3)]
}
[/code:1]

Exemple d'utilisation de ma fonction modifiée :

[code:1]
PS > $f = ConvertTo-Array
Collez ici vos données:
blanc
bleu
jaune
rouge
vert
un
deux
trois
quatre
cinq


PS > $f
blanc
bleu
jaune
rouge
vert
un
deux
trois
quatre
cinq

PS > $f[5]
un
[/code:1]

Ce n'est plus du tout un \"one-liner\" mais je la préfère comme ça; après chacun ses goûts ;)

Pour quitter la saisie, il faut valider deux fois.

Arnaud

Créateur du forum de la communauté PowerShell Francophone

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

Plus d'informations
il y a 10 ans 11 mois #5715 par Perso
A votre manière, elle s'intègre très bien à un programme. C'est ce genre de résultat que je cherchais à obtenir.

merci

Une remarque sur le nom, je proposerais PasteTo-array ça me parait plus juste. ConvertTo m'évoque plus un \"alias de \"-as [array]\".

J'ai renforcé le typage à fin que s'il n'y a qu'un élément on obtienne toujours un tableau.

[code:1]function PasteTo-Array
{
[string[]]$tab=@()
Write-Host 'Collez ici vos données:'
do
{
$tab+=$(read-host)
} until ($tab -eq '')
$tab[0..$($tab.length-3)]
}[/code:1]

[PS] D:\dev\powershell>$t=PasteTo-Array
Collez ici vos données:
dghfh


[PS] D:\dev\powershell>$t
dghfh
[PS] D:\dev\powershell>$t[0].GetType()

IsPublic IsSerial Name BaseType



----
True True String System.Object


[PS] D:\dev\powershell>$t[0]
dghfh
[PS] D:\dev\powershell>$t.count
1

<br><br>Message édité par: Perso, à: 25/11/09 09:00

ShellDealer sur Twitter

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

Plus d'informations
il y a 10 ans 11 mois #5717 par Arnaud
Salut perso !

En fait j'ai choisi le nommage en fonction des verbes déjà utilisés dans PowerShell.

En effet, Microsoft recommande d'utiliser une liste de verbes et de noms prédéfinis dans la mesure du possible afin d'essayer de conserver une certaine homogénéité dans les commandes.

Regarde ce lien sur MSDN : Cmdlet Verbs - Naming Rules

Bonne journée,

Arnaud

Créateur du forum de la communauté PowerShell Francophone

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

Plus d'informations
il y a 10 ans 11 mois #5723 par Laurent Dardenne
Je me permets deux remarques,
- la première sur le nom, je ne pense pas que le verbe ConvertTo ou PasteTo soit approprié, PasteTo n'existe pas dans la liste et ConvertTo-Array est plus proche d'une conversion que d'une lecture clavier. J'utiliserais plutôt Read-HostToArray puisque le traitement spécialise Read-Host. Si je recherche sur le verbe je retrouve la fonction (sous ps v2) et sur le nom je dois préciser l'étoile host*.
Mais c'est vrai que le nommage n'est pas évident :S

- la seconde sur la gestion des espaces si je fais, à partir d'un éditeur de texte, un copier coller de lignes contenant des lignes vide contigües ou pas, la fonction ne gére pas ce cas. Le test suivant [code:1]$tab -eq ''[/code:1] ne recherche pas les espaces contigüs signalant une fin de saisie, mais tous les espaces présent dans le tableau.
Ensuite ça dépend du besoin de chacun et du temps à consacrer au codage.

Du coup j'ai crée une autre version laissant le soin au code appelé de créer la variable et permettant de gérer les espaces :
[code:1]
function Read-HostToArray ([String] $VariableName=\&quot;Tab\&quot;, [Int] $Scope=1, [switch] $Append){
#Suppose que la variable $VariableName n'est pas pas protégée.
[string[]]$_Tab=@()
Write-Host 'Collez ici vos données [Control-Z pour arrêter] :'

do {
$S= [console]::ReadLine()
#Control-Z renvoi $null
#On arrête la saisie
if ($S -eq $null)
{ Break }
$_Tab+=$S
} until ($False)

#Récupère la variable Tab s'il elle existe
$Var=Get-Variable $VariableName -Scope $Scope -ea SilentlyContinue

If ($Append.IsPresent)
{
#Si la variable Tab n'existe pas, on la crée dans la portée indiquée
if ($Var -eq $null)
{ New-Variable -Name $VariableName -Value $_Tab -scope $Scope }
else
#La variable Tab existe, on y ajoute les lignes saisies
{ $Var.Value +=$_Tab}
}
else
{
#Si la variable Tab existe, on la supprime avant de la recréer,
#on y insére les lignes saisies
if ($Var -ne $null)
{ Remove-Variable -Name $VariableName -scope $Scope -ea SilentlyContinue }
New-Variable -Name $VariableName -Value $_Tab -scope $Scope
}
}

rv tab
Read-HostToArray -Append
[/code:1]

Tutoriels PowerShell

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

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