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 :

Concernant les tableaux


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut Concernant les tableaux
    Bonjour, alors voilà je cherche sur internet ou même sur les tutos de Microsoft mais je ne comprends/trouve pas

    Le problème :
    Il y a un fichier txt (parametre) d'un coté et mon programme de l'autre. Le programme va créer un tableau à 2 colonnes dont le nombre de ligne est celui du fichier parametre. Alors jusqu'ici j'ai trouvé comment faire avec 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
     
    using (StreamReader paramconfig = new StreamReader(@"C:\chemindacces\Parametres.txt"))
                {
                    // Création du tableau
                    while ((chaquelignes = paramconfig.ReadLine()) != null)
                    {
                        if (chaquelignes.StartsWith("#")) //Un commentaire = ligne suivante
                        {
                            continue;
                        }
                        nblignes = nblignes + 1;
     
                    }
                    tableau = new string[nblignes, 2];
                    Console.WriteLine(nblignes);
                    Console.ReadLine();
                }
    Jusqu'ici j'y arrive, maintenant (et c'est la que je bloque) il faut que je relise une deuxieme fois le fichier (un second using streamreader) mais surtout il faut que je remplisse cette fois ci le tableau avec les mots clés qui sont inscrit dans le fichier parametre. Et je ne comprends pas comment remplir un tableau multidimensionnel en string à partir non pas de donnée connu mais de la lecture du fichier.

    PS : le fichier se présente comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #Inscrivez vos mots clés
    info
    blabla
    quelquechose
    le tableau lui est donc en 2 colonne, d'un coté les mots clés, et de l'autre on leur incrémente pour le moment 0 automatiquement

    Voilà le problème, j'ai chercher sur microsoft comment fonctionner les tableaux multidimensionnel, alors si c'était des entiers et si on connaissait déjà la valeur je vois comment ca se construit briévement, mais dans le cas ici, je ne parviens pas à saisir le raisonnement

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    tu es très mal parti, je te conseille de lire un tuto ou deux sur c# avant de commencer à coder
    les tableaux c'est useless par exemple
    lire 2x le fichier c'est une perte de temps
    assigner ta variable tableau à chaque tour c'est pas bon non plus

    un dictionary t'aidera surement, si plus de 2 infos un list et une classe feront l'affaire
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Ce n'est pas parce que je n'en ai pas envie, mais en réalité je n'ai plus beaucoup de temps pour finir ce programme et l'optimisation même si on va me taper sur les doigts, m'importe à présent peu.

    Je voudrais surtout réussir à parvenir à un résultat, et pour le moment je n'y suis pas...

  4. #4
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    C'est pas un problème de temps ou d'envie.

    Là, tu te fais chier à faire de la merde, alors que tu pourrais, en moins de temps, faire quelque chose de propre.

    Code c# : 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
     
    using System;
    using System.Collections.Generic;
    using System.IO;
     
    namespace TestFichierList
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<Ligne> lignes = new List<Ligne>();
                using (StreamReader paramconfig = new StreamReader(@"C:\in\test.txt"))
                {
                    string chaquelignes;
                    while ((chaquelignes = paramconfig.ReadLine()) != null)
                    {
                        if (chaquelignes.StartsWith("#")) //Un commentaire = ligne suivante
                        {
                            continue;
                        }
                        lignes.Add(new Ligne(chaquelignes));
                    }
                }
                foreach (Ligne ligne in lignes)
                {
                    Console.WriteLine(ligne.ToString());
                }
                Console.ReadLine();
            }
        }
     
        class Ligne
        {
            public string str;
            public string youpitralala;
     
            public Ligne(string st)
            {
                str = st;
                youpitralala = "DTC";
            }
     
            public override string ToString()
            {
                return string.Format("{0} {1}", youpitralala, str);
            }
        }
    }

    Avec le fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ceci
    est
    un
    #joli
    test
    Ca affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    DTC ceci
    DTC est
    DTC un
    DTC test
    Ça m'a pris 5 minutes, j'ai failli me fouler un neurone.
    On ne jouit bien que de ce qu’on partage.

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par alkaz Voir le message
    Ce n'est pas parce que je n'en ai pas envie, mais en réalité je n'ai plus beaucoup de temps pour finir ce programme et l'optimisation même si on va me taper sur les doigts, m'importe à présent peu.

    Je voudrais surtout réussir à parvenir à un résultat, et pour le moment je n'y suis pas...
    je ne te parles pas d'optimisation, ton code c'est du grand n'importe quoi mis bout à bout
    alors certes ce genre de code peut fonctionner une fois de temps en temps, donc pour une démo bien ciblée ca peut suffire

    après croire que lire un cours et coder prend plus de temps que coder au hasard c'est un peu faux
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Bon du coup j'ai totalement revu mon programme pour faire quelque chose de plus propre en m'aidant entre autre de ton code StringBuilder

    Par contre pour la suite du coup je suis bien embêté. Si on peut m'éclairer une dernière fois,

    Maintenant que j'ai une liste avec les mots clés, mon programme doit aller lire un autre fichier (contenant plusieurs milliers de lignes) et retrouver quel ligne contient tel mots clés, dans le but de récupérer le premier nombre qui suit cette ligne

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unelignequicontientlemotcléblablabla 49 6 2 4
    La ligne contient bien "blablabla" je récupère donc 49 et dans la liste je remplace le 0 de blablabla par 49

    mon bout de code suivant ce compose donc comme ceci

    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
     
    using (StreamReader fichierlog = new StreamReader(@"C:\tg\fichier.txt"))
                    {
                        //On cherche la zone utile
                        while (trouve == false)
                        {
                            LogLignes = fichierlog.ReadLine();
                            if (LogLignes.Contains("Debutzoneutile "))
                            {
                                trouve = true;
                            }
                        }
     
                        //On traite la zone utile
                        while (LogLignes != "finzoneutile")
                        {
                            LogLignes = fichierlog.ReadLine();
     
                            if (LogLignes.Contains(???))
                            {
                               ???
                            }
                        }
                        Console.ReadLine();
    La ou il y a des ??? c'est les parties qui me manque, pour le premier je voulais en réalité (par rapport au code de StringBuilder) mettre LogLignes.Contains(Liste.str) pour voir si un mot clé correspond à la liste mais ca me le met en rouge
    le deuxieme ??? concerne le moment ou je récupère le nombre, j'imagine avec un Substring.

    En faite ce qui pose probleme au moment du .Contains c'est que je ne peux utiliser le str puisqu'il est dans une classe extérieur

  7. #7
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Et pour le premier, il faut faire une boucle imbriquée :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // if (LogLignes.Contains(???))
    foreach (Ligne line in lignes)
    {
        if (LogLignes.StartsWith(string.Concat(line.str, " ")))
        {
             // ???
             LogLignes = "finzoneutile";
             break;
        }
    }

    Pour le second "???" :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string test = "motclequivabien 49 32 56";
    int monint = int.Parse(test.Split(' ')[1]);

    PS : Pour accélérer la bouche imbriquée, tu peux aussi passer par l'indexeur. for (int i = 0, len = lignes.Length; i < len; i++) et du coup on travaille ensuite sur lignes[i].
    On ne jouit bien que de ce qu’on partage.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Hum je vois, ca s'éclaircit,

    Cependant ma liste reste à 0, je ne comprends pas pourquoi

    le bout de code concerné :

    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
     
    //On traite la zone utile
                        while (LogLignes != "END_SIDER")
                        {
                            Console.WriteLine(LogLignes);
                            LogLignes = fichierlog.ReadLine();
     
                            foreach (Ligne line in Lignes)
                            {
                                if (LogLignes.StartsWith(string.Concat(line.str, " ")))
                                {
                                    string test = "motclequivabien 49 32 56";
                                    int monint = int.Parse(test.Split(' ')[1]);
                                    LogLignes = "END_SIDER";
                                    break;
                                }
                            }
                        }
                        Console.WriteLine("Alors ?");
                        Console.ReadLine();
                        foreach (Ligne ligne in Lignes)
                        {
                            Console.WriteLine(ligne.ToString());
                        }
                        Console.ReadLine();
    Mon résultat sur terminal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    infosrh 0
    documentation 0 
    grossedoc 0
    motclequivabien 0
    Et pourtant j'ai bien ajouté motclequivabien au fichier parametre et la ligne "motclequivabien 49 32 56" dans le fichier log
    A quel moment ne fait-il pas le rapprochement... Je ne sais pas ce qui ne fonctionne pas la

  9. #9
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    Sans doute parce que tu as copié le code de StringBuilder sans chercher à comprendre.
    Sa variable test est là juste pour avoir du grain à moudre, dans ton cas, c'est LogLignes qui doit être utilisé.
    De plus, la variable monint qui récupère le premier nombre, tu en fait quoi ?

    Bonne continuation.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    A vrai dire j'avais réfléchi au problème avant de poster, je n'ai surement pas eu le bon raisonnement

    Je sais que la variable test était un test, je l'ai laissé pour vérifier si ca allez fonctionner, en l'inscrivant en fichier parametre, etc. avant de mettre mes propres variables.

    De toute manière la liste reste à 0 meme si je fait cela

    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
     
    while (LogLignes != "END_SIDER")
                        {
                            Console.WriteLine(LogLignes);
                            LogLignes = fichierlog.ReadLine();
     
                            foreach (Ligne line in Laliste)
                            {
                                if (LogLignes.StartsWith(string.Concat(line.str, " ")))
                                {
                                    int monint = int.Parse(LogLignes.Split(' ')[1]);
                                    break;
                                }
                            }
                        }
    De ce que j'ai compris, pour chaque ligne de la liste on vérifie si ca correspond à LogLignes ?
    Mais le problème c'est que dans le cas ici on a un StartsWith, hors la ligne ne va pas forcément commencer par le mot clé, il faut qu'elle le contienne dans sa chaine, .Contains suffirait ?


    Pour le int, la variable correspondrait au premier nombre récupérérer de loglignes ?

Discussions similaires

  1. Article sur les tableaux dynamiques
    Par Eric Sigoillot dans le forum Langage
    Réponses: 2
    Dernier message: 16/04/2004, 22h00
  2. Réponses: 14
    Dernier message: 01/09/2003, 22h46
  3. Concerne les graphes
    Par mcr dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 12/11/2002, 11h02
  4. Les tableaux en PL/SQL
    Par GRUMLY dans le forum PL/SQL
    Réponses: 5
    Dernier message: 12/08/2002, 18h10

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