Rechercher/Remplacer chaine dans fichier txt

Résolu
C_G_Mila Messages postés 10 Date d'inscription vendredi 27 octobre 2006 Statut Membre Dernière intervention 16 mars 2007 - 24 févr. 2007 à 18:04
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre 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

16 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 févr. 2007 à 21:28
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
1
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
24 févr. 2007 à 22:05
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
1
VBGenesis Messages postés 292 Date d'inscription samedi 25 février 2006 Statut Membre Dernière intervention 22 février 2009
24 févr. 2007 à 20:15
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
@+
0
C_G_Mila Messages postés 10 Date d'inscription vendredi 27 octobre 2006 Statut Membre Dernière intervention 16 mars 2007
24 févr. 2007 à 20:20
 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<
**************************************
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
C_G_Mila Messages postés 10 Date d'inscription vendredi 27 octobre 2006 Statut Membre Dernière intervention 16 mars 2007
24 févr. 2007 à 20:24
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 :)
0
VBGenesis Messages postés 292 Date d'inscription samedi 25 février 2006 Statut Membre Dernière intervention 22 février 2009
24 févr. 2007 à 20:30
Ok donc il s'agit de nombres entiers.
Je vais voir ce que je peut faire

VBGenesis
0
C_G_Mila Messages postés 10 Date d'inscription vendredi 27 octobre 2006 Statut Membre Dernière intervention 16 mars 2007
24 févr. 2007 à 20:41
Merci !!!





A toute !
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
24 févr. 2007 à 20:41
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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
24 févr. 2007 à 20:48
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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
24 févr. 2007 à 20:51
il est bien clair que tu dois remplacer ici les .... par ce que tu veux, hein ?

  toto = ">.......<"
 
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
24 févr. 2007 à 21:07
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
0
VBGenesis Messages postés 292 Date d'inscription samedi 25 février 2006 Statut Membre Dernière intervention 22 février 2009
24 févr. 2007 à 21:16
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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
24 févr. 2007 à 21:20
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 !
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
24 févr. 2007 à 21:25
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
0
C_G_Mila Messages postés 10 Date d'inscription vendredi 27 octobre 2006 Statut Membre Dernière intervention 16 mars 2007
24 févr. 2007 à 21:37
Merci beaucoup d'avoir été aussi réactif.
Je teste tout ça, et reviens vers vous dans 10 minutes.

Bise. :)
A toute !
0
C_G_Mila Messages postés 10 Date d'inscription vendredi 27 octobre 2006 Statut Membre Dernière intervention 16 mars 2007
24 févr. 2007 à 21:41
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.
0
Rejoignez-nous