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

Découper un fichier texte

5 réponses
Avatar
RENAUD Eric
Bonjour,
J'ai un fichier texte extrait de SAP avec des enregistrements séparés par le
signe |
Suivant le critère retenu pour l'extraction, je n'ai plus le même nombre
pour certains champs.
Pour pouvoir récupérer les données de chaque enregistrement quelque soit le
cas de figure, je
pensais déterminer la position de chaque | (pipe):
Pip1=2
Pip2=10
Pip3=20
Pip4=35

Comme ça je pourrais récupérer chaque string comprise entre deux | (pipes)
Enreg1=Entre 3 et 9
Enreg2=Entre 11 et 19
Enreg3=Entre 21 et 34

Comment pourrais-je faire cela de manière relativement simple ?

D'avance merci

5 réponses

Avatar
Aski
Salutatoi RENAUD Eric,

Tu as donc déclaré :

Bonjour,
J'ai un fichier texte extrait de SAP avec des enregistrements séparés
par le signe |
Suivant le critère retenu pour l'extraction, je n'ai plus le même
nombre pour certains champs.
Pour pouvoir récupérer les données de chaque enregistrement quelque
soit le cas de figure, je
pensais déterminer la position de chaque | (pipe):
Pip1=2
Pip2
Pip3
Pip45

Comme ça je pourrais récupérer chaque string comprise entre deux |
(pipes) Enreg1=Entre 3 et 9
Enreg2=Entre 11 et 19
Enreg3=Entre 21 et 34

Comment pourrais-je faire cela de manière relativement simple ?

D'avance merci



Une solution , mais il y en a d'autres.
Tu utilises la fonction :
m=IntStr(n,TaChaîne, "|") avec n=1 pour déterminer la première position,
puis tu affectes m+1 à n pour connaître la position suivante.
Ensuite, tu extrais avec :
Mid$(TaChaîne, i1, i2)
--
Aski
Avatar
scraper
Bonjour Aski, dans le message
news:
tu disais :

Une solution , mais il y en a d'autres.
Tu utilises la fonction :
m=IntStr(n,TaChaîne, "|") avec n=1 pour déterminer la première
position, puis tu affectes m+1 à n pour connaître la position
suivante. Ensuite, tu extrais avec :
Mid$(TaChaîne, i1, i2)



et un bon vieux split ?

Dim tbl() as String, i as Byte

tbl=Split(taChaîne,"|")
For i=0 to UBound(tbl)
MsgBox Trim$(tbl(i))
Next



ou si j'ai pas compris ?

amicalement


--

Adresse invalide
Merci de répondre sur le forum ...
http://scraper.chez-alice.fr

scraper
Avatar
Aski
Salutatoi scraper,

Tu as donc déclaré :

Bonjour Aski, dans le message
news:
tu disais :

Une solution , mais il y en a d'autres.
Tu utilises la fonction :
m=IntStr(n,TaChaîne, "|") avec n=1 pour déterminer la première
position, puis tu affectes m+1 à n pour connaître la position
suivante. Ensuite, tu extrais avec :
Mid$(TaChaîne, i1, i2)



et un bon vieux split ?

Dim tbl() as String, i as Byte

tbl=Split(taChaîne,"|")
For i=0 to UBound(tbl)
MsgBox Trim$(tbl(i))
Next



Oui. C'est l'autre solution que j'attendais. ;-)
Je pinaille mais pourquoi un Trim ? Les espaces peuvent avoir une
signification.
Avatar
RENAUD Eric
Suite à l'aide apportée avec les réponses de ce fil, voici le programme
final qui pourra servir à d'autres
Sub ExtractionChaine()
Dim tbl() As String, i As Byte
MyChemin = "C:ExcelSAP-BD320"
Kill MyChemin & "2006XXXX-DFI-Articles_ZMATX.txt"
On Error GoTo 0
Open MyChemin & "2006XXXX-DFI-Articles_ZMATX.txt" For Append As #2
Open MyChemin & "2006XXXX-DFI-Articles_ZMAT.txt" For Input As #1
Do While Not EOF(1)
' Lit les données de la ligne
Line Input #1, Donnees
tbl = Split(Donnees, "|")
For i = 1 To UBound(tbl)
If i = 1 Then
MaLigne = tbl(i)
Else
MaLigne = MaLigne & ";" & tbl(i)
End If
Next
Print #2, MaLigne
Loop
Close #2
Close #1
End Sub


