Partage
  • Partager sur Facebook
  • Partager sur Twitter

Regex ne modifie qu'a moitié mon fichier

    29 mai 2019 à 17:18:20

    Bonjour,

    J'ai un formulaire winform qui me permet de récupérer des variables que je mets ensuite dans un fichier batch.

    Pour cela j'utilise un regex qui me permet de modifier les variables de mon .bat par celles de mon winform.

    Le problème est que toutes les variables ne sont pas modifiées.

    Voici un exemple du .bat après regex :

    reg add "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources" /v ABC4_DIFA10 /d "SQL Server" /f
    reg add HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ABC4_DIFA%nNDIF% /f
    reg add HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ABC4_DIFA%nNDIF% /v Driver /d C:\Windows\system32\SQLSRV32.dll /f
    reg add HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ABC4_DIFA%nNDIF% /v Server /d WMDRTSVDIFA0010 /f
    reg add HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ABC4_DIFA%nNDIF% /v LastUser /d SYSADM /f


    Voici la fonction regex :

    System.Text.RegularExpressions.Regex myRegex = new Regex("(%nDIF%)");
                chaine = myRegex.Replace(chaine, nDIF);
                myRegex = new Regex("(%name%)");
                chaine = myRegex.Replace(chaine, name);
                myRegex = new Regex("(%dhcp%)");
                chaine = myRegex.Replace(chaine, dhcp);
                return chaine;

    Le 10 que j'ai mit en gras pour le .bat était un %nDIF% dans le fichier de base.

    Donc voila, le .bat n'est pas complet mais c'est le seul endroit ou %nDIF% n'est pas modifié.

    Si vous avez besoin de précision ou quoi que ce soit, n'hésitez pas.

    Merci d'avances pour vos réponses.

    • Partager sur Facebook
    • Partager sur Twitter
      4 juin 2019 à 19:33:54

      Il y a quand même pas mal de subtilité que vous ne vérifiez absolument pas dans votre code : cf. la documentation

      https://docs.microsoft.com/fr-fr/dotnet/api/system.text.regularexpressions.regex.replace?view=netframework-4.8#System_Text_RegularExpressions_Regex_Replace_System_String_System_String_

      (entre autre, faire un ToString sur le second paramètre pour prendre la bonne surcharge, la gestion de la syntaxe avec des "$" dans les chaines de remplacement que vous ne gérez absolument pas (escaping), etc...)

      Et vos expressions régulières ne sont pas très orthodoxes non plus.

      J'ai du mal à comprendre pourquoi passer par des regex quand des simples replaces de string fait le taf.

      https://docs.microsoft.com/fr-fr/dotnet/api/system.string.replace?view=netframework-4.8

      return chaine.Replace("%nDIF%",nDIF).Replace("%name%",name).Replace(%dhcp%,dhcp);

      (l'escaping n'est toujours pas fait mais il est bien plus simple qu'avec les Regex)

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

      Regex ne modifie qu'a moitié mon fichier

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown