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 :

Ecriture fichier texte impossible ?


Sujet :

Delphi

  1. #1
    P.G
    P.G est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 158
    Points : 73
    Points
    73
    Par défaut Ecriture fichier texte impossible ?
    Bonjour à tous,

    J'essaye dans une petite appli d'écrire dans un fichier texte
    apparemment cela à l'air simple :
    1) assign
    2) rewrite
    3) écrire
    4) close

    L'unité principale TComPort1 appelle ces fonctions 1,2,3,4 dans une
    autre unité OREGON. Le constat c'est que le fichier suivi.txt est créé
    sur le disque mais qu'il reste désespérément vide ??

    Je soumet ce problème à vos conseils avisés :

    voilà le code TComPort1 :
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    unit TComPort_1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, CPort, StdCtrls, CPortCtl, OREGON;
     
    type
      TForm1 = class(TForm)
        ComPort1: TComPort;
        Panel1: TPanel;
        ComComboBox1: TComComboBox;
        ComComboBox2: TComComboBox;
        ComComboBox5: TComComboBox;
        ComLed1: TComLed;
        ComLed2: TComLed;
        ComLed3: TComLed;
        Connecter: TButton;
        Label1: TLabel;
        ComComboBox3: TComComboBox;
        Memo1: TMemo;
        procedure ConnecterClick(Sender: TObject);
        procedure Panel1Enter(Sender: TObject);
        procedure ComPort1RxChar(Sender: TObject; Count: Integer);
        procedure Panel1Exit(Sender: TObject);
      private
        { Déclarations privées }
        ChaineRecue   : String;
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.ConnecterClick(Sender: TObject);
    begin
            Comport1.Connected := Not Comport1.Connected;
    end;
     
     
     
    procedure TForm1.Panel1Enter(Sender: TObject);
    begin
            Comport1.DataBits:=dbeight;
            Init_OREGON;
            //Comport1.ParityBits:=cpNone;
    end;
     
    procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
    Var
      Chaine2 : String;
      i       : Integer;
    begin
      // Evènement appelé a chaque réception de caractère(s)
     
      // Lecture des caractère reçus dans le composant TComPort
      ComPort1.ReadStr(ChaineRecue,Count);
      Analyse_Trame_OREGON(ChaineRecue);
      // Affichage des caractères reçus
      Chaine2:='';
      For i:=1 To Length(ChaineRecue) Do
      begin
     
            Chaine2:=Chaine2 + IntToHex(Byte(ChaineRecue[i]),2)+' ';
     
      end;
      Memo1.Lines.Text := Memo1.Lines.Text + Chaine2 + #13;
    end;
     
    procedure TForm1.Panel1Exit(Sender: TObject);
    begin
            Fin_OREGON;
    end;
     
    end.
     
     
    //     Chaine2:=Chaine2 + IntToHex(Byte(ChaineRecue[i]),2)+' ';

    et le code de l'unité appelée OREGON dans l'état actuel :
    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
    unit OREGON;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls;
     
    var
            FichTest:TextFile;
     
     
    procedure Analyse_Trame_OREGON(var ChaineRecue:string);
     
    procedure Fin_OREGON;
     
    procedure Init_OREGON;
     
    implementation
     
     
    procedure Init_OREGON;
    begin
            AssignFile(FichTest,'Suivi.txt');
            Rewrite(FichTest);
            writeln(FichTest,'1');
    end;
     
     
    procedure Fin_OREGON;
    begin
            CloseFile(FichTest);
    end;
     
    procedure Analyse_Trame_OREGON(var ChaineRecue:string);
    var
     DoubleDigit  : string[2];
     PremierDigit : char;
     SecondDigit  : char;
    begin
     DoubleDigit  := IntToHex(Byte(ChaineRecue[5]),2);
     PremierDigit := DoubleDigit[1];
     SecondDigit  := DoubleDigit[2];
     writeln(FichTest,'1');
     writeln(FichTest,' '+DoubleDigit+ ' : ' +PremierDigit +   SecondDigit);
    end;
     
    end.
    Merci de l'aide

  2. #2
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Bonjour,

    Change le chemin de ton fichier texte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AssignFile(FichTest,'Suivi.txt');
    par un chemin soit réseau soit sur le disque, du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AssignFile(FichTest,'C:\oregon\Suivi.txt');
    ps : evidement créé un répertoire oregon avant.

    a+

  3. #3
    P.G
    P.G est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 158
    Points : 73
    Points
    73
    Par défaut suite écriture fichier
    Hello,

    Merci de ta réponse rapide,

    j'ai essayé un nom de fichier complet, le problème est toujours le même.

    Le fichier est bien créé dans le répertoire visé mais il est vide.

    Affaire à suivre donc.

    A +

    P.G

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 469
    Points : 24 905
    Points
    24 905
    Par défaut
    tiens tu as mis ParityBits en commentaire !
    Dommage de poser une question Accès direct propriété de TcomPort et ne pas venir lire la réponse !

    Même sans mettre le chemin au complet, si tu vois le fichier (probablement avec l'exe), cela doit fonctionner !
    Tu dois au moins avoir '1' qui s'est écrit ?

    C'est étrange ton utilisation de OnEnter et OnExit du TPanel, pourquoi ne pas plutôt utiliser deux Buttons, l'un "Ouvrir" et l'autre "Fermer" car à la vue du code, si tu bouge la souris, tu pourrais fermer le fichier avant même de passer par OnRxChar

    Pense qu'un fichier texte ne s'écrit pas en temps réel mais utilise un buffer de 32Ko, utilise Flush pour forcer l'écriture, CloseFile normalement force l'écriture aussi !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    P.G
    P.G est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 158
    Points : 73
    Points
    73
    Par défaut re re re ...
    Re Hello,

    Il ne faut pas le prendre mal, en attendant la réponse de l'initialisation
    en dur de TcomPort j'ai poursuivi par l'analyse de la trame reçu et donc
    suis tombé sur les problèmes de lecture de fichier texte.
    (Ai voulu faire une sorte de trace dans un fichier texte pour suivre et comprendre les choses). D'où les problèmes cités.

    Je reviendrai après sur les essais Tcom..

    Bon bonne nouvelle flush provoque bien l'écriture, sur le nom de fichier 'court'.

    Je vais pouvoir poursuivre l'analyse de la suite du projet. Apparemment je fait plusieurs fois l'init du fichier, maintenant que j'arrive à lire le résultat du trace.
    Probablement le TPanel, où peut-on mettre dans un projet Delphi tel que celui-là du code qui s'éxécute tout seul à l'ouverture du programme,
    et à sa fermeture, indépendamment des fenêtres windows ?

    Merci encore.

    N.B Les questions des débutants sont toujours 'basiques' c'est pour cela qu'ils
    sont encore débutants.

    A +

    P.G


    Merci du coup de main

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 469
    Points : 24 905
    Points
    24 905
    Par défaut
    Tu as la section initialization et finalization d'une unité
    Tu peux aussi créer un objet et l'instancier dans le DPR (voir Singleton)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par P.G Voir le message
    Probablement le TPanel, où peut-on mettre dans un projet Delphi tel que celui-là du code qui s'éxécute tout seul à l'ouverture du programme,
    et à sa fermeture, indépendamment des fenêtres windows ?
    Dans le OnCreate et onClose de ta fenêtre principale.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  8. #8
    P.G
    P.G est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 158
    Points : 73
    Points
    73
    Par défaut suite et fin ... provisoire
    Hello,

    Merci aux coups de main, cela commence à s'éclairer.

    Le flush force l'écriture, le suivi de la trace des calculs

    du programme se réalise correctement.

    Je marque la question résolue.

    Bon WE


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

Discussions similaires

  1. [VBA-E]Lecture ecriture fichier texte
    Par anisr dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/04/2007, 05h46
  2. Ecriture Fichier texte avec mot de passe
    Par JOS.FRAN dans le forum Windows Forms
    Réponses: 1
    Dernier message: 01/03/2007, 22h53
  3. Réponses: 2
    Dernier message: 08/11/2006, 20h57
  4. Scanner et ecriture fichier texte
    Par Dsphinx dans le forum Langage
    Réponses: 14
    Dernier message: 21/07/2006, 18h19
  5. [AS2] Lecture Ecriture Fichier Texte
    Par cpr0 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 13/09/2005, 11h22

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