[..] Tester un texte complexe dans fichier html

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

[..] Tester un texte complexe dans fichier html

#1

Message par pierrotm777 »

Bonjour,

J'ai besoin de remplacer dans un fichier html une ligne du genre:
//map.addOverlay(new GLayer("org.wikipedia.en"))

par

map.addOverlay(new GLayer("org.wikipedia.en"))

En fait avec le même bouton, soit je rend la fonction active dans le fichier html (pas de // avant la ligne), soit je la désinhibe (// devant la ligne)

Je teste donc la présence de la ligne avec les // avec la commande 'StringInStr' mais cela me semble ne pas fonctionner dans mon cas.

Ma ligne est-elle trop complexe?

Y aurait-il une solution plus correcte ?

Code : Tout sélectionner

[spoiler=]  If $cmd = "WIKIPEDIA" Then;affichage ou pas des données issues de Wikipedia
      $cmd = ""
        If StringInStr($url,'//map.addOverlay(new GLayer("org.wikipedia.en"))') Then
            global $wikipedia = "off"
            _ReplaceStringInFile($url, '//map.addOverlay(new GLayer("org.wikipedia.en"))', 'map.addOverlay(new GLayer("org.wikipedia.en"))', 1, 0) ;Paramètre 1 = Sensible a la casse || Paramètre 0 = Remplace le premier trouvé
            _IEAction($ie, "refresh")
            $wikipedia="on"
        Else
            global $wikipedia = "on"
            _ReplaceStringInFile($url, 'map.addOverlay(new GLayer("org.wikipedia.en"))', '//map.addOverlay(new GLayer("org.wikipedia.en"))', 1, 0) ;Paramètre 1 = Sensible a la casse || Paramètre 0 = Remplace le premier trouvé
            _IEAction($ie, "refresh")
            $wikipedia="off"
        EndIf
    EndIf[/spoiler]
Merci pour votre aide !
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..]Tester la présence d'un texte complexe dans fichier html

#2

Message par pierrotm777 »

Je viens de tester une autre solution avec l'état défini dans un fichier ini .
J'arrive à passer de off à on mais pas de on à off .

Code : Tout sélectionner

    IniWrite("Settings.ini", "Google Maps", "Wikipedia", "off")
    global $Wikipedia = IniRead("Settings.ini", "Google Maps", "Wikipedia", "")

Code : Tout sélectionner

[spoiler=]  If $cmd = "WIKIPEDIA" Then;affichage ou pas des données issues de Wikipedia
      $cmd = ""
        Switch $wikipedia
            Case "off"
                _ReplaceStringInFile($url, '//map.addOverlay(new GLayer("org.wikipedia.en"))', 'map.addOverlay(new GLayer("org.wikipedia.en"))', 1, 0) ;Paramètre 1 = Sensible a la casse || Paramètre 0 = Remplace le premier trouvé
                _IEAction($ie, "refresh")
                IniWrite("Settings.ini", "Google Maps", "Wikipedia", 'on')

            Case "on"
                _ReplaceStringInFile($url, 'map.addOverlay(new GLayer("org.wikipedia.en"))', '//map.addOverlay(new GLayer("org.wikipedia.en"))', 1, 0) ;Paramètre 1 = Sensible a la casse || Paramètre 0 = Remplace le premier trouvé
                _IEAction($ie, "refresh")
                IniWrite("Settings.ini", "Google Maps", "Wikipedia", 'off')
        EndSwitch
    EndIf[/spoiler]
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [..] Tester un texte complexe dans fichier html

#3

Message par ZDS »

Vérifie si par hasard tu n'as pas laissé une ligne en début du programme qui réinitialise la valeur à off (Ca peut paraitre bete, mais une écriture de on>off qui fonctionne mais pas de off>on ou inversement, ça n'a pas de sens :s)
Peux tu poser la totalité du script pour vérifier si ça vient pas de là?

Sinon pour le StringReplaceInFile, je suis plutôt du genre à recréer ma fonction avec les fonctions de base pour vérifier si ça ne viendrait pas de là.
Un FileOpen puis une boucle sur FileReadLine, sur chaque itération une recherche par une RegExp, c'est beaucoup plus souple, et tu sauras d'où vient ton soucis. Surtout que le StringReplace peut te poser des double-commentaires, remplace "map(...)" par "//map(...)" alors que le texte est déjà en "//map(...)", ça quadruple les slashs, d'où ma proposition de RegExp.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Tester un texte complexe dans fichier html

#4

Message par pierrotm777 »

Donc , voici le programme en entier et le fichier html à modifier en attaché!

Code : Tout sélectionner

[spoiler=]#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=googletrack.ico
#AutoIt3Wrapper_outfile=googletrack.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
#include <file.au3>

$hwmd_Reciver = GUICreate("GoogleMapsTrack", 800, 700, 0, 0,$WS_OVERLAPPEDWINDOW)
global $wikipedia="off"

$OK = GUICtrlCreateButton("OK", 620, 650, 60, 40)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")

$WikipediaONOFF = GUICtrlCreateButton("Wikipedia", 700, 600, 80, 40)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")

$Annuler = GUICtrlCreateButton("Annuler", 700, 650, 80, 40)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")

