fichier texte

Le
JLuc
Salut le groupe,
Je dois retravailler un fichier texte de + de 65536 lignes :D
Mais je ne vois pas trop comment faire.
Dans le fichier d'origine, j'ai des coordonnées de point sous la forme
:

X-3.975Y0Z-4.709
X-3.975Z-6.709
X-3.805Z-7.01
X-3.623Z-7.288
X-3.422Z-7.554

je voudrais les transformer de cette façon :

-3.975,0,-4.709
-3.975,0,-6.709
-3.805,0,-7.01
-3.623,0,-7.288
-3.422,0,-7.554


En gros, coordonnée X, coordonnée Y, coordonnée Z

Si un axe était manquant, reprendre la valeur précédente de cet axe.

Donc :
- Lire le fichier d'origine ligne par ligne
- Recuperer les trois coordonnées
- Ecrire dans un autre fichier la ligne modifiée

Si vous pouviez avoir l'amabilité de m'aider à démarrer
D'avance, merci

--
JLuc
« Celui qui trouve sans chercher est celui qui a longtemps cherché
sans trouver. » - Gaston BACHELARD
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
JLuc
Le #19362671
J'ai déja trouvé comment lire chaque ligne du fichier.
Maintenant, le plus compliquer :
Peut on utiliser les epression regulieres en VBA ?

--
JLuc
« Celui qui trouve sans chercher est celui qui a longtemps cherché
sans trouver. » - Gaston BACHELARD
MichDenis
Le #19362661
Bonjour JLuc,

Dans cette séquence : X-3.422Z-7.554 de ton fichier
les éléments sont séparés par ????

La procédure suivante va copier tes données dans la
Feuil1 du classeur actif. De la ligne 1 à 65536
dans la colonne A à D. Si plus de 65536, une nouvelle
colonne débutera dans la même feuille en colonne F

Tu dois renseigner quelques variables :
A ) Nom Et Chemin de ton fichier texte
B ) "Sep" le séparateur d'éléments de ton fichier texte
C ) le nom de la feuille où seront copiées les données.

'---------------------------------------------------
Sub Importer_Fichier_Texte()

Dim A As Long, B As Integer, T As Variant
Dim Chemin_Fichier As String, Sep As String
Dim WholeLine As String, X As Long

Application.ScreenUpdating = False

'Chemin où ton fichier texte
Chemin_Fichier = "C:UsersDMDocumentstext.txt"

'Séparateur du fichier texte
Sep = "-" 'À ADAPTER

X = FreeFile

'Nom de la feuille de calcul où
'tu veux importer les données
B = 1
Application.ScreenUpdating = False
With Worksheets("Feuil1")
Open Chemin_Fichier For Input Access Read As #X
While Not EOF(X)
Line Input #X, WholeLine
T = Split(WholeLine, Sep)
A = A + 1
If A = 65536 Then B = 6: A = 0
.Cells(A, B).Resize(, UBound(T) + 1) = T
Wend
Close #X
End With
Application.ScreenUpdating = True
End Sub
'---------------------------------------------------



"JLuc" #LAtp$
Salut le groupe,
Je dois retravailler un fichier texte de + de 65536 lignes :D
Mais je ne vois pas trop comment faire.
Dans le fichier d'origine, j'ai des coordonnées de point sous la forme
:

X-3.975Y0Z-4.709
X-3.975Z-6.709
X-3.805Z-7.01
X-3.623Z-7.288
X-3.422Z-7.554
...
je voudrais les transformer de cette façon :

-3.975,0,-4.709
-3.975,0,-6.709
-3.805,0,-7.01
-3.623,0,-7.288
-3.422,0,-7.554
...

En gros, coordonnée X, coordonnée Y, coordonnée Z

Si un axe était manquant, reprendre la valeur précédente de cet axe.

Donc :
- Lire le fichier d'origine ligne par ligne
- Recuperer les trois coordonnées
- Ecrire dans un autre fichier la ligne modifiée

Si vous pouviez avoir l'amabilité de m'aider à démarrer...
D'avance, merci

