Question Suppression du \"CR\" \"LF\" à la fin d'un fichier

Plus d'informations
il y a 14 ans 4 mois #10548 par arnau
Bonjour à tous,

Tout d'abord je vous remercie pour ce super forum qui m'a toujours été très utile pour faire tous mes scripts powershell et qui me fait découvrir tous les jours de nouvelles fonctionnalités bien intéressantes à exploiter.:)

Malgré une certaine autonomie gagnée grâce à ce site, je bute actuellement sur un problème qui commence sérieusement à me ronger. C'est pourquoi j'aurais besoin de votre aide (en sachant pertinemment que d'autres sont ou seront intéressés):

J'ai un fichier texte (enfin csv mais je le traite comme du texte au niveau de mon script) qui est généré par mon script. A partir de ce fichier je dois en généré un nouveau qui aura un nom different, un emplacement different, la première ligne dégagée et je dois faire sauter le dernier CR LF rajouter par le format texte si on peut dire . Et c'est sur ce dernier point que je bute, pour l'instant j'ai :

[code:1]Get-Content \".\test.csv\" | select-string . | where {$_.linenumber -ne 1} | set-content \".\folder\test2.csv\"[/code:1]

Seulement à la fin du fichier généré il a fait comme un retour chariot nouvelle ligne que j'aimerais ne pas avoir. (Je dis \"il a fait comme\" car quand on utilise le measure-object -Line il ne voit pas cette fameuse nouvelle ligne)

J'ai essayé de rajouter [code:1] `b [/code:1] à la fin de mon fichier pour le supprimer mais il le fait avant de rajouter le CR LF donc inutile.

Si quelqu'un à une idée, ou besoin d'un complément d'infos, tenez moi au courant. :)

Merci d'avance

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

Plus d'informations
il y a 14 ans 4 mois #10553 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Suppression du
maar écrit:

Si quelqu'un à une idée, ou besoin d'un complément d'infos, tenez moi au courant. :)

Voir ce post .
Mais je n'ai pas de solution pour le moment

Tutoriels PowerShell

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

Plus d'informations
il y a 14 ans 4 mois #10559 par arnau
Réponse de arnau sur le sujet Re:Suppression du
D'accord merci.

Le post illustre bien le souci en effet, il montre bien qu'à la chaine est rajouté 0D (CR) et 0A (LF) et qu'avec une certaine manipulation il n'y sont plus.

Je vais voir si j'arrive à exploiter cette technique dans mon cas mais j'ai un doute : je veux faire sauter uniquement le dernier CRLF, pas tous les précédents.

Je me demandais si il y avait pas une technique pour ouvrir un fichier, déplacer le pointeur à la fin, faire un backspace et un save. (Peut être qu'une classe File a toute ces petites méthodes?)

:)

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

Plus d'informations
il y a 14 ans 4 mois #10560 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Suppression du
Tout comptes fait le post cité, soulève le pb, mais ne le résoud pas.
De suivre la piste de l'encodage n'est peut être pas le plus simple.
Donc après qq essais infructueux, je suis revenu à une solution plus classique.
Et cela faisait longtemps que je n'avais pas regretté un langage de bas niveau !
Bref, une ébauche de solution :
[code:1]
$file1=\"c:\temp\test.csv\"
$file2=\"c:\temp\test2.csv\"

@\"
un
deux
trois
\"@ > $File1

Remove-Item $File2 -force -EA SilentlyContinue

Copy-Item $file1 $file2
#from www.eggheadcafe.com/microsoft/Powershell...tent-appends-rn.aspx
$fs = [IO.File]::OpenWrite($File2)
$fs.setlength($fs.length-4)
$fs.close()
[/code:1]
La solution est tout simplement de traiter le fichier comme un tableau de bytes auquel on retranche le CRLF.
Comme tu le constatais :
maar écrit:

Je me demandais si il y avait pas une technique pour ouvrir un fichier, déplacer le pointeur à la fin, faire un backspace et un save.


Je parle d'une ébauche, car entre le post d'origine et celui-ci, la longueur à retrancher double.
Il est fort probable qu'il faille traiter le BOM
A suivre ;-)

PowerAcétyl -sali -cylique

Tutoriels PowerShell

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

Plus d'informations
il y a 14 ans 4 mois #10565 par arnau
Réponse de arnau sur le sujet Re:Suppression du
En effet, ta technique marche bien.

Pour la longueur à retrancher, c'est normal qu'elle soit de 4 dans ton exemple si tu le traites comme un tableau de bytes (octets) car CR LF = 0d 0a = 4 x 8bits ou 4 octets (ou bytes).

Cela fait drôle en effet de revenir au bas niveau mais la preuve que c'est toujours nécessaire de revenir à ça.

J'ai maintenant un fichier généré correctement, mais ce fichier sera appelé par la suite par un autre script, c'est là que je pourrais valider le fonctionnement à 100%. :)

Merci à toi en tout cas Laurent :)

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

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