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

 Delphi Discussion :

Probleme d'ouverture de fichier


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 44
    Points : 25
    Points
    25
    Par défaut Probleme d'ouverture de fichier
    Salut, j'ai un probleme d'ouvverture de fichier est-ce que quelqu'un peux m'aider ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       nouveau := Combobox1.Text;
       exist:=Repertoir+'toto.ats';
       assignfile(fichier,exist);
       append(fichier);
       repeat
           readln(fichier,exist);
       until (exist = FinMemo) or (exist = nouveau);
    FinMemo est une constante globale qui ce trouve également à la fin de mon fichier

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Si je comprends ce que tu veux faire tu veux lire le fichier jusqu'à ce que tu trouve ou bien FinMemo ou bien nouveau c'est cela ?

    Dans ce cas ta condition sur until n'est pas bonne until ne doit pas indiquer les conditions d'arrêt mais les conditions pour continuer à boucler. Donc ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    until ( exist <> FinMemo ) and ( exist <> nouveau );
    Je rajouterais même par sécurité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    until ( exist <> FinMemo ) and ( exist <> nouveau ) and not Eof( fichier );
    Pour éviter de continuer à lire alors qu'on est arrivé au bout du fichier. Note aussi que l'utilisation du repeat until implique que ton fichier n'est jamais vide, si c'est le cas tu auras un plantage.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 44
    Points : 25
    Points
    25
    Par défaut
    Le truc que je comprends pas c'est qu'il bloque sur : eadln(fichier,exist);
    Je ne vois pas pourquoi ?

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Haaa j'ai vu, tu utilises Append qui positionne le curseur en fin de fichier (normalement ça s'utilise pour écrire à la fin) ici tu dois utiliser Reset plutôt que Append.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 44
    Points : 25
    Points
    25
    Par défaut
    Mais avec reset je ne peux pas ajouter de texte

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Selon l'aide de Delphi, si tu n'as pas changé la variable globale FileMode, Reset ouvre le fichier en lecture/écriture.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 44
    Points : 25
    Points
    25
    Par défaut
    je sais bien mais il plante juste apres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
       assignfile(fichier,exist);
       reset(fichier);
       repeat
         readln(fichier,exist);
       until (exist = FinMemo) or (exist = nouveau) or eof(fichier);
     
       if exist = FinMemo then
           writeln(fichier,nouveau);  // il plante là
       closefile(fichier);

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 44
    Points : 25
    Points
    25
    Par défaut
    C'est bon je viens de résoudre le probleme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
       open:=Repertoir+'toto.ats';
       assignfile(fichier,open);
       reset(fichier);
       repeat
         readln(fichier,exist);
       until (exist = FinMemo) or (exist = nouveau) or eof(fichier);
       closefile(fichier);
     
       assignfile(fichier,open);
       append(fichier);
       if exist = FinMemo then
           writeln(fichier,nouveau);
       closefile(fichier);
    Sur le coup je suis obligé d'ouvrir mon fichier dans un premier temps en lecture puis de le refermer. Pus de l'ouvrir en rajout pour y insérer mon texte.

  9. #9
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Pour optimiser un peu tu pourrais faire ça du coup :

    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
    open:=Repertoir+'toto.ats';
    assignfile(fichier,open);
    reset(fichier);
    repeat
      readln(fichier,exist);
    until (exist <> FinMemo) and (exist <> nouveau) and not eof(fichier);
    closefile(fichier);
     
    if exist = FinMemo then
    begin
      assignfile(fichier,open);
      append(fichier);
      writeln(fichier,nouveau);
      closefile(fichier);
    end;
    Euh d'ailleurs ton code précédent n'est toujours pas bon au niveau de ta condition sur le until, la bonne condition est celle que j'ai mis plus haut dans le bout de code.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 44
    Points : 25
    Points
    25
    Par défaut
    Merci

  11. #11
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Citation Envoyé par Aka Guymelef Voir le message
    Selon l'aide de Delphi, si tu n'as pas changé la variable globale FileMode, Reset ouvre le fichier en lecture/écriture.
    Oui mais il est dit ceci également :
    Citation Envoyé par Aide Delphi
    Si F est un fichier texte,F devient en lecture seule.
    Voilà le pourquoi de l'erreur avec Reset et un fichier en TextFile

  12. #12
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ero-sennin Voir le message
    Oui mais il est dit ceci également :


    Voilà le pourquoi de l'erreur avec Reset et un fichier en TextFile
    Je me repends et à l'avenir je ne lirais plus la doc en diagonale
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

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

Discussions similaires

  1. Probleme à l'ouverture le fichier excel se ferme tout seul
    Par geraldferri dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 24/04/2009, 14h28
  2. Probleme d'ouverture de fichier html
    Par uriotcea dans le forum Windows
    Réponses: 4
    Dernier message: 30/03/2009, 12h17
  3. Probleme d'ouverture de fichier access sur serveur.
    Par Chronax dans le forum Sécurité
    Réponses: 2
    Dernier message: 18/12/2007, 14h46
  4. probleme d'ouverture du fichier
    Par lucky31 dans le forum C++Builder
    Réponses: 5
    Dernier message: 30/05/2007, 18h13
  5. probleme d'ouverture de fichier
    Par Micke7 dans le forum C++
    Réponses: 5
    Dernier message: 18/04/2007, 16h57

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