IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Recherche/Replace dans un fichier RTF (VB2005)


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 19
    Par défaut Recherche/Replace dans un fichier RTF (VB2005)
    Bonjour,

    Je souhaite faire une étiquette avec un fichier modèle de type RTF et qui contient des champs du type [NOM CHAMPS;Attribut=valeur] . (RTF car je veux que l'utilisateur puisse enrichir la présentation en personnalisant le fichier modèle selon ses goûts).

    Mon programme lis ligne à ligne le fichier RTF, et fait un recherche/replace sur chaque ligne en fonction des champs trouvés, et crée un nouveau fichier.

    Mais lorsque je lis ce fichier ligne à ligne, je m'aperçois que des balise RTF s'intercalent au milieu des mes champs, comme ci
    {\fs22\insrsid2914612 [LIBELLE;}{\fs22\insrsid11498887 RetourLigneAvant}{\fs22\insrsid2914612 =1}{\fs22\insrsid11498887 ]} en lieu et place de [LIBELLE;RetourLigneAvant=1]

    Avez vous une idée comment éviter cette "intrusion" du RTF dans mes balises ?

    Merci par avance

  2. #2
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Montre-nous ton code avec lequel tu lis le fichier RTF, s'il te plait.
    Si on ne sait pas comment tu fais, on ne pourra pas t'aider correctement !

  3. #3
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 19
    Par défaut
    Merci Skalp pour ta réponse. J'ai essayé cet après midi d'une autre manière en utilisant les expressions régulières pour retirer les balises RTF à l'intérieur de mes propres balises.

    Cela semble marcher à ce stade, mais je suis tjs en phase de mise au point. Si je n'y parvenais pas je renverrai une autre réponse à ce post

  4. #4
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 19
    Par défaut Pour Info
    J'ai en fait du faire une fonction pour retirer les balises RTF à l'inérieur de mes champs étiquette. Si cette fonction peut servir à quelqu'un, ci dessous un copié collé.

    Good luck
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
     ' Retire les balises RTF à l'intérieur des champs Etiquette
        Function EpureField(ByVal Ligne As String) As String
            Dim travLigne As String = Ligne
            Dim cCharac As Char
            Dim nPosition As Int32
            Dim nNbOuvertureBaliseRTF As Int16 = 0
            Dim nNbFermetureBaliseRTF As Int16 = 0
            Dim nStart As Int32 = 1
     
            While InStr(nStart, travLigne, "[") > 0 ' On recherche l'ouverture du 1er champs etiquette
                nPosition = InStr(nStart, travLigne, "[")
                cCharac = travLigne.Substring(nPosition, 1)
                nNbOuvertureBaliseRTF = 0
                nNbFermetureBaliseRTF = 0
     
                While cCharac <> "]" ' On ntravaille sur cette portion jusqu'à la fin du champs etiquette
                    If cCharac = "}" Then ' Fermeture balise RTF
                        travLigne = travLigne.Remove(nPosition, 1) ' On retire ce caratère
                        nNbFermetureBaliseRTF = nNbFermetureBaliseRTF + 1 ' On compte le nb d'ouveture/fermeture balise RTF pour savoir s'il faura refermer une balise à la fin
     
                    ElseIf cCharac = "{" Then ' Ouverture balise RTF
                        travLigne = travLigne.Remove(nPosition, 1)
                        IsRemovingChar = True
                        nNbOuvertureBaliseRTF = nNbOuvertureBaliseRTF + 1 ' On compte le nb d'ouveture/fermeture balise RTF pour savoir s'il faura refermer une balise à la fin
     
                    ElseIf cCharac = " " And IsRemovingChar = True Then ' Fin du Nom de la balise RTF
                        travLigne = travLigne.Remove(nPosition, 1)
                        IsRemovingChar = False '=> à partir de la, c'est du texte à garder
     
                    ElseIf IsRemovingChar = True Then
                        travLigne = travLigne.Remove(nPosition, 1) ' si pas de caratère spécial est que l'on est après un "{" => on supprime le caractère
                    Else
                        nPosition = nPosition + 1 ' On change de position que si on n'a pas supprimer un caractère => change de position tout seul
                    End If
     
                    cCharac = travLigne.Substring(nPosition, 1) ' Regardons le caractère suivant
                End While
                If nNbFermetureBaliseRTF > nNbOuvertureBaliseRTF Then
                    ' Il y a certaienemnt une "}" dont l'ouverture était ben dehors de la balise => on repouse la fermeture après notre balise
                    travLigne = travLigne.Insert(nPosition, "}")
                End If
                nStart = nPosition
     
            End While
            EpureField = Ligne
        End Function

  5. #5
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 19
    Par défaut hoops
    Attention la dernière ligne doit être

    EpureField = travLigne

  6. #6
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Tu peux éditer tes messages en cliquant sur le bouton :

    Tu peux aussi utiliser la balise Code pour que tes portions de code soient plus lisibles :

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/06/2009, 17h49
  2. Recherche/Replace dans un fichier RTF (VB2005)
    Par npenel dans le forum Windows
    Réponses: 3
    Dernier message: 27/11/2007, 10h39
  3. Recherche chaine dans un fichier
    Par matt8-5 dans le forum Langage
    Réponses: 2
    Dernier message: 02/11/2006, 16h07
  4. Insertion d'une image BMP dans un fichier RTF
    Par didinel dans le forum MFC
    Réponses: 8
    Dernier message: 18/08/2005, 09h24
  5. inserer une image BMP dans un fichier rtf
    Par Alice9 dans le forum MFC
    Réponses: 17
    Dernier message: 06/07/2004, 10h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo