[VBA] Banaliser les guillemets dans un script

Résolu/Fermé
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 - 31 mars 2008 à 11:25
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 2 avril 2008 à 12:23
Bonjour,

J'ai un script VBA qui me permet de générer du code VBA à coller avec du texte dedans (venant d'un fichier), pour le recracher dans une textbox.

On Error GoTo Err_modifier_Click

Dim i, j, k
Dim config, texte
Dim IP, login, IP_public

chemin_conf = InputBox("Saisir le chemin d'accès exact de la configuration en .txt, et normalisé")
Open chemin_conf For Input As #1

Open chemin_conf & "_generated.txt" For Output As #2

j = 1
While Not EOF(1)
        For i = 1 To 23
             If EOF(1) Then Exit For
             Line Input #1, texte
             If i = 1 Then
                config = "conf" & j & " = " & Chr(34) & texte & Chr(34) & " _"
                Print #2, config
                j = j + 1
             Else
                config = " & Chr(13) & Chr(10) & " & Chr(34) & texte & Chr(34) & " _"
                Print #2, config
             End If
         Next i
         If EOF(1) Then
           config = " & Chr(13) & Chr(10) & " & Chr(34) & Chr(34)
           Print #2, config
           Print #2, ""

         Else
           Line Input #1, texte
           config = " & Chr(13) & Chr(10) & " & Chr(34) & texte & Chr(34) & " & chr(13) & chr(10)"
           Print #2, config
           Print #2, ""
         End If
Wend

config = "conf = conf"
For k = 1 To j - 2
    config = config & k & " & conf"
Next
config = config & j - 1
Print #2, config
Close
MsgBox ("Fichier texte généré dans le meme dossier avec succès !")
Exit Sub

Exit_ajout_Click:
        Exit Sub
        
Err_modifier_Click:
    MsgBox Err.Description
    Resume Exit_ajout_Click

End Sub


Le problème, c'est qu'il m'arrive d'avoir dans ce texte des guillemets, qui me sont entièrement indispensable...

Comment je pourrais optimiser mon code, pour qu'à chaque ligne de texte inscrite dès qu'il detecte un guillemet il me le banalise ?

J'avais pensé bien sûr au chr(34), mais pour coder un remplacement de " par " & chr(34) & " tout en ayant coupé la ligne en deux...sachant également qu'il peut y avoir jusqu'à 10 guillemets par ligne...je suis complètement perdu ...:^)

Une idée ?

Merci infiniment !

7 réponses

lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
31 mars 2008 à 11:54
Ok, j'ai trouvé comment banaliser les guillemets, mais pas comment inclure cela dans le script...

en fait c'est très simple il suffit de les dédoubler. Si par exemple dans

Chr(13) & Chr(10) & " & Chr(34) & texte & Chr(34) & " _"

Je rencontre :
Chr(13) & Chr(10) & "chat-script ORANGE "" "ATT*64***4#" TIMEOUT 10 "CONNECT"" _

