[Powershell] Jouer avec un fichier texte, partie 2

Le
Polo
Bonjour Jacques, bonjour à tous,

Nouvelle petite question pour prolonger mon post précedent.
(Merci encore pour la soluce, les techniques me conviennent parfaitement !)

Je requete un nouveau fichier txt qui contient plein de lignes.

Je cherche la valeur "sous-total".
A chaque fois que je trouve cette valeur, je souhaite remonter les 6
derniers caractères des 2 lignes en dessous

Ex: (je me torture pour cet exemple)


Sous Total = 1300,5?
car j'achete 2 vaches à 1300 ?
car j'achete des carottes à 0,5?
Sous Total = 50 ?
car j'achete des cigarettes a 5?
car j'achete des CD pour 45?



J'obtiendrais alors en résultat
1300,5
1300
0,5
50
5
45

Merci pour le coup de main !

Polo
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
jbongran
Le #695715
Polo wrote:
Bonjour Jacques, bonjour à tous,

Nouvelle petite question pour prolonger mon post précedent....
(Merci encore pour la soluce, les techniques me conviennent
parfaitement !)
Je requete un nouveau fichier txt qui contient plein de lignes.

Je cherche la valeur "sous-total".
A chaque fois que je trouve cette valeur, je souhaite remonter les 6
derniers caractères des 2 lignes en dessous...

Ex: (je me torture pour cet exemple)
...
...
Sous Total = 1300,5?
car j'achete 2 vaches à 1300 ?
car j'achete des carottes à 0,5?
Sous Total = 50 ?
car j'achete des cigarettes a 5?
car j'achete des CD pour 45?
...
...

J'obtiendrais alors en résultat
1300,5
1300
0,5
50
5
45

Merci pour le coup de main !

Polo


Bien que demandé en PowerShell, voici une réponse possible en vbs:
Dim fso, fIn, fOut, sLine, arrTmp, sOutLine, i
Set fso = CreateObject("Scripting.FileSystemObject")
Set fIn = fso.OpenTextFile("D:testfile.txt", 1, False)
Set fOut = fso.OpenTextFile("D:resultfile.txt", 2, True)
Do Until fIn.AtEndOfStream
sLine = LCase(Trim(fIn.ReadLine))
If InStr(sLine, "sous total") Then
arrTmp = Split(sLine, " = ")
fOut.WriteLine Trim(arrTmp(1))
For i = 0 To 1
fOut.WriteLine Right(Trim(fIn.ReadLine), 6)
Next
End If
Loop
fIn.Close
fOut.Close
Set fIn = Nothing
Set fOut = Nothing

A noter que ce script correspond à l'énnoncé du besoin, et donc ne
correspond pas à l'exemple demandé (6 caractères des deux lignes
suivantes;-) et le fichier de sortie ressemblera à ça:
1300,5?
1300 ?
à 0,5?
50 ?
s a 5?
ur 45?

Jacques Barathon [MS]
Le #695713
"Polo" news:
Bonjour Jacques, bonjour à tous,

Nouvelle petite question pour prolonger mon post précedent....
(Merci encore pour la soluce, les techniques me conviennent parfaitement
!)

Je requete un nouveau fichier txt qui contient plein de lignes.

Je cherche la valeur "sous-total".
A chaque fois que je trouve cette valeur, je souhaite remonter les 6
derniers caractères des 2 lignes en dessous...


Voici une réponse qui ne correspond pas tout à fait à la description de ton
besoin:

$comptes = get-content fichier.txt
for ($i=0; $i -lt $comptes.length; $i++) {
if ($comptes[$i] -match "Sous Total") {
$comptes[$i].split("=")[1].Trim()
$comptes[$i+1].Split()[-1]
$comptes[$i+2].Split()[-1]
}
}

Ce que fait l'exemple ci-dessus, c'est afficher le dernier "mot" des deux
lignes qui suivent celle qui contient "sous total": sur les deux lignes en
question, j'affiche ce qui se trouve après le dernier espace. Tu peux
modifier cette partie pour appliquer la logique d'affichage que tu veux.

Jacques

Polo
Le #695710
Bonsoir...
et merci...
Je me demande pquoi j'ai mis tous ces "?"....
Un excès de généreusité peut-être...

Merci pour ce vbs... et a bientôt !

Polo



"jbongran"
Polo wrote:
Bonjour Jacques, bonjour à tous,

Nouvelle petite question pour prolonger mon post précedent....
(Merci encore pour la soluce, les techniques me conviennent
parfaitement !)
Je requete un nouveau fichier txt qui contient plein de lignes.

Je cherche la valeur "sous-total".
A chaque fois que je trouve cette valeur, je souhaite remonter les 6
derniers caractères des 2 lignes en dessous...

Ex: (je me torture pour cet exemple)
...
...
Sous Total = 1300,5?
car j'achete 2 vaches à 1300 ?
car j'achete des carottes à 0,5?
Sous Total = 50 ?
car j'achete des cigarettes a 5?
car j'achete des CD pour 45?
...
...

J'obtiendrais alors en résultat
1300,5
1300
0,5
50
5
45

Merci pour le coup de main !

Polo


Bien que demandé en PowerShell, voici une réponse possible en vbs:
Dim fso, fIn, fOut, sLine, arrTmp, sOutLine, i
Set fso = CreateObject("Scripting.FileSystemObject")
Set fIn = fso.OpenTextFile("D:testfile.txt", 1, False)
Set fOut = fso.OpenTextFile("D:resultfile.txt", 2, True)
Do Until fIn.AtEndOfStream
sLine = LCase(Trim(fIn.ReadLine))
If InStr(sLine, "sous total") Then
arrTmp = Split(sLine, " = ")
fOut.WriteLine Trim(arrTmp(1))
For i = 0 To 1
fOut.WriteLine Right(Trim(fIn.ReadLine), 6)
Next
End If
Loop
fIn.Close
fOut.Close
Set fIn = Nothing
Set fOut = Nothing

A noter que ce script correspond à l'énnoncé du besoin, et donc ne
correspond pas à l'exemple demandé (6 caractères des deux lignes
suivantes;-) et le fichier de sortie ressemblera à ça:
1300,5?
1300 ?
à 0,5?
50 ?
s a 5?
ur 45?





Polo
Le #695709
Bonsoir Jacques,

Merci pour cette méthode...
Comme d'hab, il va me falloir quelques jours pour digérer tout cela...!

A bientôt,

Polo


"Jacques Barathon [MS]" message de news: O%23l$
"Polo" news:
Bonjour Jacques, bonjour à tous,

Nouvelle petite question pour prolonger mon post précedent....
(Merci encore pour la soluce, les techniques me conviennent parfaitement
!)

Je requete un nouveau fichier txt qui contient plein de lignes.

Je cherche la valeur "sous-total".
A chaque fois que je trouve cette valeur, je souhaite remonter les 6
derniers caractères des 2 lignes en dessous...


Voici une réponse qui ne correspond pas tout à fait à la description de
ton besoin:

$comptes = get-content fichier.txt
for ($i=0; $i -lt $comptes.length; $i++) {
if ($comptes[$i] -match "Sous Total") {
$comptes[$i].split("=")[1].Trim()
$comptes[$i+1].Split()[-1]
$comptes[$i+2].Split()[-1]
}
}

Ce que fait l'exemple ci-dessus, c'est afficher le dernier "mot" des deux
lignes qui suivent celle qui contient "sous total": sur les deux lignes en
question, j'affiche ce qui se trouve après le dernier espace. Tu peux
modifier cette partie pour appliquer la logique d'affichage que tu veux.

Jacques



Publicité
Poster une réponse
Anonyme