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 :

Utilisation de plusieurs fonctions à la suite [Débutant]


Sujet :

C#

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 26
    Par défaut Utilisation de plusieurs fonctions à la suite
    Bonjour, j'ai un petit soucis avec mon code (je suis débutant).

    Il faut que j'apprenne à utiliser les classe et les list<T> et donc j'ai commencé un logiciel qui va lire un fichier ligne par ligne voir si un mot spéciale est dans cette ligne (ici "test") si oui fait un substract de cette ligne pour récupérer un identifiant, puis incrémente un chiffre à chaque fois qu'il trouve deux fois le même identifiant.

    Et donc j'ai fait une fonction lecture, une fonction écriture et un class supplémentaire pour créer mes objets.

    Maintenant j'ai deux problèmes, quand je donne pID et pNumberOfLine comme argument à ma fonction écrire, je me retrouve avec un erreur dans mon main :

    No overload for method 'Ecriture' takes '0' arguments
    Et si je ne mets pas d'argument la le problème vient de ma fonction écriture qui ne trouve pas pID et pNumberOfLine.

    Je vous met le code ci dessous

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    using System;
    using System.IO;
    using System.Collections.Generic;
     
    class Programme {
     
    static List<Toto> pTotoList; 
     
    	static void Main(string[] args) {
     
    		pTotoList = new List<Toto>();
    		Lecture();
    		Ecriture();
    		}
     
     
     
     
    	static void Lecture ()
    {
    	TextReader reader;
    	string fichier = "test2.txt";
    	int longMini = 320;
    	reader = new StreamReader(fichier);
    	string line = reader.ReadLine();
    	int longueur = line.Length;
    	bool b1 = (longMini < longueur);
    	bool b2 = (line.Contains("test"));
    	while(true)
     
     
    		if (line == null)
    		{
    			break;
    		}
    		else
    		{
     
     
    	if (b1 && b2)
    		{
    		string ID = line.Substring(325, 14);
    		Toto _Toto = new Toto(ID);
    		pTotoList.Add(_Toto);
    		for (int i = 0; i < pTotoList.Count ; i++) 
    			{
    			if(TotoList[i].GetID() == ID)
    				{
    			TotoList[i].AddOneLine();
    			return;
    				}
     
    			}
    		}
    	}
    }
    	 static void Ecriture (int pNumberOfLine, string pID )
    {
    	foreach (Toto _Toto in pTotoList)
    {
    	TextWriter writer;
    	string filename = "testresult.txt";
    	writer = File.AppendText(filename);
    	writer.Write("" +pID + "   " +pNumberOfLine);
    	writer.Close();
    }
    }
    }

    Ma class

    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
    class Toto {
    		private string pID;
    		private int pNumberOfLine;
     
    		public Toto (string ID)
    		{
    			pID = ID;
    			pNumberOfLine = 1;
    		}
     
    		public string GetID()
    		{
    			return pID;
    		}
     
    		public int AddOneLine()
    		{
    			pNumberOfLine++;
    			return pNumberOfLine;
    		}
     
    	}

    Maintenant je n'ai aps pu debbuger mes fonctions, l'histoire de test et d'incrémentation ne marche peut être pas mais je compte bien réfléchir seul dessus.
    Cependant ce soucis avec les fonctions je n'arrive pas à m'en sortir... Un coup de main ou un lien vers un article me serait d'une grande aide.

    Par avance merci !

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par sharwyn Voir le message
    quand je donne pID et pNumberOfLine comme argument à ma fonction écrire, je me retrouve avec un erreur dans mon main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    No overload for method 'Ecriture' takes '0' arguments
    Citation Envoyé par sharwyn Voir le message
    Et si je ne mets pas d'argument la le problème vient de ma fonction écriture qui ne trouve pas pID et pNumberOfLine.
    Bah si tu déclares deux paramètres pour la méthode Ecriture, il faut les passer à la méthode quand tu l'appelles. Donc le Main doit appeler Ecriture en indiquant des valeurs pour ces paramètres...

    Mais de toutes façons ça n'a pas vraiment de sens de passer ces paramètres à la méthode, puisqu'ils sont stockés dans chaque objet Toto. Il faut donc récupérer les valeurs depuis chaque objet dans ton foreach:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    static void Ecriture ()
    {
        foreach (Toto _Toto in pTotoList)
        {
            TextWriter writer;
            string filename = "testresult.txt";
            writer = File.AppendText(filename);
            writer.Write("" + _Toto.GetID() + "   " + _Toto.GetNumberOfLine());
            writer.Close();
        }
    }
    D'autre part, ce n'est pas très efficace comme façon de faire : tu ouvres et tu fermes le fichier à chaque itération dans la boucle. Il vaudrait mieux l'ouvrir une seule fois et le fermer à la fin...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    static void Ecriture ()
    {
        using (TextWriter writer = new StreamWriter("testresult.txt"))
        {
            foreach (Toto _Toto in pTotoList)
            {
                writer.WriteLine("" + _Toto.GetID() + "   " + _Toto.GetNumberOfLine());
            }
        }
    }
    (le writer sera fermé automatiquement à la fin du bloc using)

    Citation Envoyé par sharwyn Voir le message
    Maintenant je n'ai aps pu debbuger mes fonctions
    Le débogage ça vient après, il faut déjà que ton code compile

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 26
    Par défaut
    Merci beaucoup !


    Par contre un truc que je comprend pas justement tu m'écris:
    Mais de toutes façons ça n'a pas vraiment de sens de passer ces paramètres à la méthode, puisqu'ils sont stockés dans chaque objet Toto. Il faut donc récupérer les valeurs depuis chaque objet dans ton foreach:
    C'est exactement le même code que celui que j'ai donné non?
    Et quand je marque ça sans argument pour Ecriture il me fait l'erreur de ne pas connaitre pID et pNumberOfLine...

    Je test ça demain

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par sharwyn Voir le message
    C'est exactement le même code que celui que j'ai donné non?
    Non, regarde mieux...

    Citation Envoyé par sharwyn Voir le message
    Et quand je marque ça sans argument pour Ecriture il me fait l'erreur de ne pas connaitre pID et pNumberOfLine...
    le code que je t'ai donné récupère le pID et le pNumberOfLine de chaque élément de la liste, il n'a pas besoin de les recevoir en paramètre. Ca n'a pas de sens de les passer en paramètre, puisque ta méthode traite chaque élément de la liste et que chaque élément a ses propres valeurs de pID et de pNumberOfLine

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 26
    Par défaut
    Ha ! oui d'accord j'ai vu ! Merci !

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 26
    Par défaut
    C'est bon tout marche parfaitement !

    J'ai eu besoin de créer une nouvelle fonction pour que le foreach de lecture fonctionne correctement sinon le return; me faisait sortir de la fonction.


    Merci beaucoup en tout cas j'ai compris un gros principe de base qui restait un peu flou grâce à toi !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/05/2011, 14h55
  2. Fonctions utilisées dans plusieurs cs
    Par KaloOopS dans le forum C#
    Réponses: 7
    Dernier message: 06/11/2010, 17h08
  3. Comment faire pour utiliser plusieurs fonctions logiques dans une condition ?
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 04/11/2010, 11h37
  4. Réponses: 2
    Dernier message: 16/01/2009, 00h23
  5. Réponses: 10
    Dernier message: 08/02/2007, 13h18

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