Lecture de ligne dans un fichier texte [Résolu]

Signaler
Messages postés
43
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
6 septembre 2007
-
Messages postés
25
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
28 août 2007
-
Bonjour,

je suis grand débutant en C # et je n'arrrive pas à lire un fichier texte.
Je voudrais stocker chaque ligne dans l'élément n°i d'un tableau pour le fichier que j'ai préalablement sélectionner, openfiledialog1.filenames(2) par exemple

 

using

System;
using

System.Collections.Generic;
using

System.ComponentModel;
using

System.Data;
using

System.Drawing;
using

System.Text;
using

System.Windows.Forms;
using

System.IO; 

namespace

test{

public
partial
class
Form1 :
Form{

   public Form1()   {

      InitializeComponent();

   }

 

   private
void button1_Click(
object sender,
EventArgs e)   {
      openFileDialog1.DefaultExt "txt";      openFileDialog1.Filter

"TXT files (*.txt)|*.txt|All files (*.*)|*.*";      openFileDialog1.Title =

"Select input txt file";
      openFileDialog1.Multiselect true;      openFileDialog1.FileName Input.Text;

      if (openFileDialog1.ShowDialog() ==
DialogResult.OK)         {

         Input.Text =
Path.Combine(
Path.GetDirectoryName(Input.Text),
Path.GetFileNameWithoutExtension(Input.Text) +
".out" +
Path.GetExtension(Input.Text));}

 

}

 }

}

}

7 réponses

Messages postés
25
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
28 août 2007

OK...

D'abord, vu que les valeurs A, B et C sont associées, je pense qu'il vaudrait mieux créer une structure pour les regrouper sous forme de triplets, par exemple :

    struct Triplet
    {
        public double A;
        public double B;
        public double C;
    }

Ensuite tu manipuleras un tableau de triplets plutot que 3 tableaux. Vu que tu ne connais pas à l'avance le nombre de ligne, il vaut mieux utiliser une liste dynamique de triplets :
List<Triplet> liste = new List<Triplet>();

Pour l'algorithme global, tu peux faire un truc comme ca :

Initialiser la liste;
Pour chaque fichier sélectionné
{
    Pour chaque ligne dans le fichier
    {
       Lire les valeurs (en utilisant String.Split);
       Créer un nouveau triplet t avec ces valeurs;
       Ajouter t à la liste ( liste.Add(t) );
    }
}
Messages postés
25
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
28 août 2007

Je ne suis pas sûr de bien comprendre ton problème... tu cherches à obtenir la liste des fichiers sélectionnés, ou à lire le contenu de ces fichiers ?

Tu peux obtenir les chemins d'accès des fichiers en faisant un foreach sur la collection Filenames du dialogue :
    foreach (string filename in openFileDialog1.Filenames)
    {
       // faire qqch avec filename
    }

Pour lire le contenu d'un fichier donné, tu peux faire comme ça :
    StreamReader rd = new StreamReader(filename);
    string line;
    while ((line = rd.ReadLine()) != null)
    {
       // faire qqch avec line
    }
    rd.Close();
Messages postés
43
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
6 septembre 2007

Je n'ai peut être pas été assez clair.
En fait j'ai plusieurs fichiers textes organisés par lignes de la forme

A=4.566 B=6.333 C=7.555
A=8.555 B=6.331 C=9.336
A=7.556 B=9.565 C=8.246
etc

Je veux pouvoir lire des fichiers et en extraire 3 tableaux A, B et C contenant les valeurs numériques associées.
De plus je veux aussi faire une multiselection qui me classe par ordre alphabétique les fichiers qui sont numérotés TM1, TM2, TM3 etc et effecture l'opération précédente pour obtenir des "grands" tableaux contenant les valeurs de A, B et C de l'ensemble des fichiers sélectionné

voili voilou
Messages postés
427
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
29 janvier 2008
1
Salut,

   //declaration du fichier a parcourir
   StreamReader unFic = new StreamReader(unChemin);
   //declaration d'une variable intermediare qui va recuperer chaque streemReader.readline()
   String ligne;
   //on parcour le fichier tant qu'on a des enregistrement
   while((ligne = unFic.ReadLine()) != null)
   {
    //et on affecte chaque ligne du fichier a la collection
    //ici tu va récuperer la ligne de ton fichier vu que le caractere séparateur est un espace tu fais un split sur la ligne         pour voir   un    tableau de 3 caracteres => tu parcour ce tableau et tu le dispatch entre les 3 autres tableaux qui contiennent les valeures A , B , C
   } 
   unFic.Close();

-------------------------------------------http://quoideneufaujourdhui.spaces.live.com
Messages postés
43
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
6 septembre 2007

Merci pour les réponses!!


Mais je ne comprend pas bien ce qui est stocker dans ligne. Il s'agit d'un tableau, d'une chaine de caractères... Quand j'essaie d'afficher sa valeur dans une TextBaox il n'y a rien.



StreamReader



sr =

new



StreamReader
(Nomfichier[0]);


String
ligne;


while
((ligne = sr.ReadLine()) !=

null
){

ligne = sr.ReadLine();

}

sr.Close();

 

Box.Text = ligne;
Messages postés
43
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
6 septembre 2007

Merci pour les réponses!!


Mais je ne comprend pas bien ce qui est stocker dans ligne. Il s'agit d'un tableau, d'une chaine de caractères... Quand j'essaie d'afficher sa valeur dans une TextBaox il n'y a rien.



StreamReader



sr =

new



StreamReader
(Nomfichier[0]);


String
ligne;


while
((ligne = sr.ReadLine()) !=

null
){

ligne = sr.ReadLine();

}

sr.Close();

 

Box.Text = ligne;
Messages postés
25
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
28 août 2007

La fonction StreamReader.ReadLine() lit une ligne du fichier tant que la fin du fichier n'est pas atteinte. Elle renvoie une chaine de caractère (string), par exemple "A=4.566 B=6.333 C=7.555". Quand la fin du fichier est atteinte, la fonction renvoie null (d'où le test dans le while)