--
JLuc
« Celui qui trouve sans chercher est celui qui a longtemps cherché
sans trouver. » - Gaston BACHELARD
JLuc
Le #19362911
Salut MichDenis,
Merci de te pencher sur mon problème.
Le soucis, c'est que je n'ai pas de séparateur et je n'ai pas toujours
tous les axes (X, Y, Z)
Il faut donc que je teste la ligne pour en extraire les données.
Rajouter l'axe manquant en reprenant la valeur précédente,...

Galère, hein ?

MichDenis a écrit :
Bonjour JLuc,

Dans cette séquence : X-3.422Z-7.554 de ton fichier
les éléments sont séparés par ????

La procédure suivante va copier tes données dans la
Feuil1 du classeur actif. De la ligne 1 à 65536
dans la colonne A à D. Si plus de 65536, une nouvelle
colonne débutera dans la même feuille en colonne F

Tu dois renseigner quelques variables :
A ) Nom Et Chemin de ton fichier texte
B ) "Sep" le séparateur d'éléments de ton fichier texte
C ) le nom de la feuille où seront copiées les données.

'---------------------------------------------------
Sub Importer_Fichier_Texte()

Dim A As Long, B As Integer, T As Variant
Dim Chemin_Fichier As String, Sep As String
Dim WholeLine As String, X As Long

Application.ScreenUpdating = False

'Chemin où ton fichier texte
Chemin_Fichier = "C:UsersDMDocumentstext.txt"

'Séparateur du fichier texte
Sep = "-" 'À ADAPTER

X = FreeFile

'Nom de la feuille de calcul où
'tu veux importer les données
B = 1
Application.ScreenUpdating = False
With Worksheets("Feuil1")
Open Chemin_Fichier For Input Access Read As #X
While Not EOF(X)
Line Input #X, WholeLine
T = Split(WholeLine, Sep)
A = A + 1
If A = 65536 Then B = 6: A = 0
.Cells(A, B).Resize(, UBound(T) + 1) = T
Wend
Close #X
End With
Application.ScreenUpdating = True
End Sub
'---------------------------------------------------



"JLuc" discussion : #LAtp$
Salut le groupe,
Je dois retravailler un fichier texte de + de 65536 lignes :D
Mais je ne vois pas trop comment faire.
Dans le fichier d'origine, j'ai des coordonnées de point sous la forme




X-3.975Y0Z-4.709
X-3.975Z-6.709
X-3.805Z-7.01
X-3.623Z-7.288
X-3.422Z-7.554
...
je voudrais les transformer de cette façon :

-3.975,0,-4.709
-3.975,0,-6.709
-3.805,0,-7.01
-3.623,0,-7.288
-3.422,0,-7.554
...

En gros, coordonnée X, coordonnée Y, coordonnée Z

Si un axe était manquant, reprendre la valeur précédente de cet axe.

Donc :
- Lire le fichier d'origine ligne par ligne
- Recuperer les trois coordonnées
- Ecrire dans un autre fichier la ligne modifiée

Si vous pouviez avoir l'amabilité de m'aider à démarrer...
D'avance, merci



--
JLuc
« Celui qui trouve sans chercher est celui qui a longtemps cherché
sans trouver. » - Gaston BACHELARD
MichDenis
Le #19362901
Si tu donnais un véritable exemple de ce que ton fichier texte contient :

X-3.422Z-7.554

Est-ce que ce caractère "-" est toujours présent
s'il te manque une donnée pour un axe, comment se présente la ligne ?
Si c'est l'axe des x ? Si l'information manquante est l'axe des Y ?

Tu dois relever à la main, les différentes possibilités que la procédure
peut rencontrer lors son exécution. Sinon, il est très difficile de proposer
quelque chose !

Si tu as plus de 65536 lignes où veux-tu l'excédent des lignes ?
sur la même feuille ? sur une nouvelle feuille ?



