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

Langage Delphi Discussion :

Readln


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2002
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Readln
    Bonjour à tous

    J'espère que personne ne se perdra dans mes explications

    Exemple:
    - dans le fichier texte: '54 57'
    - dans l'interface, checklistbox contient: '51 54 57 88'

    Je sauvegarde des paramètres dans un fichier texte à partir de mon interface avec un Writeln. Puis il faut que je recharge ces mêmes paramètres, d'où utilisation d'un Readln. Mon problème apparaît qd il faut remplir la CheckListBox. Pour cela, j'utilise 'Copy' pour copier dans un tableau de string et je compare avec chaque élément de ma CheckListBox. Mais pour passer à l'élément suivant dans le fichier texte, j'utilise Delete. Or après la comparaison avec le premier de la CheckListBox '51', mon tableau de string est vide puisque j'ai délété au fur et à mesure. Et je ne sais pas comment m'en sortir.

    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
    Readln(Fichier,departement);
    for num:=0 to (checklistbox2.items.count -1) do begin
    index_champs := 0;
              TmpA := Pos(#9,departement);   {recherche d'une tabulation dans un string}
              while  (TmpA<>0)  do      {tant que tu as trouvé une tabulation}
              begin
              champs[index_champs] := Copy(departement,1,TmpA-1);
              edit2.text := champs[index_champs];
              if (edit2.text=checklistbox2.items.strings[num]) then begin
              checklistbox2.checked[num]:=true;
              end
              else if (edit2.text<>checklistbox2.items.strings[num]) then begin
              end;
              Delete (departement,1,TmpA);
              inc (index_champs) ;
              TmpA := Pos(#9,departement);
              end;
          end;

    Delph

  2. #2
    Membre actif Avatar de femtosa
    Inscrit en
    Juin 2002
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 253
    Points : 222
    Points
    222
    Par défaut
    Je sais pas si j'ai bien compris, mais si c'est le cas, je te propose cette solution :

    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
    Readln(Fichier,departement);
     
    departement2 := departement; //Sauvegarde de "departement" avant suppression
     
    for num:=0 to (checklistbox2.items.count -1) do begin 
    index_champs := 0; 
              TmpA := Pos(#9,departement);   {recherche d'une tabulation dans un string} 
              while  (TmpA<>0)  do      {tant que tu as trouvé une tabulation} 
              begin 
              champs[index_champs] := Copy(departement,1,TmpA-1); 
              edit2.text := champs[index_champs]; 
              if (edit2.text=checklistbox2.items.strings[num]) then begin 
              checklistbox2.checked[num]:=true; 
              end 
              else if (edit2.text<>checklistbox2.items.strings[num]) then begin 
              end; 
              Delete (departement,1,TmpA); 
              inc (index_champs) ; 
              TmpA := Pos(#9,departement); 
              end; 
     
    departement := departement2; //Restauration de "departement" pour recommencer la boucle
     
          end;
    "L'expérience est le seul livre que les imbéciles savent lire ... !"

    Qui à dit cela ? Moi je n'sais pas !
    Mais en tout cas, je l'applique au pas !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Bonjour Delph,
    voici ma suggestion et quelques remarques.
    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
    // departement contiendra une ligne du fichier texte dont chaque
    // élément est séparé de son voisin par une tabulation (#9) ???
    Readln(Fichier, departement);
     
    // Selon la structure de ton fichier, i.e. données / séparateurs,
    // il serait peut-être préférable d'utiliser la classe TStringList 
    // pour stocker  tes valeurs
    Champs := TStringList.Create;
     
    try
      // en remplaçant chaque tabulation contenue dans la ligne par 
      // un retour de chariot,  cela permet grâce à la propriété text 
      // de définir chaque item de la liste, en effet le retour de chariot
      // (tout comme le LineFeed) est utilisé comme séparateur entre 
      // les strings du StringList. 
      Champs.Text := StringReplace(departement, #9, #13, [rfReplaceAll]);
      // tu pourrais aussi opter pour DelimitedText, Delimiter, QuoteChar...
     
      for Index_Champs:=0 to Champs.Count-1 do
      begin
        // IndexOf permet de déterminer si l'élément qui lui est passé 
        // en paramètre se retrouve bien dans la liste des éléments contenus
        // dans le CheckListBox 
        ItemIndex := CheckListBox2.Items.IndexOf(Trim(Champs[Index_Champs])); 
     
        if ItemIndex <> -1 then
          CheckListBox2.checked[ItemIndex] := true;
      end;
    finally
      Champs.Free;
    end;

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2002
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Merci

    Merci à Malikill d'avoir essayé, mais ta solution ne marche pas car après délétion, TmpA est positionné à zéro donc pas de sortie de la boucle while et donc il n'y a pas restauration de departement.


    Merci à Crtl+F2, ta solution est la bonne. C'est vraiment génial, je n'aurai pas pu la trouver toute seule. Encore merci.


    Delph

Discussions similaires

  1. ReadLn à la fin d'un programme
    Par rmouna dans le forum Pascal
    Réponses: 7
    Dernier message: 14/11/2006, 00h11
  2. Indy et Threads : Readln bloquant.
    Par AraXav dans le forum Langage
    Réponses: 4
    Dernier message: 05/05/2006, 11h26
  3. Error E/S 104 Readln
    Par bilbounet dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 10/03/2006, 01h06
  4. [LG] Problème avec la Fonction ReadLn en fin de programme
    Par killermano dans le forum Langage
    Réponses: 6
    Dernier message: 23/07/2005, 15h16
  5. [LG]problème de read / readln
    Par jeremie60 dans le forum Langage
    Réponses: 7
    Dernier message: 08/06/2003, 23h33

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