Question Récupérer texte avant un caractère

Plus d'informations
il y a 11 ans 8 mois #17723 par DOS SANTOS
[code:1][/code:1]Bonjour,

Je m'explique, j'ai un fichier .txt et je dois extraire chaque données pour ensuite créer un fichier excel et mettre dans chaque case la donnée récupéré (oui c'est un peu flou dit comme ça)

Petit exemple:
J'ai donc un fichier .txt qui se présente comme ceci:

DOC|CHC|||Ensemble composé : Larg 2500 mm x Haut 1000 mm|Ensemble composé : Larg 2500 mm x Haut 1000 mm|Larg 2500 mm x Haut 1000 mm|Larg 2500 mm x Haut 1000 mm|Haut|1000|1000|mm|Larg|2500|2500|mm||||||||||||||||||||||||||||||||||||||||||


Ensuite je créer mon fichier excel et une case doit comporter ce qu'il y a d'écrit avant chaque délimiteurs (\"|\")

Ce que je n'arrive pas à faire, c'est récupérer ces valeurs dans une variable pour ensuite l'écrire dans le fichier excel.

En gros:

Lire jusqu'à \"|\"
Stoker dans une variable tout ce qu'il y a avant \"|\"

tant que la cellule excel sélectionnée est pleine alors:
-Sélectionner cellule suivant
Fin tant que

Ecrire le contenu de la variable
Ensuite supprimer dans le fichier .txt tout le texte avec le caractère \"|\" compris


Merci de votre aide !

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

Plus d'informations
il y a 11 ans 8 mois #17724 par Laurent Dardenne
Salut,
essaie avec l'opérateur -Split :
[code:1]
$file='c:\temp\datas.txt'
@'
DOC|CHC|||Ensemble composé : Larg 2500 mm x Haut 1000 mm|Ensemble composé : Larg 2500 mm x Haut 1000 mm|Larg 2500 mm x Haut 1000 mm|Larg 2500 mm x Haut 1000 mm|Haut|1000|1000|mm|Larg|2500|2500|mm||||||||||||||||||||||||||||||||||||||||||
'@ > $file

gc $file|
Foreach {
Write-host \"before : \"
$_
Write-host \"after :\"
$Values=$_ -Split '\|'
$Values
}
[/code:1]
Si la première ligne de ton fichier contient le nom des champs, essaie ceci :
[code:1]
$Values=Import-Csv -Path $File -Delimiter '|'
[/code:1]

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 8 mois #17725 par DOS SANTOS
Salut !

Merci pour ta réponse rapide

Dans l'idée avec -Split c'est ça, mais en pratique c'est différent, je vais illustrer mes propos avec quelques images.

Mon document texte contient, sur la première ligne des informations personnelle. NomClient, PrenomClient, NumeroTelClient, AdresseClient, etc.

Tous ces champs sont délimité par \"|\" et je dois tous les avoir dans une cellule différente.

Avec le code :

[code:1][Threading.Thread]::CurrentThread.CurrentCulture = 'en-US'
$excel = New-Object -ComObject \"Excel.Application\"
$excel.visible = $true
$WorkBook = $excel.Workbooks.Add()
$WorkSheet = $WorkBook.WorkSheets.Add()
$WorkSheet.Name = \"Test\"


$file='c:\temp\datas.txt'
@'
DOC|CHC|||Ensemble composé : Larg 2500 mm x Haut 1000 mm|Ensemble composé : Larg 2500 mm x Haut
1000 mm|Larg 2500 mm x Haut 1000 mm|Larg 2500 mm x Haut 1000
mm|Haut|1000|1000|mm|Larg|2500|2500|mm||||||||||||||||||||||||||||||||||||||||||
'@ > $file

$i = 0

gc $file|
Foreach {
$i = $i + 1
Write-host \"Avant : \"
$_
Write-host \"Après : \"
$Values=$_ -Split '\|'
$Values
$WorkSheet.Cells.Item(4,$i) = $Values
}
[/code:1]

Mon fichier excel me retourne seulement dans les trois case différents donc A4,B4,C4 \"DOC\",\"1000 mm\",\"mm\"

C'est seulement le premier terme avant le premier délimiteur de chaque ligne.

Il faudrait que le retour à la ligne de -Split à chaque lignes se fasse dans Excel

Merci de ton aide ! :)

Pièces jointes :

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

Plus d'informations
il y a 11 ans 8 mois #17726 par Laurent Dardenne
Sous Powershell il faut privilégier la création d'objets cela facilite les transformations de format.
Dans ton cas essaie d'abord de créer un fichier CSV.
Que contient la première ligne de ton/tes fichiers ?
Dans le code proposé, $Values est un tableau de chaînes, utilise ceci pour le parcourir :
[code:1]
$WorkSheet.Cells.Item(4,$i) = $Values[$i]
[/code:1]
Tu as donc 2 itérations, une première sur chaque ligne du fichier et une seconde imbriqués sur le tableau $Values (la ligne transformée).

Tutoriels PowerShell

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

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