Question probleme de lecture de fichier

Plus d'informations
il y a 16 ans 1 mois #6114 par Anthony T.
Bonjour,

Voilà, j'ai crée un nouveau fichier avec cette ligne :
[code:1]
new-item -Path \"C:\Users\Administrateur\Desktop\RC Script\temporaire.Txt\" –Itemtype file -force[/code:1]Ensuite j'essaie de lire avec la commande findstr une partie de ce document :
[code:1]
$test = findstr /C:\"(0%)\" \"C:\Users\Administrateur\Desktop\RC Script\Temporaire.txt\"[/code:1]

Je souhaite afficher sur l'écran la valeur que contient cette variable :
write-host \"$test\"

Celle ci est nulle dans ce cas.

Par contre si je crée le document Temporaire.txt à l'aide du clic droit -> nouveau -> document texte, et que je copie colle les informations contenus dans le fichier temporaire générer précédement.Quand j'utilise ma fonction de lecture findstr ... celle ci trouve la phrase contenant le (0%) et me l'affiche. avec le write-host \"$test\" .

Je ne comprend pas quel peut être la différence entre les deux modes de création de fichier? une explication ? pour palier ce problème. Merci d'avance et bon week end à vous<br><br>Message édité par: Arnaud, à: 7/02/10 00:30

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

Plus d'informations
il y a 16 ans 1 mois #6118 par Laurent Dardenne
insqnz écrit:

Je ne comprend pas quel peut être la différence entre les deux modes de création de fichier?

Peut être un pb d'encodage du fichier.
Utilise le cmdlet Select-String.

[code:1]
#Get-content -encoding
# Unknown, String, Unicode , Byte , BigEndianUnicode , UTF8 , UTF7 , Ascii
#http://www.vistax64.com/powershell/22574-reading-bom-text-files.html

function Get-Encoding ([string] $path,
[switch] $displayKnownBoms)
{
begin
{
$KnownEncodings=@{
\&quot;EFBBBF\&quot; =\&quot;Utf8\&quot;;
\&quot;FEFF\&quot; =\&quot;UTF-16 Big Endian\&quot;;
\&quot;FFFE\&quot; =\&quot;UTF-16 Little Endian\&quot;;
\&quot;0000FEFF\&quot; =\&quot;UTF-32 Big Endian\&quot;;
\&quot;FFFE0000\&quot; =\&quot;UTF-32 Little Endian\&quot;;
\&quot;0EFEFF\&quot; =\&quot;SCSU\&quot;;
\&quot;DD736673\&quot; =\&quot;UTF-EBCDIC\&quot;;
\&quot;FBEE28\&quot; =\&quot;BOCU-1\&quot;;
\&quot;2B2F76382D\&quot;=\&quot;UTF-7\&quot;;
\&quot;2B2F7638\&quot; =\&quot;UTF-7\&quot;;
\&quot;2B2F7639\&quot; =\&quot;UTF-7\&quot;;
\&quot;2B2F762B\&quot; =\&quot;UTF-7\&quot;;
\&quot;2B2F762F\&quot; =\&quot;UTF-7\&quot;;
}

function ShowKnownBoms()
{
\&quot;\&quot;
\&quot;Known Byte Order Marks\&quot;
\&quot;
\&quot;
$KnownEncodings.GetEnumerator() | Select
@{Name=\&quot;Encoding\&quot;;Expr={$_.Value}},
@{Name=\&quot;Representation\&quot;;Expr={$_.Name}} | Sort Encoding
}

function ProcessFile([string] $fileToProcess)
{
$fileToProcess=Resolve-Path $fileToProcess

if(!(Test-Path $fileToProcess -pathType Leaf)) {return}

$bom=Get-Content -totalCount 5 -path $fileToProcess -encoding Byte | %{ \&quot;{0:«»X2}\&quot; -f $_ }

if(!$bom){return}

$bom=[String]::Join(\&quot;\&quot;, $bom)

$result=1 | Select Encoding, Representation, Path

$result.Path=$fileToProcess

foreach($knownBom in $KnownEncodings.Keys)
{
if($bom.StartsWith($knownBom))
{
$result.Representation=$knownBom
$result.Encoding=$KnownEncodings[$knownBom]

return $result
}
}

$result.Representation=$bom
$result.Encoding=\&quot;Unknown Byte Order Mark\&quot;

return $result
}
}

process
{
if($_)
{
if($_ -is [System.IO.FileInfo])
{
ProcessFile($_.FullName)
}
else
{
ProcessFile($_)
}
}
}

end
{
if($path)
{
ProcessFile($path)
}
if($displayKnownBoms)
{
ShowKnownBoms
}
}
}
[/code:1]

Tutoriels PowerShell

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

Plus d'informations
il y a 16 ans 1 mois #6123 par Arnaud Petitjean
Hello !

Pour ma part je n'arrive pas à récuperer une seule valeur avec FindStr. Je te recommande plutot d'utiliser la commande native Select-String et là tout fonctionne, et ce quel que soit l'encodage.

Ceci étant dit, je n'ai pas remarqué de problème d'encodage lors de la création des fichiers. Que ce soit de l'une ou l'autre manière, dans les 2 cas les l'encodage des fichiers est ANSI. Une façon simple de le savoir est d'ouvrir le fichier texte dans le Notepad et de faire \&quot;Enregistrer Sous...\&quot;, et tout en bas de la fenetre tu trouveras le type d'encodage du fichier.

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 ?

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

Plus d'informations
il y a 16 ans 1 mois #6127 par Anthony T.
Parfait la méthode Select-string marche !! merci beaucoup !

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

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