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 :

Passer un File en parametre


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Ingenieur developpement
    Inscrit en
    Septembre 2002
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingenieur developpement

    Informations forums :
    Inscription : Septembre 2002
    Messages : 175
    Points : 106
    Points
    106
    Par défaut Passer un File en parametre
    Bonjour,

    J'aimerais savoir comment passer un File en parametre ou via une property.
    Je voudrais utiliser le fichier ouvert dans mes objets.

    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
     
     
      TFichierPrepa = class
      private
        FNomFichier: String;
        FFile: File;
        FBuf: array[0..1024] of Char;
      public
        constructor Create(ANomFichier: String);
        destructor Destroy; override;
        property F: File read FFile write FFile;
      end;
     
      TDmPreparation = class(TDataModule)
      private
        { Déclarations privées }
        FFile: File;
        FFichUtilisateur: TFichierPrepa;
      public
        Init;
        property F: File read FFile write FFile;
        property FichUtilisateur: TFichierPrepa read FFichUtilisateur write SetFichUtilisateur;
      end;
     
    ...
    procedure TDmPreparation.Init;
    begin
      AssignFile(F, MONFICHIER);
      try
        Rewrite(F, 1);  // Efface le fichier s'il existait déjà
        FichUtilisateur.F := F;  //[Erreur] (1152): Opérateur non applicable à ce type d'opérande
    ...
    end;
    merci

  2. #2
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    TFileStream!

    "File" c'est pour les dinosaures!
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  3. #3
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 363
    Points : 3 135
    Points
    3 135
    Par défaut
    Bonjour,

    @ Dr.Who : est ce que c'est valable aussi pour les fichiers textes ?

    J'utilise toujours TextFile comme dans l'aide de D7, avec AssignFile et par exemple Writeln

    TFileStream ne parait pas très pratique pour du texte ?

    @+
    Charly

  4. #4
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 49
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par Dr.Who Voir le message
    TFileStream!

    "File" c'est pour les dinosaures!
    Ou alors l'API Windows sur laquelle est basée TFileStream avec:
    OpenFile()
    CloseHandle()
    ReadFile()
    WriteFile()
    SetFilePointer()

    L'avantage dans le contexte donné par gudul c'est que le fichier peut être simplement représenté par son Handle, reçu par OpenFile(), et des lors la classe peut utiliser des méthodes simples en passant les Handles en paramètres Var const etc.

    En plus c'est quasimment identique aux Stream de fichier, si ce n'est que SetFilePointer à l'air un peu plus obscur que seek, même si c'est la même chose.

  5. #5
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    pour les fichiers textes : TStringList.

    c'est quand même plus pratique.

    surtout qu'aprés, on peux passé les objets en arguments de fonctions trés facilement.
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  6. #6
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 363
    Points : 3 135
    Points
    3 135
    Par défaut
    OK Dr.Who, mais avec TStringList, il faut se payer un décodage de la ligne, alors que avec Readln on récupère directement des valeurs réelles ou entières par exemple (ou encore de chaines)

    jusqu'à présent j'ai toujours fait avec readln et writeln ...

    Si tu me dis que c'est mieux avec des StrinList je vais essayer

    (comment tu fais pour séparer des valeurs sur une même ligne qui sont séparées par des espaces ?)

    A+

    Charly

  7. #7
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    ah tu travail uniquement en programme console ?
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 531
    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 531
    Points : 25 067
    Points
    25 067
    Par défaut
    La TStringList, la solution du Goret, chargé tout un fichier en mémoire, c'est vrai, que c'est vraiment très élégant !

    Je suis d'accord avec toi Charly910, il est impensable que CodeGear n'est pas fait un TTextStream avec les fonctions de formatage du WriteLn\ReadLn, c'est vieux, cela date du Pascal, cela aurait mérité d'être dépoussiéré !

    utilise le Type TTextRec

    Sinon, j'ignore si tu as une obligation de structure de ton fichier (espace pour séparer les champ ?, c'est vieillo) mais la gestion par Stream Binaire peut-être plus rapide, plus efficace, et coder ses propres fonction de parsage (surtout que c'est fun, moi j'adore) permet de mieux controller les données erronnées d'un fichier... tu as la fonction Explode (et ExplodeLazy) sur le forum pour décomposer une chaine, tu peux même utiliser une TStringList avec la propriété DelimitedText ... ou encore la fonction ExtractStrings fourni par Delphi ...

    ou alors utilise un XML, si tu es libre du choix technique, c'est tout de même plus ouvert, plus modulable...
    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

  9. #9
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 363
    Points : 3 135
    Points
    3 135
    Par défaut
    OK, merci à vous 2 pour ces conseils.

    C'est vrai que j'utilise des méthodes un peu vieillottes. Je fais des programmes scientifiques en amateur - j'utilise souvent les fichiers texte pour stocker les données. Je fais la même choses pour les résultats et j'utilise souvent Notepad pour afficher et imprimer la note de calculs.

    A+

    Charly

Discussions similaires

  1. comment passer un iterateur en parametre
    Par mikebranque dans le forum C++
    Réponses: 1
    Dernier message: 18/03/2006, 12h03
  2. Réponses: 12
    Dernier message: 25/01/2006, 07h29
  3. [C#]Passer une date en paramètre dans Crystal Report
    Par choupinette dans le forum ASP.NET
    Réponses: 5
    Dernier message: 09/08/2005, 09h59
  4. Passer un tableau en parametre dans une fonction js
    Par hellmaster78 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/06/2005, 14h35
  5. Passer une séquence en parametre
    Par djousss dans le forum CORBA
    Réponses: 2
    Dernier message: 02/12/2003, 22h39

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