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

VB.NET Discussion :

Recherche fin de liste.


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 75
    Par défaut Recherche fin de liste.
    Bonjour,
    J'ai un problème avec mon code pour rechercher la fin d'une liste dans mon fichier.
    Voici ce que j'ai dans mon dit fichier :
    "Nom :
    Prenom :
    Classe :
    6ème
    5ème
    CM2
    CM2
    CM2
    CM1

    dhsd"
    Ce que j'aimerais faire c'est me placer a la fin des classes (donc au dessous de CM1) pour y inscrire d'autre classes.
    Mon code est le suivant :

    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
    Public Sub InsertNewClass(className As String)
     
        ' on lit le contenu du fichier que l'on place dans une list de string
     
        Dim lines = File.ReadAllLines(ClassesFileName).ToList()
     
        'on recherche l'index dans cette liste ou se trouve ""Classes :""
     
        Dim classIndex = lines.IndexOf("Classe :")
     
        ' on n'en a pas trouvé, on s'en va
     
        If classIndex = -1 Then Exit Sub
     
        ''On ajoute 1 ligne à l'index pour ce placer à la ligne en dessous de classe et on cherche la fin de la liste
        Do
     
            classIndex += 1
     
        Loop Until classIndex.ToString("")
     
        'on insère la nouvelle classe dans la liste
     
        lines.Insert(classIndex, className)
     
        'on supprime le fichier texte existant
     
        File.Delete(ClassesFileName)
     
        'on recrée le fichier avec le nouveau contenu
     
        File.WriteAllLines(ClassesFileName, lines.ToArray())
     
    End Sub
    Voila.
    Ce que ce code me fait est qu'il ajoute les nom des classes après "Classe" et non pas à la fin de la liste.
    Merci pour votre aide.

    P.S : dhsd est juste là pour m'assurer que quand j'affiche les classes, la suite n'est pas affichée. Mais il y aura d'autres données en lieu et place.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Il faudrait que tu mettes dans ton fichier le nombre de classes déjà présentes dans ton fichier

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 75
    Par défaut
    Ca change quoi ? il me faut recréer une fonction Dim lines = File.ReadAllLines(ClassesFileName).ToList() pour insérer ma nouvelle valeur quand même non ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 75
    Par défaut
    Oui ce serait une idée mais en fait il me faudrait une méthode qui permettrait simplement de trouver l'endroit où ce trouve l'espace (la ligne vide donc) et d'y insérer le nouveau nom de la classe.
    car en fait j'ai pris l'exemple des classes mais j'aurais aussi un nom a rentrer en dessous de nom un prénom, et des résultats de test genre exercice 1, exercice 2 etc : donc si je met un retour à la ligne vide entre chaque données (nom prénom etc) j'espérais appeler ce code avec juste la 1ère valeur a chercher (dans mon cas présent c'est "classe") et chercher à la suite le premier retour à la ligne vide pour y insérer mes nouvelles valeurs.
    Et à partir de mon Dim classIndex = lines.IndexOf("Classe :"), je pensais juste partir de là et suivre les lignes jusqu’à la fin ou ajouter mes nouvelles valeurs, comme ça j'ai juste à remplacer IndexOf("Classe :") par "exercice 1" ou "nom" etc et c'est plier.
    merci en tous cas déjà !

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Par défaut
    Bonjour,
    Je ne comprends pas tout;
    si tu veux ajouter quelque chose à la fin de ton fichier:
    (surtout pas de file.delete etc)

    Si tu veux savoir combien de ligne il contient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim lines() As String = File.ReadAllLines(ClassesFileName)
    MessageBox.Show(lines.GetUpperBound(0) & " Lignes présentes")

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ACIVE_CS Voir le message
    Bonjour,
    Je ne comprends pas tout;
    si tu veux ajouter quelque chose à la fin de ton fichier:
    (surtout pas de file.delete etc)

    Si tu veux savoir combien de ligne il contient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim lines() As String = File.ReadAllLines(ClassesFileName)
    MessageBox.Show(lines.GetUpperBound(0) & " Lignes présentes")
    Justement non, il ne veut pas mettre à la fin du fichier car justement, après les classes, il met du blabla, il veut que les classes se suivent.

    Pour ton problème, je pense qu'il serait plus judicieux de récupérer le contenu de ton fichier en faisant
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    dim Montexte As String=File.ReadAllText(ClassesFileName)

    Après, reste à savoir si tu peux ou non faire un split en faisant
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    Montexte.split(vbNewLine & vbNewLine)

    Avec un peu de chance (car justement, dans la ligne qui CM1, je ne sais pas si c'est une ligne blanche ou si tu as un espace ou pas), si tu récupères l'indice 0, tu devrais pouvoir récupérer (et sans la ligne blanche)

    "Nom :
    Prenom :
    Classe :
    6ème
    5ème
    CM2
    CM2
    CM2
    CM1

    Tu devrais essayer

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    Il vaut mieux s'orienter vers l'utilisation de fichier xml.
    On peut sérialiser/désérialiser une classe (Class) en quelques lignes de code.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  8. #8
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,

    Le problème provient du test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Loop Until classIndex.ToString("")
    Il est toujours vrai pour peu que classIndex > 0.
    Je pense que vous vouliez plutôt tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Loop Until String.IsNullOrWhiteSpace(Lines(classIndex))
    (+1 pour rv26t)

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Par défaut
    J'ai toujours pas bien compris ce que tu veux faire...
    tu veux juste ajouter une ligne à ton fichier ou il y a des conditions?

    Alors ton code est à reprendre à zéro;
    ça ne se fait jamais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim classIndex = lines.IndexOf("Classe :")
    Tu déclares classindex mais tu ne lui dis pas quel est le type (string, integer, double etc)
    ça devrait être integer dans ce cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim classIndex as integer = lines.IndexOf("Classe :")
    Après dans cette magnifique mystérieuse boucle tu lui demandes de "looper" jusqu'à que sa représentation string soit ""?... bizarre..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Do
        classIndex += 1
    Loop Until classIndex.ToString("")
    Si c'est pour connaitre le dernier index de la liste utilise ce que je t'ai mis plus haut (getupperbound)

Discussions similaires

  1. Recherche formulaire avec liste déroulante
    Par kimar dans le forum Access
    Réponses: 2
    Dernier message: 28/07/2006, 12h02
  2. Réponses: 2
    Dernier message: 07/07/2006, 10h00
  3. Syntaxe pour une recherche sur 2 listes déroutantes
    Par christ-94 dans le forum Access
    Réponses: 2
    Dernier message: 24/05/2006, 17h51
  4. Réponses: 2
    Dernier message: 10/10/2005, 02h25
  5. Recherche dans une liste non trié
    Par Oberown dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 13/09/2004, 13h56

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