"JLuc" #fBB#Z#
Salut MichDenis,
Merci de te pencher sur mon problème.
Le soucis, c'est que je n'ai pas de séparateur et je n'ai pas toujours
tous les axes (X, Y, Z)
Il faut donc que je teste la ligne pour en extraire les données.
Rajouter l'axe manquant en reprenant la valeur précédente,...

Galère, hein ?

MichDenis a écrit :
Bonjour JLuc,

Dans cette séquence : X-3.422Z-7.554 de ton fichier
les éléments sont séparés par ????

La procédure suivante va copier tes données dans la
Feuil1 du classeur actif. De la ligne 1 à 65536
dans la colonne A à D. Si plus de 65536, une nouvelle
colonne débutera dans la même feuille en colonne F

Tu dois renseigner quelques variables :
A ) Nom Et Chemin de ton fichier texte
B ) "Sep" le séparateur d'éléments de ton fichier texte
C ) le nom de la feuille où seront copiées les données.

'---------------------------------------------------
Sub Importer_Fichier_Texte()

Dim A As Long, B As Integer, T As Variant
Dim Chemin_Fichier As String, Sep As String
Dim WholeLine As String, X As Long

Application.ScreenUpdating = False

'Chemin où ton fichier texte
Chemin_Fichier = "C:UsersDMDocumentstext.txt"

'Séparateur du fichier texte
Sep = "-" 'À ADAPTER

X = FreeFile

'Nom de la feuille de calcul où
'tu veux importer les données
B = 1
Application.ScreenUpdating = False
With Worksheets("Feuil1")
Open Chemin_Fichier For Input Access Read As #X
While Not EOF(X)
Line Input #X, WholeLine
T = Split(WholeLine, Sep)
A = A + 1
If A = 65536 Then B = 6: A = 0
.Cells(A, B).Resize(, UBound(T) + 1) = T
Wend
Close #X
End With
Application.ScreenUpdating = True
End Sub
'---------------------------------------------------



"JLuc" discussion : #LAtp$
Salut le groupe,
Je dois retravailler un fichier texte de + de 65536 lignes :D
Mais je ne vois pas trop comment faire.
Dans le fichier d'origine, j'ai des coordonnées de point sous la forme




X-3.975Y0Z-4.709
X-3.975Z-6.709
X-3.805Z-7.01
X-3.623Z-7.288
X-3.422Z-7.554
...
je voudrais les transformer de cette façon :

-3.975,0,-4.709
-3.975,0,-6.709
-3.805,0,-7.01
-3.623,0,-7.288
-3.422,0,-7.554
...

En gros, coordonnée X, coordonnée Y, coordonnée Z

Si un axe était manquant, reprendre la valeur précédente de cet axe.

Donc :
- Lire le fichier d'origine ligne par ligne
- Recuperer les trois coordonnées
- Ecrire dans un autre fichier la ligne modifiée

Si vous pouviez avoir l'amabilité de m'aider à démarrer...
D'avance, merci



--
JLuc
« Celui qui trouve sans chercher est celui qui a longtemps cherché
sans trouver. » - Gaston BACHELARD
JLuc
Le #19362971
MichDenis a écrit :
Si tu donnais un véritable exemple de ce que ton fichier texte contient :

X-3.422Z-7.554

Est-ce que ce caractère "-" est toujours présent


C'est le signe négatif, donc pas toujours présent


s'il te manque une donnée pour un axe, comment se présente la ligne ?
Si c'est l'axe des x ? Si l'information manquante est l'axe des Y ?


L'axe manquant peut être l'axe X, ou l'axe Y, ou l'axe Z. Donc il faut
que je teste leur présence et s'il n'y est pas, je reprends la valeur
précédente pour cet axe


Tu dois relever à la main, les différentes possibilités que la procédure
peut rencontrer lors son exécution. Sinon, il est très difficile de proposer
quelque chose !

Si tu as plus de 65536 lignes où veux-tu l'excédent des lignes ?
sur la même feuille ? sur une nouvelle feuille ?


J'ai 90975 lignes de point, je veux les tranformées et les réinjecter
dans un autre fichier