"Aski" a écrit dans le message de
news:
Salutatoi RENAUD Eric,

Tu as donc déclaré :

> Bonjour,
> J'ai un fichier texte extrait de SAP avec des enregistrements séparés
> par le signe |
> Suivant le critère retenu pour l'extraction, je n'ai plus le même
> nombre pour certains champs.
> Pour pouvoir récupérer les données de chaque enregistrement quelque
> soit le cas de figure, je
> pensais déterminer la position de chaque | (pipe):
> Pip1=2
> Pip2
> Pip3
> Pip45
>
> Comme ça je pourrais récupérer chaque string comprise entre deux |
> (pipes) Enreg1=Entre 3 et 9
> Enreg2=Entre 11 et 19
> Enreg3=Entre 21 et 34
>
> Comment pourrais-je faire cela de manière relativement simple ?
>
> D'avance merci

Une solution , mais il y en a d'autres.
Tu utilises la fonction :
m=IntStr(n,TaChaîne, "|") avec n=1 pour déterminer la première position,
puis tu affectes m+1 à n pour connaître la position suivante.
Ensuite, tu extrais avec :
Mid$(TaChaîne, i1, i2)
--
Aski




Avatar
jt
"RENAUD Eric" <erenaud(retirerceci)@fr.fm> a écrit dans le message de news:

Suite à l'aide apportée avec les réponses de ce fil, voici le programme
final qui pourra servir à d'autres
Sub ExtractionChaine()
Dim tbl() As String, i As Byte
MyChemin = "C:ExcelSAP-BD320"
Kill MyChemin & "2006XXXX-DFI-Articles_ZMATX.txt"
On Error GoTo 0
Open MyChemin & "2006XXXX-DFI-Articles_ZMATX.txt" For Append As #2
Open MyChemin & "2006XXXX-DFI-Articles_ZMAT.txt" For Input As #1
Do While Not EOF(1)
' Lit les données de la ligne
Line Input #1, Donnees





et pourquoi pas tout simplement
maligne=replace(donnees,"|",";")


tbl = Split(Donnees, "|")
For i = 1 To UBound(tbl)
If i = 1 Then
MaLigne = tbl(i)
Else
MaLigne = MaLigne & ";" & tbl(i)
End If
Next
Print #2, MaLigne
Loop
Close #2
Close #1
End Sub


"Aski" a écrit dans le message de
news:
Salutatoi RENAUD Eric,

Tu as donc déclaré :

> Bonjour,
> J'ai un fichier texte extrait de SAP avec des enregistrements séparés
> par le signe |
> Suivant le critère retenu pour l'extraction, je n'ai plus le même
> nombre pour certains champs.
> Pour pouvoir récupérer les données de chaque enregistrement quelque
> soit le cas de figure, je
> pensais déterminer la position de chaque | (pipe):
> Pip1=2
> Pip2
> Pip3
> Pip45
>
> Comme ça je pourrais récupérer chaque string comprise entre deux |
> (pipes) Enreg1=Entre 3 et 9
> Enreg2=Entre 11 et 19
> Enreg3=Entre 21 et 34
>
> Comment pourrais-je faire cela de manière relativement simple ?
>
> D'avance merci

Une solution , mais il y en a d'autres.
Tu utilises la fonction :
m=IntStr(n,TaChaîne, "|") avec n=1 pour déterminer la première position,
puis tu affectes m+1 à n pour connaître la position suivante.
Ensuite, tu extrais avec :
Mid$(TaChaîne, i1, i2)
--
Aski