Comment retirer les espace entre 2 char

Comment retirer les espace entre 2 char - VB/VBA/VBS - Programmation

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

Reply

Marsh Posté le 14-05-2002 à 09:24:01   

Reply

Marsh Posté le 14-05-2002 à 09:27:33    

Scuzé moi c est du VB.

Reply

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]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 14-05-2002 à 10:28:13    

je vais tester sa je te remerci man
@++ et au prochain pb

Reply

Marsh Posté le 14-05-2002 à 10:30:36    

à ton service Doc  :lol:  :lol:  
 
 [:yamusha]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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

Reply

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

Reply

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.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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

Reply

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+


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 14-05-2002 à 11:26:18   

Reply

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+


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 14-05-2002 à 11:31:37    

Putain, j'avais oublié cette fonction InStr.... c'est vrai qu'elle est bien pratique !


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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 :(.

Reply

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]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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).

Reply

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 :)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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 :D .
 
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 !

Reply

Marsh Posté le 14-05-2002 à 16:23:59    

Voila exactement ce qui m'énerve en VB :

Citation :


Dim Caractere  


 
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  :gun:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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 :lol:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 15-05-2002 à 09:58:16    

En l'ouvrant en binaire, avec des Get, Put et Seek pour se déplacer..

Reply

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  :lol:  :lol:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed