IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Utiliser un fichier dans une sous-fonction


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Utiliser un fichier dans une sous-fonction
    Bonjour,

    Je lit un fichier binaire dont j'extrais certaines infos que j'écris dans un fichier texte. Mais comme il y a une boucle dedans pour cette opération je comtais la mettre dans une sous-fonction.
    Je n'ai pas d'erreur lorsque je lance le debug mais j'ai l'impression que le programme ne sait plus où était la lecture du fichier. J'ai aussi testé en définissant les 2 fichiers en "private static" en dehors du main, sans plus de résultat.

    Avez-vous une idée pour résoudre ce problème? A la limite si je pouvais récupérer la position actuelle de la lecture du fichier dans un long cela pourrait me suffire pour m'en sortir (ce que je ne sais pas comment récupérer).

    Fonction Main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ...
    string fichier_en_sortie_item;
    StreamWriter fichier_sortie_item = null;
     
    string fichier_data = @"D:\fichier.data";
    BinaryReader fichier_entree_binaire = null;
    ...
    //dans une boucle
    fichier_sortie_item.Write("{0}{1} = \"", debut, fichier_entree_binaire.ReadInt32());
    fichier_entree_binaire.ReadBytes(taille);
    fichier_sortie_item.WriteLine("{0}\";", UnicodeEncoding.Unicode.GetString(fichier_entree_binaire.ReadBytes(64)));
    fichier_entree_binaire.ReadBytes(decalage);
    //fin de la boucle
    ...
    Sous-fonction que je comptais faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private static void sous_fonction(BinaryReader fichier_entree_binaire, StreamWriter fichier_sortie_item, string debut, int taille, int decalage)
    {
    	fichier_sortie_item.Write("{0}{1} = \"", debut, fichier_entree_binaire.ReadInt32());
    	fichier_entree_binaire.ReadBytes(taille);
    	fichier_sortie_item.WriteLine("{0}\";", UnicodeEncoding.Unicode.GetString(fichier_entree_binaire.ReadBytes(64)));
    	fichier_entree_binaire.ReadBytes(decalage);
    	return;
    }
    Merci d'avance

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Par défaut
    Salut
    -----

    Mais comme il y a une boucle dedans pour cette opération je comtais la mettre dans une sous-fonction.
    Quel est le rapport entre un code dans une boucle et la méthode?

    On extrait une portion de code pour en faire une méthode (ça s'appelle "factoriser") à partir du moment où on retrouve cette portion de code à plusieurs endroits dans le programme.

    Sortir une série unique d'instructions présente dans une boucle n'a pas grand intérêt, surtout lorsque, comme c'est le cas ici, ça impose de passer un grand nombre d'arguments en paramètre: la lecture n'est pas simplifiée, la maintenance non plus, et ce n'est pas profitable non plus aux performances (pour peu que ce soit important).

    Si tu n'as pas le code de ta méthode "sous-fonction" ailleurs, laisse ces instructions dans ta boucle. Du moins, c'est mon avis.


    A+
    Claude

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ClaudeBg Voir le message
    Si tu n'as pas le code de ta méthode "sous-fonction" ailleurs, laisse ces instructions dans ta boucle. Du moins, c'est mon avis.
    Ce n'est pas très compliqué et ne sera pas modifié mais je préfère séparer si c'est possible. Ca sera plus lisible et puis c'est aussi utilisé à 2 autres endroits.

    C'est sûr que si cela n'était utilisé qu'à un seul endroit ce serait un peu "con" de déplacer le code dans une sous-fonction.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Par défaut
    Salut,

    Je ne vois pas pourquoi le fait d'avoir une sous-méthode changerait le résultat :/
    Si tu fais tourner ton programme avec les 2 versions (avec et sans la méthode) et la même entrée, tu devrais avoir la même sortie !

    Si ce n'est pas le cas, c'est sûrement que tu ne passes pas les bons paramètres à ta méthode.

  5. #5
    Membre émérite Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Par défaut
    Qu'importe ta sous fonction (verifie si ton parametre est passe par reference ou par value), mais l'important ici est que tu es cree une sous funcion qui n'avait pas lieu d'etre on ne subdivise pas du code a cause du'un boucle.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par zeavan Voir le message
    Qu'importe ta sous fonction (verifie si ton parametre est passe par reference ou par value), mais l'important ici est que tu es cree une sous funcion qui n'avait pas lieu d'etre on ne subdivise pas du code a cause du'un boucle.
    Que veux-tu dire par "passé par référence ou par valeur" ?
    J'appelais la sous-fonction comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sous_fonction(fichier_entree_binaire, fichier_sortie_item, debut, place[i - 1], decalage);
    L'utilisation des mêmes noms dans l'appel de la fonction et dans la sous-fonction ne posait pas de problème en c++. C'est bien la même chose en c# ?

    Cette sous-fonction ne serait pas utilisé uniquement dans une unique boucle (comme indiqué dans mon précédent message). Le programme final serait plutôt comme ceci (dans ce cas elle a lieu d'exister) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    //dans une boucle
    fichier_sortie_item.Write("{0}{1} = \"", debut, fichier_entree_binaire.ReadInt32());
    fichier_entree_binaire.ReadBytes(taille);
    fichier_sortie_item.WriteLine("{0}\";", UnicodeEncoding.Unicode.GetString(fichier_entree_binaire.ReadBytes(64)));
    fichier_entree_binaire.ReadBytes(decalage);
    //fin de la boucle
     
    //opération 1 qui déplace la lecture dans le fichier
     
    //dans une boucle
    fichier_sortie_item.Write("{0}{1} = \"", debut, fichier_entree_binaire.ReadInt32());
    fichier_entree_binaire.ReadBytes(taille);
    fichier_sortie_item.WriteLine("{0}\";", UnicodeEncoding.Unicode.GetString(fichier_entree_binaire.ReadBytes(64)));
    fichier_entree_binaire.ReadBytes(decalage);
    //fin de la boucle
     
    //opération 2 qui déplace la lecture dans le fichier
     
    //dans une boucle
    fichier_sortie_item.Write("{0}{1} = \"", debut, fichier_entree_binaire.ReadInt32());
    fichier_entree_binaire.ReadBytes(taille);
    fichier_sortie_item.WriteLine("{0}\";", UnicodeEncoding.Unicode.GetString(fichier_entree_binaire.ReadBytes(64)));
    fichier_entree_binaire.ReadBytes(decalage);
    //fin de la boucle

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Problème dans une sous-fonction.
    Par Gooby dans le forum MATLAB
    Réponses: 2
    Dernier message: 21/08/2014, 14h14
  2. Utilisation de Having dans une sous-requête
    Par ultimus dans le forum Langage SQL
    Réponses: 6
    Dernier message: 18/05/2014, 23h01
  3. Utilisation de colonnes dans une sous-requête
    Par boubacach dans le forum SQL
    Réponses: 5
    Dernier message: 31/05/2010, 10h55
  4. impossible d'utiliser LIMIT 1 dans une sous-requête
    Par Christophe Charron dans le forum Requêtes
    Réponses: 13
    Dernier message: 19/12/2009, 22h42
  5. [POO] POO et Objet dans une sous fonction
    Par JaKoo dans le forum Langage
    Réponses: 2
    Dernier message: 02/05/2008, 03h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo