Question
[Résolu] manipulation de fichiers
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 16 ans 7 mois #5052
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:manipulation de fichiers
Salut,
si vous utilisez le pipeline le pb d'accés semble résolu, de plus le temps d'exécution est plus court :
[code:1]
# $s=\"2121 39.969090 128.448059 8974.193153 -0.041179\"
# 1..50000|% {$S}|out-file -append \"C:\temp\Test.txt\"
measure-command {
gc \"C:\temp\Test.txt\"|
Foreach {
$k = $_.split(' ')
\"{0} {1} {2}\" -F $k[2],$k[1],$k[3]}|
out-file -append \"C:\temp\Test2.txt\"
}
#temps d'exécution :
# Days : 0
# Hours : 0
# Minutes : 3
# Seconds : 59
# Milliseconds : 892
# Ticks : 2398920673
# TotalDays : 0,00277652855671296
# TotalHours : 0,0666366853611111
# TotalMinutes : 3,99820112166667
# TotalSeconds : 239,8920673
# TotalMilliseconds : 239892,0673
[/code:1]
La version utilisant l'append au sein d'une boucle est beaucoup plus long :
[code:1]
measure-command {
gc \"C:\temp\Test.txt\"|
Foreach {
$k = $_.split(' ')
\"{0} {1} {2}\" -F $k[2],$k[1],$k[3]|
out-file -append \"C:\temp\Test2.txt\" }
}
#temps d'exécution :
# Days : 0
# Hours : 0
# Minutes : 10
# Seconds : 57
# Milliseconds : 291
# Ticks : 6572914376
# TotalDays : 0,00760753978703704
# TotalHours : 0,182580954888889
# TotalMinutes : 10,9548572933333
# TotalSeconds : 657,2914376
# TotalMilliseconds : 657291,4376
[/code:1]
Il reste possible d'optimiser le premier code mais il faut du temps pour tester + solutions.
Ensuite et avec la seconde version, le pb d'accés sur le fichier cible provient, je pense, d'un accés externe à PS.
J'ai trouvé ce post sur MS-Connect concernant les redirections sous PS.
si vous utilisez le pipeline le pb d'accés semble résolu, de plus le temps d'exécution est plus court :
[code:1]
# $s=\"2121 39.969090 128.448059 8974.193153 -0.041179\"
# 1..50000|% {$S}|out-file -append \"C:\temp\Test.txt\"
measure-command {
gc \"C:\temp\Test.txt\"|
Foreach {
$k = $_.split(' ')
\"{0} {1} {2}\" -F $k[2],$k[1],$k[3]}|
out-file -append \"C:\temp\Test2.txt\"
}
#temps d'exécution :
# Days : 0
# Hours : 0
# Minutes : 3
# Seconds : 59
# Milliseconds : 892
# Ticks : 2398920673
# TotalDays : 0,00277652855671296
# TotalHours : 0,0666366853611111
# TotalMinutes : 3,99820112166667
# TotalSeconds : 239,8920673
# TotalMilliseconds : 239892,0673
[/code:1]
La version utilisant l'append au sein d'une boucle est beaucoup plus long :
[code:1]
measure-command {
gc \"C:\temp\Test.txt\"|
Foreach {
$k = $_.split(' ')
\"{0} {1} {2}\" -F $k[2],$k[1],$k[3]|
out-file -append \"C:\temp\Test2.txt\" }
}
#temps d'exécution :
# Days : 0
# Hours : 0
# Minutes : 10
# Seconds : 57
# Milliseconds : 291
# Ticks : 6572914376
# TotalDays : 0,00760753978703704
# TotalHours : 0,182580954888889
# TotalMinutes : 10,9548572933333
# TotalSeconds : 657,2914376
# TotalMilliseconds : 657291,4376
[/code:1]
Il reste possible d'optimiser le premier code mais il faut du temps pour tester + solutions.
Ensuite et avec la seconde version, le pb d'accés sur le fichier cible provient, je pense, d'un accés externe à PS.
J'ai trouvé ce post sur MS-Connect concernant les redirections sous PS.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- PULVERAIL
- Auteur du sujet
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 36
- Remerciements reçus 0
il y a 16 ans 7 mois #5060
par PULVERAIL
Réponse de PULVERAIL sur le sujet Re:manipulation de fichiers
@Laurent
Merci beaucoup pour ta solution. Ça marche impeccable!! Par contre je n'ai pas compris à quoi sert le -F... :-/
@tonic8
J'ai beau essayé ton bout de code... Il me sort bien une erreur certes, mais le fichier n'est pas du tout complet à la fin... Étrange histoire! ^^
En tout cas, merci beaucoup à vous deux pour votre précieuse aide.
Merci beaucoup pour ta solution. Ça marche impeccable!! Par contre je n'ai pas compris à quoi sert le -F... :-/
@tonic8
J'ai beau essayé ton bout de code... Il me sort bien une erreur certes, mais le fichier n'est pas du tout complet à la fin... Étrange histoire! ^^
En tout cas, merci beaucoup à vous deux pour votre précieuse aide.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 16 ans 7 mois #5063
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:manipulation de fichiers
skeleton18 écrit:
[code:1]
$a=\"Test\"
\"{0} {1} {2}\" -F \"Z\",$a,10[/code:1]
La première partie \"{0} {1} {2}\" : définie tjr une chaîne avec n paramétres, ici 3 paramètres débutant à zéro.
La seconde partie -F : déclare l'opérateur de formatage de chaîne.
La troisiéme et derniére partie \"Z\",$a,10 : définie un tableau d'objet, chaque élément est converti en une chaîne.
Le nombre d'objets correspond au nombre déclaré dans la première partie.
On a donc la correspondance suivante :
PowerShell c'est \"assez\" facile, faut juste prendre le temps de l'apprendre.
skeleton18 écrit:
Par exemple dans l'explorateur, une fois rafraîchi l'affichage par \"F5\" après l'éxécution d'un des scripts :
-Avec le premier exemple, l'affichage de l'explorateur est mis à jour réguliérement, tous les 380 ko. L'accès au fichier créé ne provoque pas d'erreur d'accès dans PS.
-Avec le second exemple, l'affichage de l'explorateur n'est pas mis à jour réguliérement. L'accès au fichier créé provoque une erreur d'accès dans PS.
Une fois ceci dit il reste à déterminer le pourquoi d'un tel comportement, et là j'irais déjà voir le code source, par réflection, du cmdlet Out-File.
Puis poster sur Ms-Connect si je ne trouve pas d'explication.
Ensuite et seulement j'envisagerais de l'étrange dans un domaine, l'informatique, qui se veut celui de la raison.
Bien que l'étude du mana ne soit pas en soit déraisonnable
Il s'agit d'une opérateur de formatage, équivalent au [String].format(...).Par contre je n'ai pas compris à quoi sert le -F
[code:1]
$a=\"Test\"
\"{0} {1} {2}\" -F \"Z\",$a,10[/code:1]
La première partie \"{0} {1} {2}\" : définie tjr une chaîne avec n paramétres, ici 3 paramètres débutant à zéro.
La seconde partie -F : déclare l'opérateur de formatage de chaîne.
La troisiéme et derniére partie \"Z\",$a,10 : définie un tableau d'objet, chaque élément est converti en une chaîne.
Le nombre d'objets correspond au nombre déclaré dans la première partie.
On a donc la correspondance suivante :
Ensuite tu peux consulter les liens dans ma signature qui renvoient vers cette page où on trouve certains détails de cet opérateur.\"{0} {1} {2}\"
\"Z\",$a.ToString(),10.ToString()
#{0}=\"Z\" # \"z\" est une string, pas besoin de conversion
#{1}=$a # $a est une variable on passe par une conversion (elle peut être redéfinie).
#{2}=10 # 10 est une entier on passe par une conversion standard.
PowerShell c'est \"assez\" facile, faut juste prendre le temps de l'apprendre.
skeleton18 écrit:
Si vous nous donnez un script complet et les actions effectuées on peut, je pense, supprimer cette \"étrangeté\".Étrange histoire! ^^
Par exemple dans l'explorateur, une fois rafraîchi l'affichage par \"F5\" après l'éxécution d'un des scripts :
-Avec le premier exemple, l'affichage de l'explorateur est mis à jour réguliérement, tous les 380 ko. L'accès au fichier créé ne provoque pas d'erreur d'accès dans PS.
-Avec le second exemple, l'affichage de l'explorateur n'est pas mis à jour réguliérement. L'accès au fichier créé provoque une erreur d'accès dans PS.
Une fois ceci dit il reste à déterminer le pourquoi d'un tel comportement, et là j'irais déjà voir le code source, par réflection, du cmdlet Out-File.
Puis poster sur Ms-Connect si je ne trouve pas d'explication.
Ensuite et seulement j'envisagerais de l'étrange dans un domaine, l'informatique, qui se veut celui de la raison.
Bien que l'étude du mana ne soit pas en soit déraisonnable
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.075 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu] manipulation de fichiers