Question [Résolu]analyse des fichiers par taille

Plus d'informations
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

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

Plus d'informations
il y a 10 ans 11 mois #20153 par xyz
Réponse de xyz sur le sujet Re:analyse des fichiers par taille
Harcide écrit:

je le réalise gratuitement aussi...

Cool !
Harcide écrit:

je sais ce que signifie cette ligne mais pas forcement ou la placé !

C'est de la logique, pas de la technique. Tu la places là où tu en as besoin ;-) , après le code de la saisie par exemple.
Harcide écrit:

on lui indique le paramètre -as et on la définie comme un entier

-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, 0x10

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:

je veux simplement comprendre et pas forcement qu'on face les choses à ma place,

Ok, mais dans les faits ce n'est pas tout à fait ça.
Harcide écrit:

ce qu'on me demande est comme même assez conséquant

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.

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 \&quot;Impossible de convertir: $_\&quot;}}
[/code:1]

Tutoriels PowerShell

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

Plus d'informations
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 :blush: j'ai réussi à exporter mon fichier avec comme nom la date + l'heure !! B)

ma logique n'est pas superbe :blush: 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

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

Plus d'informations
il y a 10 ans 11 mois #20165 par xyz
Réponse de xyz sur le sujet Re:analyse des fichiers par taille
Harcide écrit:

je suis super content

Savoure :P

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.

Plus d'informations
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 = \&quot;1MB\&quot;

#L'utilisateur peut définir la taille minimum des fichiers à analyser
$length_definition = read-host \&quot;`nIndiquer la taille minimum des fichiers à analyser,`npar exemple [10KB/10MB/10GB],`npar défaut [$DEFAULT_LENGTH] \&quot;

#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]
&lt;#function taille{
param(
$Caption,
$Message,
[ValidateSet(\&quot;KB\&quot;,\&quot;MB\&quot;,\&quot;GB\&quot;,\&quot;TB\&quot;,\&quot;PB\&quot;«»)]
$DefaultChoice=\&quot;MB\&quot;
)
$KB = New-Object System.Management.Automation.Host.ChoiceDescription \&quot;&amp;KB\&quot;
$MB = New-Object System.Management.Automation.Host.ChoiceDescription \&quot;&amp;MB\&quot;
$GB = New-Object System.Management.Automation.Host.ChoiceDescription \&quot;&amp;GB\&quot;
$TB = New-Object System.Management.Automation.Host.ChoiceDescription \&quot;&amp;TB\&quot;
$PB = New-Object System.Management.Automation.Host.ChoiceDescription \&quot;&amp;PB\&quot;
$Choices = [System.Management.Automation.Host.ChoiceDescription[]]($KB,$MB,$GB,$TB,$PB«»)
$Host.UI.PromptForChoice($Caption,$Message,$Choices,([byte]($DefaultChoice -eq \&quot;MB\&quot;«»)))
}#&gt;
[/code:1]

qu'en penses-tu ?

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

Plus d'informations
il y a 10 ans 11 mois #20168 par xyz
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 \&quot;Oui, mais l'utilisateur ne sait pas interpréter le résultat\&quot;, 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=\&quot;La saisie '$Size' est incorrecte.\&quot;;break}
'System.Management.Automation.ParameterBindingValidationException' {$Message='La saisie est invalide.';break}
default { $Message=\&quot;Erreur inconnue : $_\&quot; } #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
Propulsé par Kunena