Erreur d'accès

theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 - 16 févr. 2012 à 13:05
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 - 29 févr. 2012 à 16:11
Bonjour tous le monde !

J'ai cherché une solution pour récupérer un mot précis et aléatoire au milieu d'une chaîne dans un texte de plusieurs ligne.

J'ai réussi, je veux juste savoir si il n'y a pas un moyen plus "propre" pour le faire.

Merci d'avance.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        static long CountLines(string fileName)
        {
            char[] buffer = new char[32 * 1024]; //lit 32K char à chaque fois
            System.IO.TextReader reader;
            int total = 1; //tout fichier contient au moins une ligne
            int read;
            if (System.IO.File.Exists(fileName))
            {
                reader = System.IO.File.OpenText(fileName);
                while ((read = reader.Read(buffer, 0, buffer.Length)) > 0)
                {
                    for (int i = 0; i < read; i++)
                    {
                        if (buffer[i] == '\n')
                        {
                            total++;
                        }
                    }
                }
                //nettoyage des variables
                reader.Close();
                reader.Dispose();
                reader = null;
            }
            return total;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string sUser = Environment.UserName;
            string sComputer_name = Environment.MachineName;
            string sFolder = @"C:\Users" + sUser + @"\AppData\Roaming\Thunderbird\Profiles";

            foreach (String s in Directory.GetDirectories(sFolder, "*.default"))
                sFolder = s;

            sFolder = Path.Combine(sFolder, "prefs.js");

            string test = "01NEUILLY.filename";
            string test2 = "02COLMAR.filename";
            string test3 = "03FASSETTA.filename";
            string test4 = "10GUKGEMS.filename";
            string neuilly "", colmar "", fassetta = "", guk = "";
            char[] trim_cara = { '"', ')', ';'};

            String[] line = File.ReadAllLines(sFolder);
            long ln = CountLines(sFolder);


            for (int i = 12; i < ln - 1; i++)
            {
                if (line[i].ToLower().Contains(test.ToLower()))
                {
                    neuilly = i.ToString();
                }
                else if (line[i].ToLower().Contains(test2.ToLower()))
                {
                    colmar = i.ToString();
                }
                else if (line[i].ToLower().Contains(test3.ToLower()))
                {
                    fassetta = i.ToString();
                }
                else if (line[i].ToLower().Contains(test4.ToLower()))
                {
                    guk = i.ToString();
                }
            }
            string result = line[Convert.ToInt32(colmar)].Substring(47).Trim(trim_cara);
            richTextBox1.Text = result;
        }
    }
}

5 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
16 févr. 2012 à 13:20
Bonjour,

Je ne sais pas quel mot tu cherches à récupérer mais, pour le faire proprement, tu peux utiliser les expressions régulières.

Ta chaine de caractères suit l'expression régulière suivante : [0-9][0-9][^0-9]*\.filename tu n'as qu'à mettre des parenthèses autour de la sous expression que tu cherches à capturer et le tour est joué.
0
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 2
16 févr. 2012 à 13:53
Salut Julien,

bien ce que je pensais , sinon y'a que les Regular .
Est-ce plus performant ? Je connais pas du tous les regulars.. J'ai essayé une fois , j'ai eu mal au crane pendant une semaine .


-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
16 févr. 2012 à 13:57
Oui, c'est plus performant, et ce n'est pas si complexe que ca en a l'air...
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
16 févr. 2012 à 17:38
Bonsoir,
cette source m'a permis de me mettre aux Regex


Whismeril
0

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

Posez votre question
theflayer Messages postés 125 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 21 juin 2015 2
29 févr. 2012 à 16:11
J'avais oublié de te remercier whismeril.
Merci :)


-La constante d'une personne est la variable d'une autre.
-Il y a deux manières d'écrire des programmes sans erreurs. Seule la troisième marche
-Tout programme a (au moins) deux buts : celui pour lequel il a été écrit, et celui pour lequel il ne l'a pas
0
Rejoignez-nous