Partage
  • Partager sur Facebook
  • Partager sur Twitter

Extraire chaîne de caractère c#

Extraire chaîne de caractère entre deux caractères identique

Sujet résolu
    10 juillet 2011 à 18:20:06

    Bonjours a tous,

    Je suis confronté à un problème depuis ce matin, autant dire que je perds un peux la boule, … Bref
    J’ai déjà fouillé de un peu partout des éventuelles réponses à mon problème mais aucune ne fonctionne comme je l’aimerais, …

    Je fais une « moulinette » qui récupérer tous les fichiers d’un répertoire et stocker les informations que je veux (par exemple son nom et sa date de création) dans une listView.
    Je récupère très bien le nom de mes fichiers, mais le nom « entier » des fichiers ne m’intéresse pas, je voudrais récupérer seulement une partie du nom.

    Voici des exemples de fichiers que je récupère :
    OF_713098_essai RS3021CJ_17_4488_17960_pos_1_21_06_11_06_27_48.xml
    SN_71115__essai RS3021CJ_17_4273_16456_pos_1_11_05_11_19_15_21.jpeg

    Et voici la seule partie du nom qui m’intéresse : (en rouge)
    OF_713098_essai RS3021CJ_17_4488_17960_pos_1_21_06_11_06_27_48.xml
    SN_71115__essai RS3021CJ_17_4273_16456_pos_1_11_05_11_19_15_21.jpeg

    Etant donné que j’ai déjà fouillé, … ma 1ere moulinette pour les fichiers .XML je la fait de cette manière :
    //Ajout des items dans la listView
           ListViewItem item = new ListViewItem();
           item.Text = (System.IO.Path.GetFileName(str[i]).Substring(3, 7));
           item.SubItems.Add(date_fichier);
           item.SubItems.Add(System.IO.Path.GetFileName(str[i]));
           listView1.Items.Add(item);
    

    Et ça marche très bien.

    J’ai donc voulu faire pareil pour ma moulinette avec les fichiers .JPEG mais j’ai une erreur :
    « L'index et la longueur doivent faire référence à un emplacement situé dans la chaîne.
    Nom du paramètre : length »


    En rétrécissant le champ de récupération du Substring de cette manière, Substring(3, 6), je n’ai plus de message d’erreur. Mais l’utilisation du Substring me dérange un peux car un coup je serais susceptible de récupéré plus que les chiffres qui m’intéresse et un coup pas assez !

    J’ai donc cherché à récupérer mes caractères de la manière suivante :
    Avec un Split:
    string[] splitted = (System.IO.Path.GetFileName(str[i]).Split('_'));
    
    //Ajout des items dans la listView
    ListViewItem item = new ListViewItem();
    item.Text = splitted[1];
    item.SubItems.Add(date_fichier);
    item.SubItems.Add(System.IO.Path.GetFileName(str[i]));
    ListView2.Items.Add(item);
    

    Et j’ai l’erreur suivante :
    « L'index se trouve en dehors des limites du tableau. »

    Pourtant si j’ai bien compris cela devrais au moins me retourner ce qu’il y a après le premier « _ »…

    En résumé je voudrais savoir si vous sauriez comment je pourrais extraire une partie de caractères délimité par deux caractères identiques ? C’est dire dans mon cas extraire les numéros qui se trouvent entre les deux premier « _ »

    Merci d’avance pour votre aide
    MorganC
    • Partager sur Facebook
    • Partager sur Twitter
      10 juillet 2011 à 19:49:45

      Je dirais que le débuggueur Visual Studio pourra t'apporter la réponse.

      -Si nécessaire, rajoute des étapes dans ton code (genre le "item.Text = (System.IO.Path.GetFileName(str[i]).Substring(3, 7));", tu le casserais en "String txtA = str[i]; String txtB = txtA.Substring(3, 7); String txtC = Path.GetFileName(txtB);")
      -Place un point d'arrêt dans Visual Studio sur la ligne qui précède celle qui plante
      -Exécute ton application en mode debug (avec la touche F5)
      -Une fois arrivé au point d'arrêt, poursuit l'exécution en mode pas-à-pas avec F10 (voir F11 si tu as des méthodes à toi qui seraient susceptible de mal fonctionner)
      -A chaque étape d'exécution, regarde si les variables contiennent bien ce que tu attendais => Si oui, le problème est ailleurs, Si non, le problème n'est plus très loin ^^ .

      Dans la fenêtre "Espion" de Visual Studio, tu as même possibilité d'évaluer des expressions à la volée; très pratique pour savoir ce que retourne une méthode par exemple...
      • Partager sur Facebook
      • Partager sur Twitter
        10 juillet 2011 à 23:18:46

        Merci pour ta réponse Nisnor

        Je crois bien avoir trouvé la solution:
        Je ne sais pas pourquoi encore, mais ma moulinette repère un fichier thumb. ... et c'est pour ça que le subtrsing ne marchait pas car il lui manquait des caractères lorsqu'il était sur le fichier Thumb.

        Donc j'ai essayé avec un autre répertoire que ceux de mes images, un répertoire de PDF et sa marche très bien!
        Par contre lorsque je veux supprimer le fichier Thumb de mon répertoire, celui-ci est introuvable, je ressaierais demain avec un nouveau répertoire d’image, ...

        PS: Je suis un jeune développeur et j'ai un gros penchant pour le graphisme, hors je suis un peu « frustré » de ne pas pouvoir stylisé plus que sa un winForm ... Je me demandais donc si il y existait des programmes qui permettais de créer une interface graphique et ensuite l'importer dans Visual studio, ... ou peut-être même un plugin, ...
        Enfin voilà serai tu m'orienté vers des sites, tuto, livre, ... pour que je puisse réaliser des applications avec des graphismes un peu plus recherché, ...

        Merci encore pour ton aide
        • Partager sur Facebook
        • Partager sur Twitter
          11 juillet 2011 à 9:38:22

          Pour ton problème, le fichier en question est un fichier cacher, donc soit tu le supprimes, soit tu ajoute une condition qui vérifie que le nom de fichier est différent de celui là.
          • Partager sur Facebook
          • Partager sur Twitter
            11 juillet 2011 à 13:39:59

            Les fichiers thumb sont les anciens fichier de cache d'image sous Windows XP et sont effectivement cachés.

            Sous Windows 7, pour afficher les fichiers cachés => Menu démarrer > Panneau de configuration > Passer en affichage différent de "Par catégorie" en haut à droite > Options des dossiers > Onglet "Affichage" > Sous la catégorie "Fichiers et dossiers cachés" > Passer à "Afficher les fichiers, dossier et lecteurs masqués".
            Si ce fichier thumb reste introuvable, c'est qu'il s'agit d'un fichier système (caché) => Retourner dans la configuration "Options des dossiers" > Décocher "Masquer les fichiers protégés du système d'exploitation (recommandé)".

            Pour le designing, WinForm n'est malheureusement pas la technologie la plus adaptée à ce type de tâche. Si tu as la possibilité de passer sur .NET 3.5 SP1 (voir .NET 4), change de technologie et passe sur WPF ou Silverlight; l'un comme l'autre utilisant le GPU via DirectX pour les interfaces graphique, tu peux faire très facilement des interfaces beaucoup plus attractive visuellement.
            • Partager sur Facebook
            • Partager sur Twitter
              11 juillet 2011 à 21:26:14

              Merci pour vos réponses!

              En effet le fichier thumb était bien un fichier caché, mais je ne le voyais pas car c'était un fichier protégé par le système (merci Nisnor). Même si je l'ais supprimé, ... j'ai fait en sorte de ne pas prendre en compte les fichiers de moins de 4 caractaires, comme sa même si ce fichier réaparai il ne pausera plus de problèmes, et dans mon cas un fichier de moins de 4 caractaire ne peux exister, ou alors c'est un fichier éronné...

              Concerant ma question pour récupérer tels ou tels caractaire du nom d'un fichier jai fait de cette manière:

              string nomCompletFichier = (System.IO.Path.GetFileName(str[i]));
              
                    //Récupère le numéro du fichier --> après le 1er "_"
                    char[] splitters = new char[] { '_' };
                    string[] laCase = nomCompletFichier.Split(splitters);
              
                    //Récupère la position de la page du fichier --> après le 7ème "_"
                    char[] splitters2 = new char[] { '_' };
                    string[] laCase2 = nomCompletFichier.Split(splitters);
              
                    string[] tableau = new string[2] { laCase[1], "Pos" + laCase2[7] };
                    string nomRecompose = string.Join("_", tableau);
              
                    //Ajout des items dans la listView
                    ListViewItem item = new ListViewItem();
                    item.Text = nomRecompose;
                    item.SubItems.Add(date_fichier);
                    item.SubItems.Add(System.IO.Path.GetFileName(str[i]));
                    listView1.Items.Add(item);
              


              Et j'obtiens donc ce que je voulais. exemple : "712830_Pos1"

              Merci encore Nisnor pour tes infos supplémentaires, je possède visual studio grace a mon école, et si je ne me trompe pas j'ai bien le framwork 3.5 et 4, dailleur celui que j'ai par défaut est le 4 donc celui avec lequel je suis pour développer cette appli... J'ai déja entendu parlé de Silverlight mais jamais programmé avec, cela permet de faire des effet assé sympa comme le jQuery pour le net par exemple, mais le peu d'application que j'ai utilisé étant programmé avec cette technologie était un peu "foireuse" (lourd au chargement, ...) après cela venai peut-être, voir surement du Pc avec lequel je les ais utilisés...

              Je vais donc dans un premier temps m'intéréssé au WPF, ...

              Salutaion
              • Partager sur Facebook
              • Partager sur Twitter

              Extraire chaîne de caractère c#

              × 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