Question
[Résolu]analyse des fichiers par taille
- Axel
- Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 176
- Remerciements reçus 0
il y a 10 ans 11 mois #20149
par Axel
Réponse de Axel sur le sujet Re:analyse des fichiers par taille
je le réalise gratuitement aussi... fin bref je ne vous demande pas à faire tout le code non plus ^^'
juste à connaitre certaine chose donné des pistes des astuces.
je sais ce que signifie cette ligne mais pas forcement ou la placé !
donc dans la variable $Size on récupère l'information de l'utilisateur, la valeur de la variable $length_definition qui est une chaine puis on lui indique le paramètre -as et on la définie comme un entier
je l'ai placé un peu partout , parfois j'obtiens rien , parfois j'obtiens impossible de convertir un string en int32 et parfois si je met 1MB j'obtiens toujours 1MB
je veux simplement comprendre et pas forcement qu'on face les choses à ma place, ce qu'on me demande est comme même assez conséquant
Message édité par: Harcide, à: 16/06/15 11:13<br><br>Message édité par: Harcide, à: 16/06/15 11:14
juste à connaitre certaine chose donné des pistes des astuces.
je sais ce que signifie cette ligne mais pas forcement ou la placé !
donc dans la variable $Size on récupère l'information de l'utilisateur, la valeur de la variable $length_definition qui est une chaine puis on lui indique le paramètre -as et on la définie comme un entier
je l'ai placé un peu partout , parfois j'obtiens rien , parfois j'obtiens impossible de convertir un string en int32 et parfois si je met 1MB j'obtiens toujours 1MB
je veux simplement comprendre et pas forcement qu'on face les choses à ma place, ce qu'on me demande est comme même assez conséquant
Message édité par: Harcide, à: 16/06/15 11:13<br><br>Message édité par: Harcide, à: 16/06/15 11:14
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 10 ans 11 mois #20153
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:analyse des fichiers par taille
Harcide écrit:
Harcide écrit:
, après le code de la saisie par exemple.
Harcide écrit:
Si l'opération échoue aucune erreur n'est déclenchée mais la variable contient $null.
Il te faut donc tester cette valeur ainsi :
[code:1]
$MaVariable= RécupéreLeRésultatDunTraitement
if ($MaVariable) { Write-Host ‘$MaVariable ne contient pas $null’ } #réussite
if (-Not $MaVariable) { Write-Host ‘$MaVariable contient $null’ } #erreur on redemande la saisie
[/code:1]
Harcide écrit:
Harcide écrit:
Harcide écrit:
Pour la gestion des opérateurs de taille Kb,Mb, leur présence empêche la conversion, ils sont spécifique à Powershell.
Ils sont utilisés par les scripteurs pour les utilisateurs c'est à toi de les gérer:
[code:1]
$t=2,-1, 1.5, 0x10,'1Kb','texte'
$t|% {$v=$_ -as [int]; If (-not $v) {Write-Error \"Impossible de convertir: $_\"}}
[/code:1]
Cool !je le réalise gratuitement aussi...
Harcide écrit:
C'est de la logique, pas de la technique. Tu la places là où tu en as besoinje sais ce que signifie cette ligne mais pas forcement ou la placé !
Harcide écrit:
-As est un opérateur de transtypage, de conversion si tu veux, on TENTE de construire un entier à partir d'une chaîne de caractères, il faut donc que celle -ci contienne une représentation valide d'un entier : 2,-1, 1.5, 0x10on lui indique le paramètre -as et on la définie comme un entier
Si l'opération échoue aucune erreur n'est déclenchée mais la variable contient $null.
Il te faut donc tester cette valeur ainsi :
[code:1]
$MaVariable= RécupéreLeRésultatDunTraitement
if ($MaVariable) { Write-Host ‘$MaVariable ne contient pas $null’ } #réussite
if (-Not $MaVariable) { Write-Host ‘$MaVariable contient $null’ } #erreur on redemande la saisie
[/code:1]
Harcide écrit:
je l'ai placé un peu partout
Harcide écrit:
Ok, mais dans les faits ce n'est pas tout à fait ça.je veux simplement comprendre et pas forcement qu'on face les choses à ma place,
Harcide écrit:
Pour un débutant je confirme, pour une personne qui connait il lui faut tout de même créer toutes les fonctions autour de ton traitement.ce qu'on me demande est comme même assez conséquant
Pour la gestion des opérateurs de taille Kb,Mb, leur présence empêche la conversion, ils sont spécifique à Powershell.
Ils sont utilisés par les scripteurs pour les utilisateurs c'est à toi de les gérer:
[code:1]
$t=2,-1, 1.5, 0x10,'1Kb','texte'
$t|% {$v=$_ -as [int]; If (-not $v) {Write-Error \"Impossible de convertir: $_\"}}
[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Axel
- Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 176
- Remerciements reçus 0
il y a 10 ans 11 mois #20156
par Axel
Réponse de Axel sur le sujet Re:analyse des fichiers par taille
super merci je vais faire mes tests, je suis super content
j'ai réussi à exporter mon fichier avec comme nom la date + l'heure !! 
ma logique n'est pas superbe
je cherche trop compliqué alors que la solution est sous mon nez !
Message édité par: Harcide, à: 16/06/15 15:50<br><br>Message édité par: Harcide, à: 16/06/15 16:16
ma logique n'est pas superbe
Message édité par: Harcide, à: 16/06/15 15:50<br><br>Message édité par: Harcide, à: 16/06/15 16:16
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 10 ans 11 mois #20165
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:analyse des fichiers par taille
Harcide écrit:

Pour la gestion des suffixes KB et autres, je pense que l'usage du read-host va te compliquer la tâche.
Si tu utilises l'approche suivante, tu te bases sur les possibilité de Powershell et le laisse contrôler la validité des données attendues :
[code:1]
#La taille des fichiers recherchés doit pouvoir être exprimée en Kb ou Mb….
#La valeur par défaut doit être affichée et proposée à la modification
function Find-Duplicate{
param(
[Parameter(Position=1, Mandatory=$true)]
[ValidateRange(0,[double]::MaxValue)]
[Double]$Size=1Kb
)
Write-Host $Size
#...
}
#Suffixes multiplicateurs autorisés :
# KB, MB, GB, TB, PB
Find-Duplicate -Size 1024 #constante
Find-Duplicate -Size (1024*1024) #calcul
Find-Duplicate #défaut
Find-Duplicate -Size 2kb #modifie la valeur part défaut, valeur exprimée avec un suffixe multiplicateur
Find-Duplicate -Size 0x10Gb #en Hexa (16 *1GB«»)
Find-Duplicate -Size 1.4e23tb #puissance
Find-Duplicate -Size 0x12Lpb #Type Long
Find-Duplicate -Size 1.30Dmb #type double
Find-Duplicate -Size -1kb #Erreur de parsing
Find-Duplicate -Size (-1kb) #Erreur d'étendue de valeur
[/code:1]
Si tu dois livrer un script c'est ainsi qu'on le paramètre, ensuite tu pourras y ajouter la doc, documenter chaque paramètre et indiquer qq exemples.
Savoureje suis super content
Pour la gestion des suffixes KB et autres, je pense que l'usage du read-host va te compliquer la tâche.
Si tu utilises l'approche suivante, tu te bases sur les possibilité de Powershell et le laisse contrôler la validité des données attendues :
[code:1]
#La taille des fichiers recherchés doit pouvoir être exprimée en Kb ou Mb….
#La valeur par défaut doit être affichée et proposée à la modification
function Find-Duplicate{
param(
[Parameter(Position=1, Mandatory=$true)]
[ValidateRange(0,[double]::MaxValue)]
[Double]$Size=1Kb
)
Write-Host $Size
#...
}
#Suffixes multiplicateurs autorisés :
# KB, MB, GB, TB, PB
Find-Duplicate -Size 1024 #constante
Find-Duplicate -Size (1024*1024) #calcul
Find-Duplicate #défaut
Find-Duplicate -Size 2kb #modifie la valeur part défaut, valeur exprimée avec un suffixe multiplicateur
Find-Duplicate -Size 0x10Gb #en Hexa (16 *1GB«»)
Find-Duplicate -Size 1.4e23tb #puissance
Find-Duplicate -Size 0x12Lpb #Type Long
Find-Duplicate -Size 1.30Dmb #type double
Find-Duplicate -Size -1kb #Erreur de parsing
Find-Duplicate -Size (-1kb) #Erreur d'étendue de valeur
[/code:1]
Si tu dois livrer un script c'est ainsi qu'on le paramètre, ensuite tu pourras y ajouter la doc, documenter chaque paramètre et indiquer qq exemples.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Axel
- Auteur du sujet
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 176
- Remerciements reçus 0
il y a 10 ans 11 mois #20166
par Axel
Réponse de Axel sur le sujet Re:analyse des fichiers par taille
bonjour Laurent,
j'avais pensé à :
[code:1]
#Taille minimum par défaut pour l'analyse
$DEFAULT_LENGTH = \"1MB\"
#L'utilisateur peut définir la taille minimum des fichiers à analyser
$length_definition = read-host \"`nIndiquer la taille minimum des fichiers à analyser,`npar exemple [10KB/10MB/10GB],`npar défaut [$DEFAULT_LENGTH] \"
#Pour convertir
$Size = $length_definition -as [int]
#if ($Size) {'ok'} else {'nok'}
if($length_definition)
{
$choice = $length_definition
}
else
{
$choice = $DEFAULT_LENGTH
}
echo $choice
[/code:1]
c'est vrai que dans ce cas le read-host me complique la vie alors j'ai pensé à :
[code:1]
<#function taille{
param(
$Caption,
$Message,
[ValidateSet(\"KB\",\"MB\",\"GB\",\"TB\",\"PB\"«»)]
$DefaultChoice=\"MB\"
)
$KB = New-Object System.Management.Automation.Host.ChoiceDescription \"&KB\"
$MB = New-Object System.Management.Automation.Host.ChoiceDescription \"&MB\"
$GB = New-Object System.Management.Automation.Host.ChoiceDescription \"&GB\"
$TB = New-Object System.Management.Automation.Host.ChoiceDescription \"&TB\"
$PB = New-Object System.Management.Automation.Host.ChoiceDescription \"&PB\"
$Choices = [System.Management.Automation.Host.ChoiceDescription[]]($KB,$MB,$GB,$TB,$PB«»)
$Host.UI.PromptForChoice($Caption,$Message,$Choices,([byte]($DefaultChoice -eq \"MB\"«»)))
}#>
[/code:1]
qu'en penses-tu ?
j'avais pensé à :
[code:1]
#Taille minimum par défaut pour l'analyse
$DEFAULT_LENGTH = \"1MB\"
#L'utilisateur peut définir la taille minimum des fichiers à analyser
$length_definition = read-host \"`nIndiquer la taille minimum des fichiers à analyser,`npar exemple [10KB/10MB/10GB],`npar défaut [$DEFAULT_LENGTH] \"
#Pour convertir
$Size = $length_definition -as [int]
#if ($Size) {'ok'} else {'nok'}
if($length_definition)
{
$choice = $length_definition
}
else
{
$choice = $DEFAULT_LENGTH
}
echo $choice
[/code:1]
c'est vrai que dans ce cas le read-host me complique la vie alors j'ai pensé à :
[code:1]
<#function taille{
param(
$Caption,
$Message,
[ValidateSet(\"KB\",\"MB\",\"GB\",\"TB\",\"PB\"«»)]
$DefaultChoice=\"MB\"
)
$KB = New-Object System.Management.Automation.Host.ChoiceDescription \"&KB\"
$MB = New-Object System.Management.Automation.Host.ChoiceDescription \"&MB\"
$GB = New-Object System.Management.Automation.Host.ChoiceDescription \"&GB\"
$TB = New-Object System.Management.Automation.Host.ChoiceDescription \"&TB\"
$PB = New-Object System.Management.Automation.Host.ChoiceDescription \"&PB\"
$Choices = [System.Management.Automation.Host.ChoiceDescription[]]($KB,$MB,$GB,$TB,$PB«»)
$Host.UI.PromptForChoice($Caption,$Message,$Choices,([byte]($DefaultChoice -eq \"MB\"«»)))
}#>
[/code:1]
qu'en penses-tu ?
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 10 ans 11 mois #20168
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:analyse des fichiers par taille
Bonjour Harcide,
dans le premier code tu ne tiens pas compte de $Size.
Pour la fonction Taille il s'agit du choix du suffixe et elle renvoie le numéro du choix, ni la taille ni le suffixe.
Effectivement, tu peux découper le pb, mais c'est à toi de le coder et de le tester, l'autre approche laisse PS controler la saisie et l'utilisateur choisir sa saisie, si elle ne correspond pas, PS renvoi une erreur.
Pourquoi réécrire ce qui existe déjà ?
Ensuite tu peux dire \"Oui, mais l'utilisateur ne sait pas interpréter le résultat\", d'où le cmdlet : Get-Help MaFonction -Full.
On te rétorque que l'utilisateur n'a pas à lire la doc, soit. Dans ce cas tu peux recoder la gestion d'erreur :
[code:1]
function Find-Duplicate{
param(
$Size #pas de contrainte
)
function FindDuplicate{ #fonction interne
param(
#Contraintes, cf. tes spécifications
[Parameter(Position=1, Mandatory=$true)]
[ValidateRange(0,[double]::MaxValue)]
[Double]$Size=1Kb
)
Write-Host $Size
#...
}
try {
FindDuplicate -Size $Size
}
#Les classes d'exception à gérer sont ne sont pas publiques (internal)
#on ne peut donc pas utiliser leurs types dans l'instruction Catch
#on traite le nom de ces classes en tant que chaîne de caractères
catch {
switch ($_.Exception.GetType().ToString()) {
'System.Management.Automation.ParameterBindingArgumentTransformationException' {$Message=\"La saisie '$Size' est incorrecte.\";break}
'System.Management.Automation.ParameterBindingValidationException' {$Message='La saisie est invalide.';break}
default { $Message=\"Erreur inconnue : $_\" } #ou Throw $_
}
Write-Error $Message
}
#...
}
[/code:1]
Je t'ai indiqué un tutoriel sur la gestion d'erreur, voici celui sur les fonctions avancées .
Il y a surement plusieurs solutions, je laisse à d'autres le soin de te les soumettre
dans le premier code tu ne tiens pas compte de $Size.
Pour la fonction Taille il s'agit du choix du suffixe et elle renvoie le numéro du choix, ni la taille ni le suffixe.
Effectivement, tu peux découper le pb, mais c'est à toi de le coder et de le tester, l'autre approche laisse PS controler la saisie et l'utilisateur choisir sa saisie, si elle ne correspond pas, PS renvoi une erreur.
Pourquoi réécrire ce qui existe déjà ?
Ensuite tu peux dire \"Oui, mais l'utilisateur ne sait pas interpréter le résultat\", d'où le cmdlet : Get-Help MaFonction -Full.
On te rétorque que l'utilisateur n'a pas à lire la doc, soit. Dans ce cas tu peux recoder la gestion d'erreur :
[code:1]
function Find-Duplicate{
param(
$Size #pas de contrainte
)
function FindDuplicate{ #fonction interne
param(
#Contraintes, cf. tes spécifications
[Parameter(Position=1, Mandatory=$true)]
[ValidateRange(0,[double]::MaxValue)]
[Double]$Size=1Kb
)
Write-Host $Size
#...
}
try {
FindDuplicate -Size $Size
}
#Les classes d'exception à gérer sont ne sont pas publiques (internal)
#on ne peut donc pas utiliser leurs types dans l'instruction Catch
#on traite le nom de ces classes en tant que chaîne de caractères
catch {
switch ($_.Exception.GetType().ToString()) {
'System.Management.Automation.ParameterBindingArgumentTransformationException' {$Message=\"La saisie '$Size' est incorrecte.\";break}
'System.Management.Automation.ParameterBindingValidationException' {$Message='La saisie est invalide.';break}
default { $Message=\"Erreur inconnue : $_\" } #ou Throw $_
}
Write-Error $Message
}
#...
}
[/code:1]
Je t'ai indiqué un tutoriel sur la gestion d'erreur, voici celui sur les fonctions avancées .
Il y a surement plusieurs solutions, je laisse à d'autres le soin de te les soumettre
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.044 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu]analyse des fichiers par taille