Scan d'un fichier texte

Résolu
babaOrhumette Messages postés 104 Date d'inscription mardi 14 avril 2009 Statut Membre Dernière intervention 7 avril 2019 - 8 févr. 2010 à 13:46
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 - 15 avril 2010 à 10:53
Bonjour,

Je me permets de créer un nouveau sujet car je ne trouve pas forcement ce qu'il me faudrait sur le web.

J'espère ne pas m'être trompé de section, si c'est le cas, je m'en excuse.

Voilà, j'ai crée une fonction qui me donne un nombre entre 1 à 20 inclus et le ressort sort une Textbox1.
Dans un fichier .txt, chaque nombre correspond à un nom. Extrait :
...
12 George Bagnole
13 Gilberte Osson
14 Maurice D. Mouson
15 Samir MBala Frurk
...

J'aimerai un code simple qui scan le fichier .txt pour en ressortir le nom correspondant au nombre sorti dans la TextBox1 sur une nouvelle TextBox2.

En espérant avoir été la plus claire possible, je vous remercie encore de vos précieuses aides passées et futures.

Bonne journée.

7 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
8 févr. 2010 à 13:57
Salut

Pour scanner le fichier, tu le lis ligne par ligne (StreamReader.ReadLine()) et tu regarde si ta ligne commence par ton numéro
if (maLigne.StartsWith(monNombre.ToString() + " ")) ...
Après, il te suffit de mettre la ligne (en enlevant le chiffre du début de la ligne) dans la textbox
maTextBox.Text = maLigne.Replace(monNombre.ToString() + " ", "");

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
3
mkl238 Messages postés 10 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 10 février 2010
8 févr. 2010 à 20:19
Bonjour,

A vue de nez je dirais que c'est parce que ton fichier ne contient pas 20 lignes...
Vérifie s'il y a encore des lignes avec la méthode Streamreader.Peek():

string path = @"c:\Montexte.txt";

using(StreamReader reader = new StreamReader(path))
{
 while (reader.Peek() >= 0)
 {
   string maligne = reader.ReadLine();
   if (maligne.StartsWith(nombretrouve.ToString() + " "))
   { 
     ligne.Text = "blabla";
   }
 }
}
3
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
9 févr. 2010 à 09:42
Une fois que tu as trouvé ta ligne, tu peux également directement sortir de ta boucle avec un break. De plus, plutôt que d'utiliser un for, tu peux utiliser un while dont tu ne sors que si la ligne a été trouvée ou que tu es arrivé à la fin de ton document.

string path = @"c:\Montexte.txt";

StreamReader reader = new StreamReader(path);
string maligne;
do // début de boucle
{
    maligne = reader.ReadLine();
    if (maligne != null) // S'il y a une nouvelle ligne (qu'on est pas à la fin du fichier)
    {
        if (maligne.StartsWith(nombretrouve.ToString()))
        {
            ligne.Text = maligne.Replace(nombretrouve.ToString() + " ", "");
            break; // Si on a trouvé la ligne, on sort de la boucle
        }
    }
} while(maligne != null); // On recommence la boucle tant qu'il reste des lignes


Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
3
babaOrhumette Messages postés 104 Date d'inscription mardi 14 avril 2009 Statut Membre Dernière intervention 7 avril 2019 1
8 févr. 2010 à 19:30
Merci beaucoup, je galère un peu, beaucoup même.

string path = @"c:\Montexte.txt";

                        StreamReader reader = new StreamReader(path);
                        for (int i = 0; i < 20; i++)
                        {
                            
                            string maligne = reader.ReadLine();
                            if (maligne.StartsWith(nombretrouve.ToString() + " "))
                            { 
                            ligne.Text = "blabla";
                            }
                        }

if (maligne.StartsWith(nombretrouve.ToString() + " ")) me donne l'erreur L'exception NullReferenceException n'a pas été gérée

Que fais-je de mal?

Merci.
0

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

Posez votre question
babaOrhumette Messages postés 104 Date d'inscription mardi 14 avril 2009 Statut Membre Dernière intervention 7 avril 2019 1
8 févr. 2010 à 20:34
Lol, ah bah oui c'était ça.
Merci à vous deux, c'était très sympa.

Le code :

string path = @"c:\Montexte.txt";

                        StreamReader reader = new StreamReader(path);
                        for (int i = 0; i < 9; i++)
                        {

                            string maligne = reader.ReadLine();
                            if (maligne.StartsWith(nombretrouve.ToString()))
                            {
                                ligne.Text = maligne.Replace(nombretrouve.ToString() + " ", ""); 
                            }
                        }
0
jeMarley Messages postés 7 Date d'inscription jeudi 15 avril 2010 Statut Membre Dernière intervention 10 mai 2010
15 avril 2010 à 09:51
juste une question "si on connait le nom d'un fichier est ce qu'on afficher son chemin d'accès"par exemple:............(notepad.exe)
????et il me retourne le chemin ver notepad.bref comment faire en Csharp pour recevoire le chemin d'accès d'un fichier conaissant son nom????
bob
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
15 avril 2010 à 10:53
De base, on ne peut pas, tout simplement car deux fichiers peuvent avoir le même nom et un chemin d'accès différent.

Cependant, pour des programmes comme notepad, tu peux retrouver son chemin d'accès en regardant les variables d'environnement, puisque le dossier dans lequel le programme se trouve est dans la variable path (c'est grâce à ça que tu peux faire Démarrer → Exécuter → Notepad sans avoir à préciser son chemin d'accès).

Sinon, il faut que tu fasses un système de recherche récursive pour trouver tous les fichiers ayant le nom que tu cherches (mais là ça deviendra extrêmement long...)

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
0
Rejoignez-nous