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

C_G_Mila 10 Messages postés vendredi 27 octobre 2006Date d'inscription 16 mars 2007 Dernière intervention - 24 févr. 2007 à 18:04 - Dernière réponse : PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention
- 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
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 24 févr. 2007 à 21:28
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

Merci PCPT 3

codes-sources a aidé 78 internautes ce mois-ci

Commenter la réponse de PCPT
Meilleure réponse
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 24 févr. 2007 à 22:05
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

Merci PCPT 3

codes-sources a aidé 78 internautes ce mois-ci

Commenter la réponse de PCPT
VBGenesis 305 Messages postés samedi 25 février 2006Date d'inscription 22 février 2009 Dernière intervention - 24 févr. 2007 à 20:15
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
C_G_Mila 10 Messages postés vendredi 27 octobre 2006Date d'inscription 16 mars 2007 Dernière intervention - 24 févr. 2007 à 20:20
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
C_G_Mila 10 Messages postés vendredi 27 octobre 2006Date d'inscription 16 mars 2007 Dernière intervention - 24 févr. 2007 à 20:24
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
VBGenesis 305 Messages postés samedi 25 février 2006Date d'inscription 22 février 2009 Dernière intervention - 24 févr. 2007 à 20:30
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
C_G_Mila 10 Messages postés vendredi 27 octobre 2006Date d'inscription 16 mars 2007 Dernière intervention - 24 févr. 2007 à 20:41
0
Merci
Merci !!!





A toute !
Commenter la réponse de C_G_Mila
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 24 févr. 2007 à 20:41
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
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 24 févr. 2007 à 20:48
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
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 24 févr. 2007 à 20:51
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
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 24 févr. 2007 à 21:07
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
VBGenesis 305 Messages postés samedi 25 février 2006Date d'inscription 22 février 2009 Dernière intervention - 24 févr. 2007 à 21:16
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
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 24 févr. 2007 à 21:20
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
cs_Exploreur 4824 Messages postés lundi 11 novembre 2002Date d'inscription 15 novembre 2016 Dernière intervention - 24 févr. 2007 à 21:25
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
C_G_Mila 10 Messages postés vendredi 27 octobre 2006Date d'inscription 16 mars 2007 Dernière intervention - 24 févr. 2007 à 21:37
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
C_G_Mila 10 Messages postés vendredi 27 octobre 2006Date d'inscription 16 mars 2007 Dernière intervention - 24 févr. 2007 à 21:41
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.