Comment retirer les espace entre 2 char - VB/VBA/VBS - Programmation
Marsh Posté le 14-05-2002 à 09:41:58
Dim Caractere
Open "FichierSource" for input as #1
Open "FichierDest" for output as #2
Do while not EOF(1)
Caractere=Input(1,#1)
If Caractère <> " " Then
Put #2, Caractere
End If
Loop
Close #2
Close #1
Je t'ai pondu ce code en direct sans tester, il est possible qu'il contienne des erreurs. Teste et corrige le cas échéant.
A+
[jfdsdjhfuetppo]--Message édité par Harkonnen le 14-05-2002 à 10:09:20--[/jfdsdjhfuetppo]
Marsh Posté le 14-05-2002 à 10:28:13
je vais tester sa je te remerci man
@++ et au prochain pb
Marsh Posté le 14-05-2002 à 10:30:36
à ton service Doc
Marsh Posté le 14-05-2002 à 10:40:24
le put ne marche pas mais il est peut etre mal declaré je n ais pas encore regarder par contre le code ne supprime pas tt les espace?? car il existe des espace des les /dsgfdg fdgfd/ /fdgfdg gfdgfdg/
Je veut vraiment suppr kes les zones ou j ai / (vide) /
Voilou
Marsh Posté le 14-05-2002 à 10:48:35
le mieux ke je pourrait faire c est de lire mon txt si je trouve un / je vasi automatiquement au suivant si se ki se trouve entre 2/ est un champ vide alors je supprime sinon je laisse tel kel
Mais je suis un n00b du codage
Marsh Posté le 14-05-2002 à 11:01:44
Autant pour moi, c'est pas Put #2, Caractere, mais Print #2, Caractere
Par contre, ce code supprime tous les espaces. Si la séparation entre tes / / est une tabulation, alors remplace l'espace par le code ASCII du TAB, sinon il va falloir modifier le programme pour qu'il ne supprime les espaces qu'à partir du / et jusqu'au / suivant.
Marsh Posté le 14-05-2002 à 11:23:16
c est bon j ai trouver
Private Sub Command1_Click()
'Déclaration des variables locales
Dim Msg As String, msg2 As String
Dim Ind As Long, Ind2 As Long
'Initialisation des variables
Msg = "/ljdv flkj sdjgl/ /fd gdk j ghkh/ /fgdf fgd dfgd / /fdk hh g kjd/"
'Boucle de supression des espaces
Ind = InStr(Msg, "/" )'je determine la position du premier /
Ind2 = InStr(Ind+1, Msg, "" ) 'Je determine la position du second / je le fait demarrer a ind+1 pour pas que ind=ind2
msg2 = Mid$(Msg, Ind, Ind2 - Ind+1)
MsgBox (msg2)
End Sub
Voila c est tout bete merci a ceux qui m ont aider mon per ma moman... et tout mes poto internaute
Marsh Posté le 14-05-2002 à 11:26:18
Dim Caractere
Open "FichierSource" for input as #1
Open "FichierDest" for output as #2
Do while not EOF(1)
Caractere=Input(1, #1) ' on lit un caractere
If Caractere <> "/" Then ' différent de "/" => on l'écrit
Print #2, Caractere
Else ' sinon
Print #2, Caractere ' on l'écrit
Caractere=Input(1, #1) ' caratere suivant
Do while Caractere = "/" ' on lit les caracteres entre /
Caractere=Input(1, #1)
Loop
Print #2, Caractere ' on ecrit le / terminal
End If
Loop
Close #2
Close #1
Ca devrait être bon. Ce source n'est pas optimisé, possède de nombreuses redondances, mais il te permet de voir les différentes étapes de l'algo.
A+
Marsh Posté le 14-05-2002 à 11:26:59
Dim Caractere
Open "FichierSource" for input as #1
Open "FichierDest" for output as #2
Do while not EOF(1)
Caractere=Input(1, #1) ' on lit un caractere
If Caractere <> "/" Then ' différent de "/" => on l'écrit
Print #2, Caractere
Else ' sinon
Print #2, Caractere ' on l'écrit
Caractere=Input(1, #1) ' caratere suivant
Do while Caractere = "/" ' on lit les caracteres entre /
Caractere=Input(1, #1)
Loop
Print #2, Caractere ' on ecrit le / terminal
End If
Loop
Close #2
Close #1
Ca devrait être bon. Ce source n'est pas optimisé, possède de nombreuses redondances, mais il te permet de voir les différentes étapes de l'algo.
A+
Marsh Posté le 14-05-2002 à 11:31:37
Putain, j'avais oublié cette fonction InStr.... c'est vrai qu'elle est bien pratique !
Marsh Posté le 14-05-2002 à 12:47:44
Si la rapidité est critique, il peut être utile de comparer la célérité des deux codes sur les fichiers à traiter.
Les accès Mid$() en VB3 étaient assez lents .
Marsh Posté le 14-05-2002 à 14:18:06
A voir, effectivement...
voici une version un peu moins redondante :
Dim Caractere
Open "FichierSource" for input as #1
Open "FichierDest" for output as #2
Do while not EOF(1)
Caractere=Input(1, #1)
If Caractere = "/" Then
Print #2, Caractere
Caractere=Input(1, #1)
Do while Caractere <> "/"
Caractere=Input(1, #1)
Loop
End If
Print #2, Caractere
Loop
Close #2
Close #1
On a du gagner quelques cycles machine...
J'ai un doute la : en VB, l'opérateur de comparaison c'est = ou == ?
[jfdsdjhfuetppo]--Message édité par Harkonnen le 14-05-2002 à 14:21:56--[/jfdsdjhfuetppo]
Marsh Posté le 14-05-2002 à 15:35:45
En VB, = assigne et compare, d'où des risques d'erreurs quand on passe au C (j'y fait tj très attention pour pas avoir des if (A = B) à la VB en C).
Marsh Posté le 14-05-2002 à 15:50:11
C'est pour ça que je pose la question, je code en C++ 99% du temps, et j'utilise VB le 1% restant quand je suis pressé.
Ce qui explique d'ailleurs l'aspect "C" de mon source
Marsh Posté le 14-05-2002 à 16:13:04
Le (V)Basic, c'est bien car rapide à mettre en oeuvre (généralement), mais prendre de bonnes habitudes de lisibilité ne nuit jamais, ca facilite la lecture et aide la compréhension .
Après le FORTRAN, j'ai tâté du TBasic et QuickBasic/DOS, VB3 plus tard, et maintenant BorlandC uniquement (plus optimisable/rapide/pénible aussi) .
Maintenant, il a tout pour réussir !
Marsh Posté le 14-05-2002 à 16:23:59
Voila exactement ce qui m'énerve en VB :
Citation : |
J'ai oublié de spécifier le type, et ça a du être accepté quand même car il l'a typé en Variant...
Le parfait exemple de mauvaise habitude qu'on prend (trop) facilement.
Variant
Marsh Posté le 14-05-2002 à 16:40:54
Euh, je viens de me rendre compte d'un truc dans mon source...
J'avance jamais dans le fichier, je lis toujours le 1er caractère !!!
ptdr
Marsh Posté le 15-05-2002 à 09:58:16
En l'ouvrant en binaire, avec des Get, Put et Seek pour se déplacer..
Marsh Posté le 15-05-2002 à 10:05:02
Oui, mais ce que je voulais dire c'est que j'avais complètement oublié de me déplacer dans le fichier, je me suis focalisé sur la recherche de la chaine en oubliant de me déplacer dans le texte
Marsh Posté le 14-05-2002 à 09:24:01
j ai un fichier txt de se type
/ljdflkjsdjgl/ /fdgdkjghkh/ /dfldsjglkj/ /fdkhhgkjd/
les char / permette de determiner le debut et la fin
Dans le but de faire un premier traitement il faudrait ke je suppr tout les / (vide) / pour obtenir un txt au final de se type
/ljdflkjsdjgl//fdgdkjghkh//dfldsjglkj//fdkhhgkjd/
Merci a celui ki trouvera une solution thx