Quelques lignes prises au hazard : (dans le premier bloc, c'est moi qui
ai rajouté l'axe des Y)

X-.646Y0Z-9.286
X-.331Y0Z-9.348
X0Y0Z-9.39
X.543Y0Z-9.409
X1.085Y0Z-9.477
X1.444Y0Z-9.555
X1.804Y0Z-9.661
...
X-41.225Y-1.44Z-41.099
X-41.531Y-1.45Z-41.1
X-69.957Y-2.443
X-69.933Y-3.053
X-41.461Y-1.81
X-41.336Y-1.805Z-41.098
X-41.211Y-1.799Z-41.094
...
X-.584Y-66.872Z-40.891
X-.582Y-66.747Z-40.776
Y-66.701Z-40.722
Y-66.693Z-40.712
Y-66.685Z-33.086
Y-66.654Z-31.903
X-.581Y-66.622Z-31.198
Y-66.591Z-30.656
...




"JLuc" discussion : #fBB#Z#
Salut MichDenis,
Merci de te pencher sur mon problème.
Le soucis, c'est que je n'ai pas de séparateur et je n'ai pas toujours
tous les axes (X, Y, Z)
Il faut donc que je teste la ligne pour en extraire les données.
Rajouter l'axe manquant en reprenant la valeur précédente,...

Galère, hein ?

MichDenis a écrit :
Bonjour JLuc,

Dans cette séquence : X-3.422Z-7.554 de ton fichier
les éléments sont séparés par ????

La procédure suivante va copier tes données dans la
Feuil1 du classeur actif. De la ligne 1 à 65536
dans la colonne A à D. Si plus de 65536, une nouvelle
colonne débutera dans la même feuille en colonne F

Tu dois renseigner quelques variables :
A ) Nom Et Chemin de ton fichier texte
B ) "Sep" le séparateur d'éléments de ton fichier texte
C ) le nom de la feuille où seront copiées les données.

'---------------------------------------------------
Sub Importer_Fichier_Texte()

Dim A As Long, B As Integer, T As Variant
Dim Chemin_Fichier As String, Sep As String
Dim WholeLine As String, X As Long

Application.ScreenUpdating = False

'Chemin où ton fichier texte
Chemin_Fichier = "C:UsersDMDocumentstext.txt"

'Séparateur du fichier texte
Sep = "-" 'À ADAPTER

X = FreeFile

'Nom de la feuille de calcul où
'tu veux importer les données
B = 1
Application.ScreenUpdating = False
With Worksheets("Feuil1")
Open Chemin_Fichier For Input Access Read As #X
While Not EOF(X)
Line Input #X, WholeLine
T = Split(WholeLine, Sep)
A = A + 1
If A = 65536 Then B = 6: A = 0
.Cells(A, B).Resize(, UBound(T) + 1) = T
Wend
Close #X
End With
Application.ScreenUpdating = True
End Sub
'---------------------------------------------------



"JLuc" discussion : #LAtp$
Salut le groupe,
Je dois retravailler un fichier texte de + de 65536 lignes :D
Mais je ne vois pas trop comment faire.
Dans le fichier d'origine, j'ai des coordonnées de point sous la forme




X-3.975Y0Z-4.709
X-3.975Z-6.709
X-3.805Z-7.01
X-3.623Z-7.288
X-3.422Z-7.554
...
je voudrais les transformer de cette façon :

-3.975,0,-4.709
-3.975,0,-6.709
-3.805,0,-7.01
-3.623,0,-7.288
-3.422,0,-7.554
...

En gros, coordonnée X, coordonnée Y, coordonnée Z

Si un axe était manquant, reprendre la valeur précédente de cet axe.

Donc :
- Lire le fichier d'origine ligne par ligne
- Recuperer les trois coordonnées
- Ecrire dans un autre fichier la ligne modifiée

Si vous pouviez avoir l'amabilité de m'aider à démarrer...
D'avance, merci





