Question
[Résolu] Suppression linefeed et espace
- VH
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 6
- Remerciements reçus 0
il y a 8 ans 5 mois #24331
par VH
[Résolu] Suppression linefeed et espace a été créé 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 :
...ce que j'obtiens :
...et ce que je voudrais :
Est-ce que quelqu'un à une idée ?
Je vous remercie par avance !<br><br>Message édité par: Arnaud, à: 2/10/17 09:36
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.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 8 ans 5 mois #24332
par Arnaud Petitjean
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 ?
Réponse de Arnaud Petitjean sur le sujet Re:suppression linefeed et espace non souhaité.
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 \"accent grave\" (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 \"`r`n\", ''
[/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
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 \"accent grave\" (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 \"`r`n\", ''
[/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.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 8 ans 5 mois #24333
par Philippe
Réponse de Philippe sur le sujet Re:suppression linefeed et espace non souhaité.
salut Arnaud
salut Vingt100
pour que ça fonctionne, je ferais un petit rajout sur le get-content
pour que les CR, LF \"apparaisse\" dans la variable il faut rajouter l'option -raw
et ainsi les faire disparaître !!
par contre le -ReadCount me semble inutile sauf utilisation non indiquer !
[code:1]$DIR = \"C:\monrepertoire\"
$files = get-childitem $DIR\*.* -include *.csv
foreach ($File in $Files) {
$s = Get-Content $File -Raw
$s = $s -replace \"`n`r|`r|`n\", \"\"
Set-Content $File -Value $s
}
[/code:1]<br><br>Message édité par: 6ratgus, à: 28/09/17 18:02
salut Vingt100
pour que ça fonctionne, je ferais un petit rajout sur le get-content
pour que les CR, LF \"apparaisse\" dans la variable il faut rajouter l'option -raw
et ainsi les faire disparaître !!
par contre le -ReadCount me semble inutile sauf utilisation non indiquer !
[code:1]$DIR = \"C:\monrepertoire\"
$files = get-childitem $DIR\*.* -include *.csv
foreach ($File in $Files) {
$s = Get-Content $File -Raw
$s = $s -replace \"`n`r|`r|`n\", \"\"
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.
- VH
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 6
- Remerciements reçus 0
il y a 8 ans 5 mois #24336
par VH
Réponse de VH sur le sujet Re:suppression linefeed et espace non souhaité.
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
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.
- VH
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 6
- Remerciements reçus 0
il y a 8 ans 5 mois #24337
par VH
Réponse de VH sur le sujet Re:suppression linefeed et espace non souhaité.
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.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 8 ans 5 mois #24338
par Philippe
Réponse de Philippe sur le sujet Re:suppression linefeed et espace non souhaité.
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 = \"C:\monrepertoire\"
$files = get-childitem $DIR\*.* -include *.csv
foreach ($File in $Files) {
$s = Get-Content $File -Raw
$s = $s -replace \"`r`n\", \"\"
$s = $s -replace \"`n\", \"\"
$s = $s -replace \"`r\", \"\"
Set-Content $File -Value $s
}[/code:1]
par contre il faut bien le raw
la version modifier pour géré tous les cas !! :
[code:1]$DIR = \"C:\monrepertoire\"
$files = get-childitem $DIR\*.* -include *.csv
foreach ($File in $Files) {
$s = Get-Content $File -Raw
$s = $s -replace \"`r`n\", \"\"
$s = $s -replace \"`n\", \"\"
$s = $s -replace \"`r\", \"\"
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.041 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu] Suppression linefeed et espace