Rechercher/Remplacer chaine dans fichier txt [Résolu]

Messages postés
10
Date d'inscription
vendredi 27 octobre 2006
Dernière intervention
16 mars 2007
- - Dernière réponse : PCPT
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
- 24 févr. 2007 à 22:05
Salut,


J'ai un p'ti pb pour faire ce que je veux faire....


Voilà ce que je veux faire:


A chaque fois que je trouve une chaine de la forme ">Entier:Entier<",
je la remplace par ">00:entier:entier<".


A chaque fois que je trouve une chaine de la forme ">Entier<",

je la remplace par ">00:00:entier<".


A chaque fois que je trouve une chaine de la forme ">0:Entier:Entier<",

je la remplace par ">00:entier:entier<".

Merci de votre aide....


Mila
Afficher la suite 

Votre réponse

16 réponses

Meilleure réponse
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
3
Merci
salut,

Private Sub FormatTimeStrings(ByRef Expression As String)
    Dim lPosL As Long, lPosR As Long, sBuffer As String, bVal As Boolean
    lPosL =  0
    Do
        lPosL = InStr(lPosL + 1, Expression, ">")
        lPosR = InStr(lPosL + 1, Expression, "<")
        If lPosL > 0 And lPosR > 0 Then
            sBuffer = Mid$(Expression, lPosL + 1, lPosR - lPosL - 1)
            bVal = False
            Select Case Len(sBuffer)                Case 2:     If IsNumeric(sBuffer) Then bVal True: sBuffer "00:00:" & sBuffer
                Case 4:     If sBuffer Like "?:??" Then bVal = True:        sBuffer = "00:0" & sBuffer
                Case 5:     If sBuffer Like "??:??" Then bVal = True:       sBuffer = "00:" & sBuffer
                Case 7:     If sBuffer Like "?:??:??" Then bVal = True:     sBuffer = "0" & sBuffer
            End Select
            If bVal Then Expression = Left$(Expression, lPosL) & sBuffer
& Mid$(Expression,
lPosR)
        End If
    Loop Until (lPosL = 0 Or lPosR = 0)
End Sub

<small>Coloration
syntaxique automatique [AFCK] </small>
       



je te prépare le test avec les enregistrement (voir 2 3 topics plus bas)
merci d'éviter les doublons au possible par la suite
++
PCPT  [AFCK]
<hr size ="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de PCPT
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
3
Merci
c'est vrai qu'une sub avec un seul paramètre par référence, çà laisse beaucoup de choix d'utilisation

voir ton précédent topic...
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de PCPT
Messages postés
305
Date d'inscription
samedi 25 février 2006
Dernière intervention
22 février 2009
0
Merci
Salut
Quand tu dis qu'une chaine est ">Entier:Entier<" tu veux dire qu'il y a vraiment marqué "Entier" ou qu'il s'agit d'un nombre entier?
Si c'est un nombre, ce cera plus dure mais sinon c'est relativement facile
@+
Commenter la réponse de VBGenesis
Messages postés
10
Date d'inscription
vendredi 27 octobre 2006
Dernière intervention
16 mars 2007
0
Merci
 Ce que je voudrais faire:
- je parcours le fichier txt
- si jamais je trouve l'expression:

   1. ">ENTIER:ENTIER<" alors je la remplace par ">00:ENTIER:ENTIER<"
        exemple : >25:47< = =>  >00:25:47<  

   1. ">ENTIER(1 caractere):ENTIER:ENTIER<" alors je la remplace par ">0:ENTIER(1 caractere):ENTIER:ENTIER<"
        exemple : >1:25:47< ==>  >01:25:47<  

   1. ">ENTIER<" alors je la remplace par ">00:00:ENTIER<"
        exemple : >47< ==>  >00:00:47<  

   1. ">ENTIER(1 caractere):ENTIER<" alors je la remplace par ">00:0ENTIER(1 caractere):ENTIER<"
        exemple : >5:47< ==>  >00:05:47<  

En gros, il faut tout le temps avoir le format "hh:mm:ss"

Je pense qu'il faut utiliser les expressions régulières....

Voici mon fichier de test avec lequel je travaille:

************************************
>25:47<

>0:25:47<

>47<

Corps du fichier

>1:25:47<

>0:25:47<

>5:47<
**************************************
Commenter la réponse de C_G_Mila
Messages postés
10
Date d'inscription
vendredi 27 octobre 2006
Dernière intervention
16 mars 2007
0
Merci
exemple  :" >25:47<"
A remplacer par 
">00:25:47<"




exemple : ">1:25:47<"

A remplacer par

  ">01:25:47<"




exemple : ">47<


"
A remplacer par


  ">00:00:47<"




exemple : ">5:47<"

A remplacer par

  ">00:05:47<"








Voilà....

Merci :)
Commenter la réponse de C_G_Mila
Messages postés
305
Date d'inscription
samedi 25 février 2006
Dernière intervention
22 février 2009
0
Merci
Ok donc il s'agit de nombres entiers.
Je vais voir ce que je peut faire

VBGenesis
Commenter la réponse de VBGenesis
Messages postés
10
Date d'inscription
vendredi 27 octobre 2006
Dernière intervention
16 mars 2007
0
Merci
Merci !!!





