Question Importer un fichier texte dans un tableau (Résolu)

Plus d'informations
il y a 14 ans 5 mois #750 par bordin
Salut tous,
je voudrais importer le contenu d'un fichier txt au format suivant:
SRV1, ServiceA, ServiceB, ServiceC
SRV2, ServiceD, ServiceB, ServiceC
SRV3, ServiceE, ServiceB, ServiceC
SRV4, ServiceF, ServiceB, ServiceC

En fait pour un serveur donné pouvoir scanner les services qui lui sont associés.
Je pense à un truc du style:
param ($file)
$array=get-content $file
foreach ( $el in $array) {
$arraytemp+=$el.split(\",\", [StringSplitOptions]::RemoveEmptyEntries)
}

Pas top, n'est pas?
Aurier vous une idée?<br><br>Message édité par: Arnaud, à: 1/08/07 18:03

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

Plus d'informations
il y a 14 ans 5 mois #751 par Berfini
Tu peux l'optimiser un peu comme ça :

param ($file)
get-content $file | foreach {
$arraytemp+=$_.split(\&quot;,\&quot;, [StringSplitOptions]::RemoveEmptyEntries)
}

Gaby

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

Plus d'informations
il y a 14 ans 5 mois #752 par Arnaud Petitjean
Salut Camille,

Il existe une cmdlet qui permet d'importer un fichier délimité par des virgules, il s'agit de Import-CSV.

Le truc c'est qu'elle nécessite que ton fichier contienne une entete pour chaque champs.

Regarde déjà si cela te conviens, sinon on trouvera une autre solution.

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 14 ans 5 mois #757 par Jacques Barathon
La commandelette import-csv paraît en effet la plus adaptée. Mais elle impose, comme le signalait Arnaud, une ligne d'en-tête, et elle demande également qu'on ait une idée à priori du nombre de champs total. Chaque ligne devra contenir ce même nombre de champs (avec juste des virgules si les champs sont vides).

Si cela pose un problème, on peut toujours récupérer les infos avec get-content et un tout petit peu d'huile de coude:

[code:1]
$srv=@{}
get-content $file | foreach {
$server, $srv.$server = $_.split(\&quot;,\&quot;«») | foreach {$_.trim()}
}[/code:1]
J'ai ajouté \&quot; | foreach {$_.trim()}\&quot; à la fin pour me débarrasser de l'espace qui apparaît en tête de chaque nom de service. Si cet espace peut ne pas figurer dans le fichier, ou s'il ne gêne pas pour le traitement à venir, tu peux virer cette partie du code.

Tu peux ensuite utiliser le tableau $srv comme suit:

[code:1]
PS&gt; $srv

Name Value
----
SRV1 {ServiceA, ServiceB, ServiceC}
SRV3 {ServiceE, ServiceB, ServiceC}
SRV2 {ServiceD, ServiceB, ServiceC}
SRV4 {ServiceF, ServiceB, ServiceC}

PS&gt; $srv.keys
SRV1
SRV3
SRV2
SRV4

PS&gt; $srv.srv1
ServiceA
ServiceB
ServiceC

etc.[/code:1]
En espérant que ça te sera utile.

Janel

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

Plus d'informations
il y a 14 ans 5 mois #761 par Robin Lemesle
Effectivement, ce que janel a proposé (tableau associatif) me semble vraiment la meilleure chose à faire dans ton cas.

Un tableau associatif est un tableau dans lequel chaque valeur n’est pas référencée par un index mais par une clé. Tu pourras ainsi plus facilement retrouver les services associés à un serveur.




Rob

Robin MVP PowerShell

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

Plus d'informations
il y a 14 ans 5 mois #764 par bordin
janel écrit:

La commandelette import-csv paraît en effet la plus adaptée. Mais elle impose, comme le signalait Arnaud, une ligne d'en-tête, et elle demande également qu'on ait une idée à priori du nombre de champs total. Chaque ligne devra contenir ce même nombre de champs (avec juste des virgules si les champs sont vides).

Si cela pose un problème, on peut toujours récupérer les infos avec get-content et un tout petit peu d'huile de coude:

[code:1]
$srv=@{}
get-content $file | foreach {
$server, $srv.$server = $_.split(\&quot;,\&quot;«») | foreach {$_.trim()}
}[/code:1]
J'ai ajouté \&quot; | foreach {$_.trim()}\&quot; à la fin pour me débarrasser de l'espace qui apparaît en tête de chaque nom de service. Si cet espace peut ne pas figurer dans le fichier, ou s'il ne gêne pas pour le traitement à venir, tu peux virer cette partie du code.

Tu peux ensuite utiliser le tableau $srv comme suit:

[code:1]
PS&gt; $srv

Name Value
----


SRV1 {ServiceA, ServiceB, ServiceC}
SRV3 {ServiceE, ServiceB, ServiceC}
SRV2 {ServiceD, ServiceB, ServiceC}
SRV4 {ServiceF, ServiceB, ServiceC}

PS&gt; $srv.keys
SRV1
SRV3
SRV2
SRV4

PS&gt; $srv.srv1
ServiceA
ServiceB
ServiceC

etc.[/code:1]
En espérant que ça te sera utile.

Janel


Salut,

Janel: ton exemple de code c'est pour un fichier csv ou texte?
Parce que j'ai quelque soucis!
J'ai créé mon fichier csv ainsi:
ligne1--&gt; Server, Services
ligne2--&gt; SRV1, SVC1, SVC2

Merci de m'éclairer!

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

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