Question [Résolu] Suppression linefeed et espace

Plus d'informations
il y a 8 ans 5 mois #24331 par VH
Bonjour à tous,

C'est la première fois que je pose une question sur ce site donc avant tout merci beaucoup pour ce que vous faites !

Voilà mon problème: je dois traiter tous les csv d'un répertoire en enlevant les linefeed quand il y en a (le but étant d'avoir mes fichiers sur une seule ligne).

J'ai bricolé le code suivant au fil de mes recherches (une bonne partie vient d'ailleurs de ce forum) :

[code:1]
$DIR=\"C:\monrepertoire\"
$files = get-childitem $DIR\*.* -include *.csv
foreach ($File in $Files) {
[string]$s=Get-Content $File -ReadCount 0
$s -replace '(\n|\r|\r\n)A\|', ''
Set-Content $File -Value $s
}
[/code:1]

Mon script fonctionne mais insère un espace au regroupement des deux lignes...je voudrais qu'il n'y ai pas cet espace.

Voilà ce que j'ai au début :

aaa
bbb


...ce que j'obtiens :

aaa bbb


...et ce que je voudrais :

aaabbb




Est-ce que quelqu'un à une idée ?

Je vous remercie par avance !<br><br>Message édité par: Arnaud, à: 2/10/17 09:36

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

Plus d'informations
il y a 8 ans 5 mois #24332 par Arnaud Petitjean
Bonjour Vincent,

Tout d'abord je te souhaite la bienvenue dans le forum :).

Sache qu'en PowerShell l'accès aux caractères de contrôle de type CR, LF ou autres se fait via le caractère \&quot;accent grave\&quot; (on l'appelle aussi le backtick). Et il faut placer ce code contrôle dans une chaine de caractère entre double guillemets, comme ci-après si je reprends ton code :

[code:1]
$s = $s -replace \&quot;`r`n\&quot;, ''
[/code:1]

Par ailleurs l'opérateur -replace ne modifie pas ta chaine d'origine mais te retourne une chaine modifiée. Il te faut donc réaffecter le résultat dans ta variable si tu veux ensuite l'exporter sur disque.

Bon, ceci est une chose, mais je suis surpris par ta démarche de vouloir mettre toutes tes données sur une seule ligne. C'est quoi l'objectif ?
Le plus simple serait quand même d'importer ton fichier CSV en mémoire (grâce à la commande Import-CSV) puis de ressortir les données dans le format désiré.

Un exemple de ton fichier serait le bienvenu pour que nous puissions d'aider davantage.

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 8 ans 5 mois #24333 par Philippe
salut Arnaud
salut Vingt100

pour que ça fonctionne, je ferais un petit rajout sur le get-content
pour que les CR, LF \&quot;apparaisse\&quot; dans la variable il faut rajouter l'option -raw
et ainsi les faire disparaître !! :laugh:

par contre le -ReadCount me semble inutile sauf utilisation non indiquer !

[code:1]$DIR = \&quot;C:\monrepertoire\&quot;
$files = get-childitem $DIR\*.* -include *.csv
foreach ($File in $Files) {
$s = Get-Content $File -Raw
$s = $s -replace \&quot;`n`r|`r|`n\&quot;, \&quot;\&quot;
Set-Content $File -Value $s
}
[/code:1]<br><br>Message édité par: 6ratgus, à: 28/09/17 18:02

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

Plus d'informations
il y a 8 ans 5 mois #24336 par VH
Bonjour,

Merci Arnaud et 6ratgus d'avoir passé du temps sur mon sujet.

J'ai mis un exemple de fichier que j'ai à traiter.

Pour être un peu plus précis sur l'objet de ma demande voici le contexte. Nous avons un traitement qui génère des csv que nous devons ensuite importer dans notre ERP.

La plupart des fichiers ne pose aucun problème mais certains contiennent un linefeed qui fait planter l'import et qui doit donc être supprimé (à la mano pour le moment).


Arnaud, ton replace fonctionne bien mais donne malheureusement le même résultat que le mien...toujours cet espace !

6ratgus, effectivement mon readcount ne sert à rien ! Mais par contre le raw ne fonctionne pas.



Je vous remercie du temps déjà passé sur mon sujet.<br><br>Message édité par: Vingt100, à: 29/09/17 09:58
Pièces jointes :

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

Plus d'informations
il y a 8 ans 5 mois #24337 par VH
Avec le fichier c'est mieux !

La pièce jointe fichierExemple.txt est absente ou indisponible

Pièces jointes :

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

Plus d'informations
il y a 8 ans 5 mois #24338 par Philippe
ton fichier ne contient que LF pour le retour a la ligne
par contre il faut bien le raw

la version modifier pour géré tous les cas !! :

[code:1]$DIR = \&quot;C:\monrepertoire\&quot;
$files = get-childitem $DIR\*.* -include *.csv
foreach ($File in $Files) {
$s = Get-Content $File -Raw
$s = $s -replace \&quot;`r`n\&quot;, \&quot;\&quot;
$s = $s -replace \&quot;`n\&quot;, \&quot;\&quot;
$s = $s -replace \&quot;`r\&quot;, \&quot;\&quot;
Set-Content $File -Value $s
}[/code:1]

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

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