GUICtrlCreateLabel("Ville de Départ",80,630,200,20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Ville1 = GUICtrlCreateInput("", 80, 660, 250, 20)
GUICtrlSetTip(-1, "Entrez une Ville de départ")

GUICtrlCreateLabel("Ville d'Arrivée",350,630,200,20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Ville2 = GUICtrlCreateInput("", 350, 660, 250, 20)
GUICtrlSetTip(-1, "Entrez une Ville d'arrivée")


    $url=@ScriptDir & "\gmapsroute.html";lecture de la page html

    _IEErrorHandlerRegister()
    $ie = _IECreateEmbedded()

    $ieobject = GUICtrlCreateObj($ie, -14, -14, 805, 600)

    FileCopy($url,$url&"_tmp")
    local $lat = "40"
    _ReplaceStringInFile($url, "LATITUDE", $lat, 1, 0) ;Paramètre 1 = Sensible a la casse || Paramètre 0 = Remplace le premier trouvé
    local $lon = "-100"
    _ReplaceStringInFile($url, "LONGITUDE", $lon, 1, 0) ;Paramètre 1 = Sensible a la casse || Paramètre 0 = Remplace le premier trouvé
    local $ZoomLevel = "12"
    _ReplaceStringInFile($url, "ALTITUDE", $ZoomLevel, 1, 0) ;Paramètre 1 = Sensible a la casse || Paramètre 0 = Remplace le premier trouvé

    _IENavigate($ie, $url, 0)
    Sleep(2000)

    $oForms=_IEFormGetCollection($ie);,0)
    $nb_form=@extended

    ConsoleWrite("nb form = "&$nb_form&@CRLF)
    Dim $formulaire0,$formulaire1
    for $i = 0 to $nb_form - 1
 ;       MsgBox(0, "Form Info", $oForm.name)
        Assign("formulaire"&$i,_IEFormGetCollection($ie,$i))
    Next

    ConsoleWrite(@error&@CRLF)
    $oQueryfrom=_IEFormElementGetCollection( $formulaire0,0)
    ConsoleWrite(@error&@CRLF)
    $oButtonfrom=_IEFormElementGetCollection( $formulaire0,1)
    $oQueryto = _IEFormElementGetCollection( $formulaire1,0)
    ConsoleWrite(@error&@CRLF)
    $oButtonto=_IEFormElementGetCollection( $formulaire1,1)

    GUISetState()
    GUISetState(@SW_SHOW)


While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE , $Annuler
            Exit

        Case $OK
            local $depart = GUICtrlRead($Ville1)
            _IEFormElementSetValue ($oQueryfrom, $depart)
            _IEAction($oButtonfrom,"click")
            Sleep(2000)
            ConsoleWrite(@error&@CRLF)

            local $arrivee = GUICtrlRead($Ville2)
            _IEFormElementSetValue ($oQueryto, $arrivee)
            _IEAction($oButtonto,"click")
            sleep(3000)
            If FileExists($url&"_tmp") Then FileCopy($url&"_tmp",$url,1)
            FileDelete($url&"_tmp")

        Case $WikipediaONOFF
            Switch $wikipedia
                Case "off"
                    _ReplaceStringInFile($url, '//map.addOverlay(new GLayer("org.wikipedia.en"))', 'map.addOverlay(new GLayer("org.wikipedia.en"))', 1, 0) ;Paramètre 1 = Sensible a la casse || Paramètre 0 = Remplace le premier trouvé
                    _IEAction($ie, "refresh")
                    IniWrite("Settings.ini", "Google Maps", "Wikipedia", 'on')

                Case "on"
                    _ReplaceStringInFile($url, 'map.addOverlay(new GLayer("org.wikipedia.en"))', '//map.addOverlay(new GLayer("org.wikipedia.en"))', 1, 0) ;Paramètre 1 = Sensible a la casse || Paramètre 0 = Remplace le premier trouvé
                    _IEAction($ie, "refresh")
                    IniWrite("Settings.ini", "Google Maps", "Wikipedia", 'off')
            EndSwitch

    EndSwitch
Wend[/spoiler]
Les lignes en rouge sont celle que je souhaite valider ou pas avec un bouton pour chaque commande.
Pour l'instant la Gui ne comporte que le bouton pour 'Wikipedia'.

Code : Tout sélectionner

      var map = new GMap(document.getElementById("map"));
      map.addControl(new GLargeMapControl3D());
      map.addControl(new GMapTypeControl());
      [color=#FF0000]//map.addControl(new GOverviewMapControl());
      //map.addControl(new GHierarchicalMapTypeControl());
      //map.addControl(new google.maps.NavLabelControl(), new google.maps.ControlPosition(G_ANCHOR_TOP_LEFT, new google.maps.Size(65,5)));[/color]
      map.setCenter(new GLatLng(40,-100),12);
      map.enableScrollWheelZoom(); 
[color=#FF0000]   //map.setMapType(G_NORMAL_MAP);
      //map.setMapType(G_SATELLITE_MAP);
      //map.setMapType(G_HYBRID_MAP);[/color]
      //map.setUIToDefault();
[color=#FF0000]   //map.addOverlay(new GLayer("com.panoramio.all"));
      //map.addOverlay(new GLayer("org.wikipedia.en"));[/color]
Fichiers joints
gmapsroute.zip
(3.15 Kio) Téléchargé 67 fois
Répondre