Pb de manipulation de chaine

waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013 - 25 nov. 2004 à 01:26
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013 - 25 nov. 2004 à 19:40
bonjour, voila mon probleme:

soit un fichier text contenant une chaine de caractere quelconque ex: "fggfgf gtg tggt tgtg, gt, tytyh dzeq eqfe,fad zef qdz".

Comment faire pour :
- au niveau des espaces doubles pairs: remplacer par un retour a la ligne.
- au niveau des espaces doubles impairs: remplacer par un ";".

pour mon exemple, obtenir:

fggfgt;gtg
tggt;tgtg, gt, tytyh
dzeq; eqfe,fad zef qdz

merci d'avance pour votre aide.

4 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
25 nov. 2004 à 02:13
et qu'est-ce qu'on fait des espaces simples ou des espaces triples ?

Dim i As Integer
Dim s1 As String
Dim s2 As String
Dim T() As String

'j'ai remplacé espace par tiret pour compréhension
s1 = "fggfgf--gtg--tggt--tgtg,-gt,-tytyh--dzeq--eqfe,fad-zef-qdz"

T = Split(s1, Space$(2))

s2 = ""
For i = 0 To UBound(T)
If i Mod 2 Then
s2 = s2 & T(i) & vbCrLf
Else
s2 = s2 & T(i) & ";"
End If
Next

'résultat dans une TextBox multiligne
Text1 = s2

Daniel
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
25 nov. 2004 à 16:21
merci daniel pour ta technique.

pour repondre a ta question, les espaces simples ne sont pas un probleme et il n'y a pas d'espaces superieurs a doubles, donc..

personnellement g trouvé un moyen pour aboutir au resultat mais plus long que ta technique:

Dim Buffer As String
Dim Lg As Long
Dim m, o, p As Integer
Open c For Input As #1
Buffer = Input(LOF(1), #1)
o = 0
Do
'Lg = Len(Buffer)
m = InStr(1, Buffer, " ")
If m <> 0 Then
o = o + 1
p = o Mod 2
If p = 0 Then
Let Buffer = Left(Buffer, m) & vbCrLf & Right(Buffer, Len(Buffer) - (m + 1))
Else
Let Buffer = Left(Buffer, m) & ";" & Right(Buffer, Len(Buffer) - (m + 1))
End If
End If
DoEvents
Loop Until m = 0
Close #1
Open c For Output As #1
Print #1, Buffer;
Close #1

Mais j'ai un nouveau probleme, qui conserne la taille des fichiers a analyser:

- c tres long pour les gros fichiers (sup a 500ko)
- pour les petits fichiers (1ko) g l'apparition de l'erreur 62 ("l'entrée dépasse la fin de fichier") au niveau du LOF

donc si quelqu'un à une solution, merci d'avance
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
25 nov. 2004 à 18:06
pour l'erreur 62, essaye d'ouvrir ton fichier en binaire:

Open c For Binary As #1
buffer = space$(Lof(1))
get#1,,Buffer
close#1

pour les gros fichiers c'est normal que ce soit long, tu gagneras pas grand chose, mais je vois que t'as des variables déclarées en Variant:

Dim m As Integer, o as Integer, p As Integer
ainsi que Left$ et Right$ à la place de Left et Right

d'autre part InStr qui recommence toujours à 1:

dim x As Integer
x = 1
Do
m = InStr(x, Buffer, space$(2))
.............
x = m+1
Loop Until m = 0

Daniel
0
waspy59 Messages postés 189 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 15 mai 2013
25 nov. 2004 à 19:40
oki ca marche nikel, merci encore
0
Rejoignez-nous