Il faudrait que cela soit :
Chr(13) & Chr(10) & "chat-script ORANGE """" ""ATT*64***4#"" TIMEOUT 10 ""CONNECT"" " _

Ce qui donne en alogrithme :

Lire fichier
Pour chaque ligne de fichier
Si ligne contient "
alors
remplacer " par ""
fin si
fin pour

Quelqu'un sait retranscrire cela en VBA ?
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
31 mars 2008 à 13:23
up !
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
31 mars 2008 à 13:31
Salut,

tu ne manges jamais toi ???

essaies la fonction replace() : monTexte = Replace(ligne,""","""") ... je garantie rien, j'ai pas testé ...

;o)

polux
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
31 mars 2008 à 15:35
Excuse-moi, je mange très vite et ne fais pas très attention à l'heure ^^

Après quelques petits essais, j'essaye :
texte = Replace(texte, """", """""")


et ça marche :P


Puis-je en profiter pour poser encore une question bête, sur ces petites variables

numéro = 251
nom = de-la-villa

y a t il une fonction pour extraire le 1 de 251, et le villa de de-la-villa ?

Je sais, c'est honteux de ne pas savoir ça ...
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
31 mars 2008 à 17:51
re,

Content que tu ais trouvé ...

Pour l'autre question, oui il existe plusieurs fonctions qui permettent d'extraire une partie d'une chaîne de caractères.
Pour le numéro, si c'est d'un type entier, long ou double (décimal), il faut d'abord le convertir en chaîne de caractères.
num = Right(CStr(monNum),1)

Ici la fonction Right retourne le dernier caractère de la chaîne monNum. CStr est la fonction qui transforme une variable de type entier, long ou double en chaîne de caractère.
Pour le deuxième, c'est un peu plus compliqué, même si le principe est pratiquement le même. Comment savoir quels caractères extraire ? Y-a-t'il toujours un "-" ? si oui, il faut faire une boucle :
Public Function SearchNom (ByVal nom As String) As String
Dim i As Integer
Dim c As String
For i = Len(nom) to 1   'pour i allant de la longueur de la chaîne à 1. Ici nom = 11 caractères
    If Chr$(nom, Len(nom), i) <> "-" Then
        SearchNom = c
        Exit Function
    Else
        c = Chr$(nom, Len(nom), i) & c
    End If
Nexi i
End Function

Toujours aucune garantie que ça marche ... je ne peux pas tester ... mais ça doit pas être loin ...

Bon courage

;o)

Polux
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
1 avril 2008 à 11:45
Merci pour le coup de main !!!

Je ne pourrai tester ta fonction que cette après midi, mais a ce que j'en ai compris :
Pour i de long(nom) à 1  'par ordre décroissant
       si extraire(nom, long(nom), i) <> "-" alors
          mot = c
          fin
       sinon
          c = chaine(nom, long(nom), i) & c
       fin si
fin pour

(je me lis en essayant de comprendre en même temps :P)

T'es sûr que c'est pas plutot l'inverse ??? " si extraire(nom, long(nom), i) = "-" alors"

Mais sinon j'ai compris et c'est une super idée...parce que j'ai oublié de le préciser, mais oui, il y a toujours un séparateur "-" et je veux toujours le dernier mot :)
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
1 avril 2008 à 12:01
salut,

Oui tu as raison ... c'est : "si extraire(nom, long(nom), i) = "-" alors" ... voilà ce que c'est de ne pas faire de test ... je pense que tu as pigé le principe ... à toi de jouer maintenant

N'oublie pas de mettre résolu ...
bon courage

;o)

Polux
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
2 avril 2008 à 10:14
Je l'aurais mis avec plaisir, malheureusement ce n'est pas le cas...

Lorsque j'ai applique ta fonction à mon projet, j'ai un message d'erreur pour Chr$ me disant :
Erreur de compilation :
Nombre d'arguments incorrect où affectation de propriété incorrecte


Quelqu'un sait d'où ce problème peut venir ?

Sachant que j'ai viré le début et la fin de la fonction publique, qui elle aussi me posait problème :

For i = Len(DNS) To 1
    If Chr$(DNS, Len(DNS), i) <> "-" Then
        lieu = c
        Exit Function
    Else
        c = Chr$(DNS, Len(DNS), i) & c
    End If
Nexi i
0

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

Posez votre question
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
2 avril 2008 à 10:49
Bonjour,

Pfffff je dois avoir besoin de repos moi .. remplace Chr$ (qui n'a rien avoir là dedans) et met Mid(DNS, Len(DNS), i) = "-" Then ....

;o)

polux
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
2 avril 2008 à 11:01
annule et remplace le pécédent ... vivement les vacances ^^

For i = Len(DNS) To 1 Step -1
        If Mid(DNS, i, 1) = "-" Then
            lieu = c
            Exit Function
        Else
            c = Mid(DNS, i, 1) & c
        End If
Next i


Testé et approuvé ...

;o)

polux
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
2 avril 2008 à 11:10
Tout fonctionne absolument à merveille :)

Merci pour tout tes conseils, problème résolu ;-)

P.S.: j'ai remplacé le exit function par exit for, le fait d'avoir mis une fonction dans mon sub m'a crée plein de merdes (remplacement du end sub par end function, ajout d'un exit function a l'avant derniere ligne) bref...c'est reglé, et c'est le principal !
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
2 avril 2008 à 12:23
Content pour toi et désolé pour les bourdes que j'ai commises ... (c'est quand les vacances ??? ... par encore ? .. bon ok, je sors ...)

;o)

polux
0