Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Powershell] Jouer avec un fichier texte, partie 2

4 réponses
Avatar
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

4 réponses

Avatar
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?

Avatar
Jacques Barathon [MS]
"Polo" wrote in message
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

Avatar
Polo
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" a écrit dans le message de news:

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?





Avatar
Polo
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]" a écrit dans le
message de news: O%23l$
"Polo" wrote in message
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