Question powershell tableau

Plus d'informations
il y a 10 ans 9 mois #20073 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:powershell tableau
Richard Lazaro écrit:

@Laurent : Tu retournes aux bases ? :)

Yes !

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 9 mois #20075 par jules pantin
Réponse de jules pantin sur le sujet Re:powershell tableau
je connais cette citation qui apparaît dans CIV IV bref

en fait voila mon code
[code:1]
#########récupération fichier##########
$mon_fichier=@()

$a=\".\snapshot.csv\"

$mon_fichier=(get-content $a)

$mon_fichier[$z]

foreach ($row in $mon_fichier)
{
#############################################################
$temp_name = $row -split '\s+|\t+|-+'
write-host -ForeGroundColor green $temp_name[1,2,3,4,5,6,8,11] `n
$macolone = ($temp_name[11])
$mon_fichier = ($temp_name[11])
$z++

##############################################################
}
[/code:1]


il est totalement faux

je prends un fichier avec 4k lignes qui ne contiens pas de colonnes, je split pour créer des colonnes avec les champs qui m’intéressent,

je voudrais comparer la ligne 11 sur ma colonne pour trouver les doublons,

le fichier se présente sous la forme (a l'import):

jgvfjvf-ekek_kfk_fjfj-2014-11-21-dndn-sksf kzfjzfji zj ej

je résume en gros les données de ce fichier sont confidentielles.

si il y'a des doublons (sur la ligne 11) il fait un compteur avec ou les affiches par ordre,


exemple

cola----colb
______|_____
a
a
b
a
c
b
d
c

tu souhaite avoir :

cola----colb----compteur
______|______|__________
b
a
2
b
b
1
c
c
1<br><br>Message édité par: julesPS1, à: 12/06/15 10:19

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

Plus d'informations
il y a 10 ans 9 mois #20082 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:powershell tableau
julesPS1 écrit:

je voudrais comparer la ligne 11 sur ma colonne pour trouver les doublons,

Tu veux dire le onzième élément du tableau issu du Split ?

julesPS1 écrit:

je résume en gros les données de ce fichier sont confidentielles.

Je pense avoir compris ce que tu veux faire, mais propose nous un jeu de test représentatif (pas besoin des données d'origine).
Peux-tu répondre aux questions posées, stp ?

Tutoriels PowerShell

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

Plus d'informations
il y a 10 ans 9 mois #20083 par jules pantin
Réponse de jules pantin sur le sujet Re:powershell tableau
fichier texte sous forme


hourly-rgf_NFS_C05_BRZ_004-date/heure XSPW10X824W
hourly-rgf_NFS_C05_BRZ_004-date/heure XSNW10C565X

hourly-rgf_NFS_C05_GLD_001-date/heure XSPW11B565B

weekly-rgf_NFS_C05_GLD_001-date/heure XSPW11B565B

hourly-rgf_NFS_C05_GLD_001-date/heure XSPW11B565B

hourly-rgf_NFS_C05_BRZ_001-date/heure XSPW10X824W


je voudrais comparer le dernier champ dans le tableau soit XSNW10C565X par exemple pour voir si il y a des doublons

mon code ressemble a cela maintenant
[code:1]
#########récupération fichier##########
$mon_fichier=@()
$a=\&quot;.\mop.csv\&quot;
$mon_fichier=(get-content $a)
$longueur = $mon_fichier.length



$temp_name = $mon_fichier -split '\s+|\t+|-+'
write-host -ForeGroundColor green $temp_name[1,2,3,4,5,6,8,11] `n
$i = 0

foreach($row in $mon_fichier)
{
foreach($rows in $mon_fichier)
{
if($macolone = $mon_fichier)
{
write-host -foregroundcolor green fack
$mon_fichier.length
$i++
}
$i
}
$i
}

$i


[/code:1]<br><br>Message édité par: julesPS1, à: 12/06/15 15:11

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

Plus d'informations
il y a 10 ans 9 mois #20084 par jules pantin
Réponse de jules pantin sur le sujet Re:powershell tableau
il faut plus de détails ?

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

Plus d'informations
il y a 10 ans 9 mois #20087 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:powershell tableau
julesPS1 écrit:

il faut plus de détails ?

Je vais faire avec.
Le début (l'analyse, la construction des objet et le regroupement par nom recherché) :
[code:1]
function New-MatchesObject{
#A partir d'une chaîne de caractères,
#construit un objet personnalisé à l'aide d'une regex
#utilisant des captures nommées.

#Exemple :
# #hashtable de paramètrages
# $MyObject=@{
# #hashtable de création d'objets
# SMB=@{
# #Ces entrées portent les mêmes noms
# #que les paramètres de la fonction New-MatchesObject.
# #Ce qui autorise le splatting
#
# #Hashtable de création d'un objet
# #Exemple : analyse d'attribut AD extensionAttributeN
# Res_CN=@{
# #Nom du type affiché par Get-member ou $Variable.PsObject.TypeNames
# TypeName='MY.SMB.Res_CN'
# #Expression régulière contenant des captures nommées
# #celles-ci seront utilisées pour construire des propriètés d'objets PS personnalisés
# Regex='^extensionAttribute(?&lt;Type&gt;1)#CN=(?&lt;CN&gt;.*?),'
# #On supprime dans la variable automatique $Matches les clés indiquées
# Keys=0,1
# }
#
# Res_DN=@{
# TypeName='MY.SMB.Res_DN'
# Regex='^extensionAttribute(?&lt;Type&gt;1)#(?&lt;DistinguishedName&gt;.*$)'
# Keys=0,1
# }
# };
# #Others=@{...}
# }#$MyObject
#
# $S=\&quot;extensionAttribute1#CN=MyCN,...\&quot;
#
# #Le splatting ne fonctionne avec @Myobject.SMB.Res_CN
# $Parameters=$Myobject.SMB.Res_CN
# $o=New-MatchesObject $S @Parameters
# $o|gm
# $O
#
# $S2=\&quot;extensionAttribute1#MyDN\&quot;
# $Parameters=$Myobject.SMB.Res_DN
# $o2=New-MatchesObject $S2 @Parameters
# $o2|gm
# $O2

param (
#Objet sur lequel on exécute la regex
[Parameter(Mandatory=$true,position=0)]
[ValidateNotNullOrEmpty()]
$InputObject,

#Nom du type de l'objet PS
[Parameter(Mandatory=$true,position=1)]
[ValidateNotNullOrEmpty()]
[String] $TypeName,

#Expression régulière appliquée sur le paramètre InputObject
[Parameter(Mandatory=$true,position=2)]
[ValidateNotNullOrEmpty()]
[String] $Regex,

#En cas de succès de la regex,
#on supprime les noms de clé indiquées dans la hashtable $Matches
[Parameter(Mandatory=$false,position=3)]
[ValidateNotNullOrEmpty()]
#la clé 0 contient l'intégralité de ligne analysée
[Object[]] $Keys=0
)
Function Select-NamedCapture {
#Extrait les noms de capture présent dans la regex
Param( [string] $RegexStr )
$Pattern='\?\&lt;(.*?)\&gt;'
$Regex = new-object regex $Pattern

$CurrentMatch = $Regex.match($RegexStr)

if (!$CurrentMatch.Success)
{ Write-debug \&quot;Echec :$RegexStr\&quot; }
else
{ $CurrentMatch.Groups[1].Value }

while ($CurrentMatch.Success)
{
$CurrentMatch = $CurrentMatch.NextMatch()
if ($CurrentMatch.Success)
{ $CurrentMatch.Groups[1].Value }
}
}#Select-NamedCapture
Write-debug \&quot;New-MatchesObject\&quot;

$NamesOfCaptures=Select-NamedCapture -RegexStr $Regex
if ($InputObject -match $Regex)
{
#Conflit possible entre un nom de capture numérique ('1') et le numéro d'un groupe : 1
#dans ce cas on 'perd la capture :
# #$Str=\&quot;^(?&lt;11&gt;toto) (titi)\&quot;
# $Str=\&quot;^(?'1'toto) (titi)\&quot;
# 'toto titi' -match $str

$Keys|
Foreach {
Write-Debug \&quot;Remove key = $_\&quot;
#Pour les captures optionnelles,
#si la clé n'existe pas il n'y a pas d'erreur
$matches.Remove($_)
}

Compare-Object ([string[]]$Matches.Keys) $NamesOfCaptures|
Select -ExpandProperty InputObject|
Select-Object {$Matches.Add($_,$Null)}
Write-debug \&quot;Construction d'un objet de type : $($TypeName)\&quot;
$Object=New-Object PSCustomObject -Property $Matches
$Object.PsObject.TypeNames.Insert(0,$TypeName)
Write-Output $Object
}
}#New-MatchesObject


$mon_fichier='C:\temp\mop.txt'
@'
ourly-rgf_NFS_C05_BRZ_004-date/heure XSPW10X824W
hourly-rgf_NFS_C05_BRZ_004-date/heure XSNW10C565X
hourly-rgf_NFS_C05_GLD_001-date/heure XSPW11B565B
weekly-rgf_NFS_C05_GLD_001-date/heure XSPW11B565B
hourly-rgf_NFS_C05_GLD_001-date/heure XSPW11B565B
hourly-rgf_NFS_C05_BRZ_001-date/heure XSPW10X824W
'@ &gt; $mon_fichier



#hashtable de paramètrages
$Parameters=@{
#Nom du type affiché par Get-member ou $Variable.PsObject.TypeNames
TypeName='MOP'
#Expression régulière contenant des captures nommées
#celles-ci seront utilisées pour construire des propriètés d'objets PS personnalisés
Regex='(?&lt;Line&gt;.*) (?&lt;Name&gt;.*?)$'
#On supprime dans la variable automatique $Matches les clés indiquées
Keys=0,1
}

$Tab=Foreach ( $Line in GC $mon_fichier) {
$O=New-MatchesObject $Line @Parameters
If ($O.name -ne $null)
{ [void]$O.Name.Trim() }
$O
}
$Grp=$Tab|Group-Object name
$Grp
# Count Name Group
#
----
# 2 XSPW10X824W {@{Line=ourly-rgf_NFS_C05_BRZ_004-date/heure; Name=XSPW10X824W}, @{Line=hourly-rgf_N...
# 1 XSNW10C565X {@{Line=hourly-rgf_NFS_C05_BRZ_004-date/heure; Name=XSNW10C565X}}
# 3 XSPW11B565B {@{Line=hourly-rgf_NFS_C05_GLD_001-date/heure; Name=XSPW11B565B}, @{Line=weekly-rgf_...

$Grp[0].Count
#2
$Grp[0].Group
# Line Name
# ---- ----
# ourly-rgf_NFS_C05_BRZ_004-date/heure XSPW10X824W
# hourly-rgf_NFS_C05_BRZ_001-date/heure XSPW10X824W
$Grp[0].Group[0]
# Line Name
# ---- ----
# ourly-rgf_NFS_C05_BRZ_004-date/heure XSPW10X824W

[/code:1]
Je te laisse faire la fin, i.e. reconstruire le fichier selon tes critères.

La fonction New-MatchesObject nécessite encore qq test de ma part (regex infructueuse et chaîne vide), mais pour le jeux de test donné, elle ne devrait pas poser de pb.

Tutoriels PowerShell

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

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