A toute !
Commenter la réponse de C_G_Mila
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
0
Merci
Tiens !
Je suis fatigué et ai bâclé... mais ceci marche (fais tes essais en modifiant toto comme tu l'entends)

Private Sub Command1_Click()
  toto = ">25:47<"""
  toto = Left(Mid(toto, (InStr(toto, ">")) + 1), (InStr(toto, "<")) - 2)
  A = Len(toto)
  Select Case Len(toto)
    Case Is = 5
      toto = "00:" & toto
    Case Is = 6
      toto = "00" & toto
    Case Is = 7
      toto = "0" & toto
    Case Else
      toto = toto
  End Select
  MsgBox toto
End Sub
Commenter la réponse de jmfmarques
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
0
Merci
Ah le coquin !
Il en a rajouté, des conditions, pendant que je rédigeais !!!

Bon !

alors voilà la totale , pour tous les cas de figure, ma foi :

Private Sub Command1_Click()
  toto = "><"""
  toto = Left(Mid(toto, (InStr(toto, ">")) + 1), (InStr(toto, "<")) - 2)
  Select Case Len(toto)
    Case Is = 0
      toto = "00:00:00" & toto
    Case Is = 1
      toto = "00:00:0" & toto
    Case Is = 2
      toto = "00:00:" & toto
    Case Is = 3
      toto = "00:00" & toto
    Case Is = 4
       toto = "00:0" & toto
    Case Is = 5
      toto = "00:" & toto
    Case Is = 6
      toto = "00" & toto
    Case Is = 7
      toto = "0" & toto
    Case Else
      toto = toto
  End Select
  MsgBox toto
End Sub
Commenter la réponse de jmfmarques
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
0
Merci
il est bien clair que tu dois remplacer ici les .... par ce que tu veux, hein ?

  toto = ">.......<"
 
Commenter la réponse de jmfmarques
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
0
Merci
Tiens, encore !
Je n'ai pas VB6 (et donc le replace pour vérifier), mais ceci devrait aller, il me semble :

Private Sub Command1_Click()
  toto = ">21:01:05<"
  toto = Left(Mid(toto, (InStr(toto, ">")) + 1), (InStr(toto, "<")) - 2)
  toto = Format(replace(toto, ":", ""), "00:00:##")
  MsgBox toto
End Sub
Commenter la réponse de jmfmarques
Messages postés
305
Date d'inscription
samedi 25 février 2006
Dernière intervention
22 février 2009
0
Merci
Salut jmfmarques! Ton code est bien, mais tu oublie qu'il peut y avoir plusieurs dates! cepandant le mien ne gérait pas la longueur variable des chaines, c'est pourquoi je me suis permit de prendre une partie de ton code (merci!!):

Dim Debut as integer, temp as integer
While instr(Debut, ContFile, ">") > 0
    Debut = instr(Debut, ContFile, ">")
    Select Case Len(mid(ContFile, debut + 1, instr(debut, Contfile, "<")))
    Case Is = 0
      temp = "00:00:00"
    Case Is = 1
      temp = "00:00:0"
    Case Is = 2
      temp = "00:00:"
    Case Is = 3
      temp = "00:00"
    Case Is = 4
       temp = "00:0"
    Case Is = 5
      temp = "00:"
    Case Is = 6
      temp = "00"
    Case Is = 7
      temp = "0"
    Case Else
      temp = temp
    End Select
    '        =   "--------->"                      & "00:" &                   "05:47<------------"
    Contfile = left(ContFile, Debut + 1) & temp & mid(Contfile, Debut + 1, len(Contfile) - Debut - 1)
Wend

Comme ça ça devrait marcher, même si je ne peut pas tester tout de suite (faut croire que vb n'a pas aimé mon reformatage...) J'espere que mon code sera utile
@+
VBGenesis
Commenter la réponse de VBGenesis
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
0
Merci
coucou !
Mon 1er code se fichait (il gérait tout) de la longueur des dates.
Le 2ème (a vérifier et corriger un peu au besoin car je n'ai pas VB6) est encore mieux
Essaye !
Commenter la réponse de jmfmarques
Messages postés
4824
Date d'inscription
lundi 11 novembre 2002
Dernière intervention
15 novembre 2016
0
Merci
Salut C_G_Mila,

Je viens de lire ton MP, et la réponse que je peux te donner, c'est que Jmfmarques as bien répondu à ton problème avec son code (post 20:48 et 21:07).
Maintenant, je pense que n'as plus cas utiliser son code, et insèrai le tient.
 1 - Tu lis donc ton fichier texte...si le format de lecture est bon, tu ne fias rien et passe à la ligne suivante, si c'est le cas contraire, tu récupère le n° de ligne et ré-écrit sur le même n° de ligne avec le bon format.

A+
Exploreur
Commenter la réponse de cs_Exploreur
Messages postés
10
Date d'inscription
vendredi 27 octobre 2006
Dernière intervention
16 mars 2007
0
Merci
Merci beaucoup d'avoir été aussi réactif.
Je teste tout ça, et reviens vers vous dans 10 minutes.

Bise. :)
A toute !
Commenter la réponse de C_G_Mila
Messages postés
10
Date d'inscription
vendredi 27 octobre 2006
Dernière intervention
16 mars 2007
0
Merci
Au fait,

pour ce qui est de la fonction "FormatTimeStrings(ByRef Expression As String)", comment je dois l'utiliser ?

Que dois-je mettre à la place de "Expression" ?

Merchi

Mila.
Commenter la réponse de C_G_Mila

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.