Partage
  • Partager sur Facebook
  • Partager sur Twitter

PERL - Extraire une chaine de caractere et plus...

    14 décembre 2023 à 2:25:05

    Bonjour à tous,

    Alors voilà, j'aurais besoin d'un petit coup de main sur de l'automatisation de fichier.

    Je m’explique, a chaque fois j'ai deux fichiers quasi-identiques.

    Il faudrait que je supprime ce qui se trouve entre toutes les chaines de caractères commençant par A1 00 04 et finissant par 81 00 04 dans le fichier X, sachant que cela se répète plusieurs fois.

    Et que je remplace ces chaines manquantes par celles du fichiers M qui commencent par les mêmes numéros A1 00 04 et terminent par 81 00 04 et tout cela dans le bon ordre, du début à la fin, pas de mélange, car à l'intérieur des chaines, tout est différent et cela modifierait le fichier.

    Merci pour le coup de main car là, je nage vraiment.....

    • Partager sur Facebook
    • Partager sur Twitter
      14 décembre 2023 à 8:34:53

      Bonjour,

      Tu peux peut être présenté un début de code, au moins la lecture du fichier, l'écriture. Le plus complexe étant d'extraire et remplacer les sections. Tu crées des fonctions pour chaque étape de résolution.

      • Partager sur Facebook
      • Partager sur Twitter

      Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
      La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

        14 décembre 2023 à 10:56:41

        Merci Fred,

        Mais je ne sais vraiment pas comment créer tout ça et c'est pour cela que je demande un coup de main.

        Penses-tu déjà que cela soit faisable?

        • Partager sur Facebook
        • Partager sur Twitter
          14 décembre 2023 à 11:10:23

          Bien sûr que c'est faisable et même assez simple... Mais si je fais le travail à ta place, je passerai par le même déroulement que toi car je ne connais pas perl mais le langage python, je devrai me taper des tutos à lire et faire des tests.

          T'es censé en connaître plus que moi en perl... Ouvrir un fichier et écrire dans un fichier ce n'est pas la mer à boire.

          • Partager sur Facebook
          • Partager sur Twitter

          Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
          La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

            14 décembre 2023 à 11:13:59

            Merci pour ton retour.

            Et en langage Python, tu pourrais me créer ce code s’il te plaît.

            -
            Edité par CédricRobin3 14 décembre 2023 à 13:23:24

            • Partager sur Facebook
            • Partager sur Twitter
              14 décembre 2023 à 14:45:31

              entre ton fichier X et M, il y a toujours le même nombre de lignes commençant par A1 00 04 et se terminant par 81 00 04 ?
              • Partager sur Facebook
              • Partager sur Twitter
                14 décembre 2023 à 18:13:41

                Salut umfred,

                Il s'agit dans le fichier de la partie Hexa et il n'y a pas forcément le même nombre de lignes.

                En fait c'est comme cela que je souhaiterais remplacer toutes les chaines de caractères commençant par "A1 04 04" et finissant par "00 00 00 00 00" présentes dans le fichier "X.SGA" par celles du fichier "M.SGA" qui elles commencent par "81 00 04" et finissent par "00 00 00 00 00".

                Bien sûr, il faut que cela soit dans l'ordre de lecture : 1ère chaine de caractère trouvée dans le fichier "X.SGA" remplacée par la 1ère chaine de caractère du fichier "M.SGA", puis 2ème chaine de caractère trouvée dans le fichier "X.SGA" remplacée par la 2ème chaine de caractère du fichier "M.SGA" et ainsi de suite.

                SI tu veux, voici les deux fichiers que j'héberge sur mon drive : https://drive.google.com/file/d/1-W8ktJSKvoHClkPCGVMZln1eRyzhPJwN/view?usp=sharing

                EDIT :

                C'est bon, en fouillant et en comprenant Powershell j'ai réussi a faire ma commande et ça fonctionne :

                # Chemins des fichiers
                $cheminXSGA = "C:\Test\TX.SGA"
                $cheminMSGA = "C:\Test\TM.SGA"

                # Lire le contenu du fichier M.SGA
                $contenuMSGA = Get-Content -Path $cheminMSGA

                # Lire le contenu du fichier X.SGA
                $contenuXSGA = Get-Content -Path $cheminXSGA

                # Trouver les occurrences de "A1 04 04" suivies de n'importe quel caractère et terminant par "00 00 00 00 00"
                $motifRegex = "A1 04 04.*?00 00 00 00 00"

                # Récupérer toutes les correspondances dans le fichier X.SGA
                $correspondances = [regex]::Matches($contenuXSGA, $motifRegex)

                # Parcourir les correspondances et les remplacer par les valeurs du fichier M.SGA
                foreach ($correspondance in $correspondances) {
                    $contenuXSGA = $contenuXSGA -replace $correspondance.Value, $contenuMSGA
                }

                # Écrire le contenu modifié dans le fichier X.SGA
                $contenuXSGA | Set-Content -Path $cheminXSGA

                -
                Edité par CédricRobin3 14 décembre 2023 à 21:38:37

                • Partager sur Facebook
                • Partager sur Twitter

                PERL - Extraire une chaine de caractere et plus...

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                • Editeur
                • Markdown