--
JLuc
« Celui qui trouve sans chercher est celui qui a longtemps cherché
sans trouver. » - Gaston BACHELARD
Sam
Le #19363541
Bonjour, j'ai une solution qui semble marcher sans VBA
http://cjoint.com/?fsvRbNjPz8

Je fais confiance au pros deVBA pour éventuellement le traduire en VBA
Cordialement
Michel dit "Sam"

"JLuc" %23LAtp$
Salut le groupe,
Je dois retravailler un fichier texte de + de 65536 lignes :D
Mais je ne vois pas trop comment faire.
Dans le fichier d'origine, j'ai des coordonnées de point sous la forme :

X-3.975Y0Z-4.709
X-3.975Z-6.709
X-3.805Z-7.01
X-3.623Z-7.288
X-3.422Z-7.554
...
je voudrais les transformer de cette façon :

-3.975,0,-4.709
-3.975,0,-6.709
-3.805,0,-7.01
-3.623,0,-7.288
-3.422,0,-7.554
...

En gros, coordonnée X, coordonnée Y, coordonnée Z

Si un axe était manquant, reprendre la valeur précédente de cet axe.

Donc :
- Lire le fichier d'origine ligne par ligne
- Recuperer les trois coordonnées
- Ecrire dans un autre fichier la ligne modifiée

Si vous pouviez avoir l'amabilité de m'aider à démarrer...
D'avance, merci

--
JLuc
« Celui qui trouve sans chercher est celui qui a longtemps cherché sans
trouver. » - Gaston BACHELARD




JLuc
Le #19363841
Je pense tenir le bon bout, voici la macro que j'ai écrite (avec des
copier/coller à droite et à gauche) :

Sub Transforme()

Dim MyString

Dim reg As VBScript_RegExp_55.regexp
Dim Match As VBScript_RegExp_55.Match
Dim Matches As VBScript_RegExp_55.MatchCollection
Dim nligne
' instanciation
Set reg = New VBScript_RegExp_55.regexp

nligne = 1
reg.Pattern = "(X-?d*.?d*)?(Y-?d*.?d*)?(Z-?d*.?d*)?"
Open "C:UsersJeanLucDocumentsAncien PCExtrait.txt" For Input As #1
' Ouvre le fichier en lecture.
Do While Not EOF(1) ' Effectue la boucle jusqu'à la fin du fichier.
Input #1, MyString ' Lit une ligne.
Debug.Print "donnée : " & MyString
Set Matches = reg.Execute(MyString) ' Execute la regexp sur la
ligne lue
For Each Match In Matches
Debug.Print "source : ", Match.Value
For i = 0 To Match.SubMatches.Count - 1
Debug.Print "[$" & i + 1 & "]", Match.SubMatches(i)
Worksheets("Feuil1").Cells(nligne, i + 1) =
Match.SubMatches(i)
Next i
Next Match

' Affiche les données dans la fenêtre Exécution.
'
nligne = nligne + 1
Loop
Close #1 ' Ferme le fichier.
End Sub

Il reste encore à pauffiner, je m'y mets demain !
Bonne soirée

--
JLuc
« Celui qui trouve sans chercher est celui qui a longtemps cherché
sans trouver. » - Gaston BACHELARD
MichDenis
Le #19364221
Pour le plaisir ...

Si ça t'intéresse, 2 procédures :

Une pour lire le fichier texte
la deuxième pour remplir les cellules sans données.

Il reste le chemin et le nom du fichier à entrer
et le nom de la feuille où les données seront copiées.

L'excédent est copié dans les colonnes H:M
'----------------------------------------------------
Sub Importer_Fichier_Texte()

Dim A As Long, B As Integer
Dim Chemin_Fichier As String
Dim WholeLine As String, X As Long
Dim K(1 To 6), M(1 To 3)

Application.ScreenUpdating = False

'Chemin où ton fichier texte
Chemin_Fichier = "C:UsersDMDocumentstext.txt"

X = FreeFile

'Nom de la feuille de calcul où
'tu veux importer les données
B = 1
Application.ScreenUpdating = False
With Worksheets("Feuil1") 'Nom Feuille à adapter
Open Chemin_Fichier For Input Access Read As #X
While Not EOF(X)
Line Input #X, WholeLine
M(1) = InStr(1, WholeLine, "x", vbTextCompare)
M(2) = InStr(1, WholeLine, "y", vbTextCompare)
M(3) = InStr(1, WholeLine, "z", vbTextCompare)
If M(1) <> 0 And M(2) <> 0 And M(3) <> 0 Then
K(1) = "X"
K(2) = Mid(WholeLine, 2, M(2) - (M(1) + 1))
K(3) = "Y"
K(4) = Mid(WholeLine, M(2) + 1, M(3) - (M(2) + 1))
K(5) = "Z"
K(6) = Mid(WholeLine, M(3) + 1, 8)
ElseIf M(1) <> 0 And M(2) <> 0 And M(3) = 0 Then
K(1) = "X"
K(2) = Mid(WholeLine, 2, M(2) - (M(1) + 1))
K(3) = "Y"
K(4) = Mid(WholeLine, M(2) + 1, 8)
K(5) = "Z"
K(6) = ""
ElseIf M(1) <> 0 And M(2) = 0 And M(3) = 0 Then
K(1) = "X"
K(2) = Mid(WholeLine, 2, 8)
K(3) = "Y"
K(4) = ""
K(5) = "Z"
K(6) = ""
ElseIf M(1) <> 0 And M(2) = 0 And M(3) <> 0 Then
K(1) = "X"
K(2) = Mid(WholeLine, 2, M(3) - (M(1) + 1))
K(3) = "Y"
K(4) = ""
K(5) = "Z"
K(6) = Mid(WholeLine, M(3) + 1, 8)
ElseIf M(1) = 0 And M(2) <> 0 And M(3) <> 0 Then
K(1) = "Y"
K(2) = ""
K(3) = "Y"
K(4) = Mid(WholeLine, M(2) + 1, M(3) - (M(2) + 1))
K(5) = "Z"
K(6) = Mid(WholeLine, M(3) + 1, 8)
ElseIf M(1) = 0 And M(2) <> 0 And M(3) = 0 Then
K(1) = "X"
K(2) = ""
K(3) = "Y"
K(4) = Mid(WholeLine, M(2) + 1, 8)
K(5) = "Z"
K(6) = ""
ElseIf M(1) = 0 And M(2) = 0 And M(3) <> 0 Then
K(1) = "X"
K(2) = ""
K(3) = "Y"
K(4) = ""
K(5) = "Z"
K(6) = Mid(WholeLine, M(3) + 1, 8)
ElseIf M(1) = 0 And M(2) = 0 And M(3) = 0 Then
K(1) = "X"
K(2) = ""
K(3) = "Y"
K(4) = ""
K(5) = "Z"
K(6) = ""
End If
A = A + 1
If A = 65536 Then B = 8: A = 0
.Cells(A, B).Resize(, UBound(K)) = K
Wend
Close #X
End With
Application.ScreenUpdating = True
End Sub

'----------------------------------------------------
Sub Remplir_Cellules_Vides()
Dim DerLig As Long, A as integer, X
On Error Resume Next
Application.ScreenUpdating = False
Dim Rg As Range
With Feuil1 'Nom feuille à adapter
With .Range("A1:F65536")
For A = 2 To 6 Step 2
Set Rg = .Columns(A).SpecialCells(xlCellTypeBlanks)
With Rg
.Formula = "=" & Rg(1).Offset(-1).Address(0, 0)
End With
X = .Columns(A).Value
.Columns(A).Value = X
Next
End With
End With
With Feuil1
With .Range("H:M")
derlig = .Find("*", LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End With
With .Range("H1:M" & derlig)
For A = 2 To 6 Step 2
Set Rg = .Columns(A).SpecialCells(xlCellTypeBlanks)
With Rg
.Formula = "=" & Rg(1).Offset(-1).Address(0, 0)
End With
X = .Columns(A).Value
.Columns(A).Value = X
Next
End With
End With
Application.ScreenUpdating = True

End Sub
'----------------------------------------------------




"JLuc" eghWxf$
Je pense tenir le bon bout, voici la macro que j'ai écrite (avec des
copier/coller à droite et à gauche) :

