Question Faire un tableau vite fait depuis Excel
- Madrolle
- Auteur du sujet
- Hors Ligne
- Membre senior
- Messages : 47
- Remerciements reçus 0
[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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
- Messages : 6302
- Remerciements reçus 68
Perso écrit:
Cela dépend :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.
- 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.
- Arnaud Petitjean
- Hors Ligne
- Modérateur
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 :
[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
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.
- Madrolle
- Auteur du sujet
- Hors Ligne
- Membre senior
- Messages : 47
- Remerciements reçus 0
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]
<br><br>Message édité par: Perso, à: 25/11/09 09:00[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
ShellDealer sur Twitter
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
- Hors Ligne
- Modérateur
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
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
- Messages : 6302
- Remerciements reçus 68
- 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
- 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=\"Tab\", [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.
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Contributions à la communauté
- Faire un tableau vite fait depuis Excel