Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

[C#] connaitre le nombre de ligne sans parcourir fichier



  1. #1
    jepoirrier

    Question [C#] connaitre le nombre de ligne sans parcourir fichier


    ------

    Bonjour,
    J'écris un petit programme en C# (le langage m'est imposé) qui doit ouvrir un fichier texte contenant x colonnes de nombres flottants (séparés par des espaces), sur y lignes. A priori, personne ne connait ces nombres x et y. La solution que j'ai trouvée nécessite :
    - une ouverture du fichier (on compte les colonnes sur la première ligne avec une expression régulière)
    - un premier parcours de ce fichier pour compter le nombre de lignes
    - une fermeture du fichier
    - une ouverture du fichier
    - un second parcours du fichier pour peupler le tableau aux bonnes dimensions x et y
    - une fermeture du fichier

    Est-ce qu'il n'y a pas moyen de faire plus simple et d'éviter de parcourir 2 fois le fichier ? Car, sur des petits fichiers, 2 parcours sont vites réalisés ; mais quand le fichier fait 137 Mo ...

    Un grand merci d'avance.
    Jean-Etienne

    -----

  2. Publicité
  3. #2
    jepoirrier

    Post Re : [C#] connaitre le nombre de ligne sans parcourir fichier

    Pour ceux que çà intéresse, voici le code actuel (trop long à mettre dans le premier message) :
    Code:
    int i; // variable temporaire de comptage
    int ncol; // Nombre de colonnes
    int nlignes; // Nombre de lignes
    
    i = 0; // Initialisation initiale :-)
    
    FileStream fs = new FileStream("data.dat", FileMode.Open, FileAccess.Read, FileShare.None);
    StreamReader sr = new StreamReader(fs);
    
    string s = sr.ReadLine(); // Lit la première ligne
    nlignes = 1;
    
    // Recherche du nombre de colonnes, en comptant le nombre d'espaces
    Regex exp = new Regex(@"\s", RegexOptions.Compiled); // definit une expression
    MatchCollection matchList = exp.Matches(s); // matche l'expression sur la chaine s
    ncol = matchList.Count; // compte le nombre d'occurences de l'espace
    Console.WriteLine("Nombre de colonnes : " + ncol.ToString());
    
    // Parcours du fichier à la recherche du nombre de lignes
    // Je n'ai pas trouvé comment faire autrement car, sur un fichier texte
    //    de 137 Mo, parcourir 2 fois, c'est lourd !
    
    while(s != null)
    {
    	s = sr.ReadLine();
    	nlignes++;
    }
    
    sr.Close(); // Fermeture du Stream
    fs.Close(); // Fermeture du fichier
    
    // Création du tableau des données (floats)
    
    float[][] f = new float[nlignes][ncol];
    
    // On recommence sur le fichier ; ce n'est pas tres optimisé ... 
    
    FileStream fs = new FileStream("data.dat", FileMode.Open, FileAccess.Read, FileShare.None);
    StreamReader sr = new StreamReader(fs);
    
    string s = sr.ReadLine(); // Lit la première ligne
    etc.

  4. #3
    zoup1

    Re : [C#] connaitre le nombre de ligne sans parcourir fichier

    Rien ne t'empêche d'allouer le tableau dans lequel tu stockes les données de façon différente. As tu besoin que l'allocation soit faites de façon continue ?
    Sinon, il suffit d'allouer le tableau ligne à ligne en faisant un tableau de pointeurs sur des lignes...
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.

  5. #4
    jepoirrier

    Re : [C#] connaitre le nombre de ligne sans parcourir fichier

    Merci Zoup1 mais, bien que le C# connaisse les pointeurs, il en décourage fortement l'usage. Si je devais écrire ce programme en C++, ce serait plus facile pour moi (allocation dynamique et agrandissement "à la carte" du tableau lors du parcours pour le comptage des lignes, comme tu le proposes). Mais je dois l'écrire en C# ...

    Je me suis dit que je pouvais utiliser les ArrayList mais cela correspond à un vecteur d'objets (flottants, dans mon cas) et pas un tableau d'objets. Ou je n'ai pas très bien compris comment faire simplement un tableau avec les ArrayLists.

  6. A voir en vidéo sur Futura
  7. #5
    zoup1

    Re : [C#] connaitre le nombre de ligne sans parcourir fichier

    Je dois bien avouer que je ne connais pas le C#... je pourrais pas plus t'aider, désolé..
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.

Discussions similaires

  1. test bus can sans driver de ligne
    Par philippel13 dans le forum Électronique
    Réponses: 3
    Dernier message: 08/11/2007, 21h20
  2. Internet sans ligne téléphonique
    Par Antikhippe dans le forum Internet - Réseau - Sécurité générale
    Réponses: 15
    Dernier message: 28/06/2007, 18h15
  3. nouvelle ligne free sans ligne france télécom
    Par ovaline dans le forum Internet - Réseau - Sécurité générale
    Réponses: 6
    Dernier message: 11/04/2006, 16h50
  4. comment connaitre le nombre de cellule dans une colonie?
    Par junitodelvolo dans le forum Biologie
    Réponses: 6
    Dernier message: 23/03/2006, 09h24
  5. Parcourir un reseau sous dos !!
    Par philkeeper dans le forum Internet - Réseau - Sécurité générale
    Réponses: 2
    Dernier message: 30/01/2004, 22h44
Découvrez nos comparatifs produits sur l'informatique et les technologies.