Question
Récupérer texte avant un caractère
- DOS SANTOS
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 2
- Remerciements reçus 0
il y a 11 ans 8 mois #17723
par DOS SANTOS
Récupérer texte avant un caractère a été créé 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:
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 !
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 11 ans 8 mois #17724
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Récupérer texte avant un caractère
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]
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.
- DOS SANTOS
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 2
- Remerciements reçus 0
il y a 11 ans 8 mois #17725
par DOS SANTOS
Réponse de DOS SANTOS sur le sujet Re:Récupérer texte avant un caractère
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 !
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 11 ans 8 mois #17726
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Récupérer texte avant un caractère
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).
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.045 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Récupérer texte avant un caractère