Sub Transforme()

Dim MyString

Dim reg As VBScript_RegExp_55.regexp
Dim Match As VBScript_RegExp_55.Match
Dim Matches As VBScript_RegExp_55.MatchCollection
Dim nligne
' instanciation
Set reg = New VBScript_RegExp_55.regexp

nligne = 1
reg.Pattern = "(X-?d*.?d*)?(Y-?d*.?d*)?(Z-?d*.?d*)?"
Open "C:UsersJeanLucDocumentsAncien PCExtrait.txt" For Input As #1
' Ouvre le fichier en lecture.
Do While Not EOF(1) ' Effectue la boucle jusqu'à la fin du fichier.
Input #1, MyString ' Lit une ligne.
Debug.Print "donnée : " & MyString
Set Matches = reg.Execute(MyString) ' Execute la regexp sur la
ligne lue
For Each Match In Matches
Debug.Print "source : ", Match.Value
For i = 0 To Match.SubMatches.Count - 1
Debug.Print "[$" & i + 1 & "]", Match.SubMatches(i)
Worksheets("Feuil1").Cells(nligne, i + 1) Match.SubMatches(i)
Next i
Next Match

' Affiche les données dans la fenêtre Exécution.
'
nligne = nligne + 1
Loop
Close #1 ' Ferme le fichier.
End Sub

Il reste encore à pauffiner, je m'y mets demain !
Bonne soirée

--
JLuc
« Celui qui trouve sans chercher est celui qui a longtemps cherché
sans trouver. » - Gaston BACHELARD
JLuc
Le #19364731
MichDenis a écrit :
Pour le plaisir ...



Sacré procédure :p

--
JLuc
« Celui qui trouve sans chercher est celui qui a longtemps cherché
sans trouver. » - Gaston BACHELARD
JLuc
Le #19368971
Salut,
J'ai finalisé ma procédure et elle marche bien :

Sub Transforme()

Dim MyString

Dim reg As VBScript_RegExp_55.regexp
Dim Match As VBScript_RegExp_55.Match
Dim Matches As VBScript_RegExp_55.MatchCollection
Dim nligne, point(3)
' instanciation
Set reg = New VBScript_RegExp_55.regexp

nligne = 1
reg.Pattern = "(X-?d*.?d*)?(Y-?d*.?d*)?(Z-?d*.?d*)?"
Open "F-points.txt" For Input As #1 ' Ouvre le fichier en lecture.
Open "VG-points.txt" For Output As #2 ' ouvre le fichier en ecriture.
Do While Not EOF(1) ' Effectue la boucle jusqu'à la fin du fichier.
Input #1, MyString ' Lit une ligne.
Set Matches = reg.Execute(MyString) ' Execute la regexp sur la
ligne lue
For Each Match In Matches
For i = 0 To Match.SubMatches.Count - 1
longueur = Len(Match.SubMatches(i))
axe = Match.SubMatches(i)
If Not IsEmpty(axe) Then
point(i) = Val(Format(Right(axe, longueur - 1),
"##0.000"))
End If
Next i
Next Match
Write #2, point(0); point(1); point(2)
Loop
Close #1 ' Ferme le fichier 1.
Close #2 ' Ferme le fichier 2.

End Sub

Il y aurai surement à redire concernant l'expression régulière, mais le
principale, c'est que ça marche.

Merci à tous de votre cohopération.

PS : ça peut peut être interesser Misange pour mettre sur Excelabo sur
l'utilisation des expressions régulières. Je me suis aidé de ce site
pour démarrer :
http://cafeine.developpez.com/access/tutoriel/regexp/#LII-A

--
JLuc
« Celui qui trouve sans chercher est celui qui a longtemps cherché
sans trouver. » - Gaston BACHELARD
Publicité
Poster une réponse
Anonyme