Ouverture d'un fichier [Résolu]

Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
- - Dernière réponse : grandyaka54
Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
- 11 févr. 2008 à 13:35
Bonjour,

Actuellement, je suis sur un projet utilisant un fichier.txt dans lequel on a plusieurs contrôle à faire. Si un controle échou, le fichier est rejeter et l'appli s'arrête sinon on poursuit au controle suivant...

Pour ma part, à chaque contrôle, s'ouvre, lit et je referme mon fichier a chaque appelle de fonction. Cette manip me plait pas beaucoup car je retrouve plusieurs fois dans mes fonctions AssignFile, Reset, Readln et Close.

Je n'arrive pas a trouver une solution pour créer une fonction ou procedure en passant en parametre un textfile et qui me renvoi aussi ce textfile. Cette fonction me permettrai d'éviter de reecrire a chaque fois dans chaque fonction de controle assignfile, reset etc...N'arrivant pas a trouver d'exemple ou de solutions sur le net, je m'en remets a vous.

Merci d'avance si vous pouvez m'indiquer une solution possible.

Cordialement.
----------------------------------
Ex :
AssignFile (F,NomFich);
Reset (F);

//1er controle
Result := function1 (F);

//2eme controle
Result := function2 (F);

//Etc..

CloseFile (F);
-----------------------------------

C'est le passage de parametre qui me bloque

Function (Fich : TextFile) : Boolean;

begin
end;
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
265
Date d'inscription
dimanche 7 décembre 2003
Statut
Membre
Dernière intervention
11 novembre 2016
3
Merci
Bonjour

vous devez avoir un message du style Type de fichier non autorisé ici (E2002)
en regardant l'aide de delphi on à ceci
Les types File ne sont pas autorisés comme paramètres valeur et comme type de
base d'un type file lui-même. Ils ne sont également pas autorisés comme types de
renvoi de fonction, et vous ne pouvez pas les affecter

et une solution à votre problème qui consiste à modifier votre fonction comme ceci

Function (VAR Fich : TextFile) : Boolean;
begin
  Repeat  
      Readln(Fich,Ligne);
  Until EOF(Fich);
  Resutl := Resultat;
end;

CDT

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 127 internautes nous ont dit merci ce mois-ci

Commenter la réponse de fbalien
Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
4
0
Merci
C'est le passage de parametre qui me bloque

Function (Fich : TextFile) : Boolean;
begin

Repeat


   Readln(Fich,Ligne);


Until EOF(Fich);

Resutl := Resultat;

end;
Commenter la réponse de grandyaka54
Messages postés
4307
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26
0
Merci
si tes fichiers texte ne depasse pas une certaine taille :

const
  ErrorCode_NoError    = $00;
  ErrorCode_Condition1 = $01;
  ErrorCode_Condition2 = $02;
  ErrorCode_Condition3 = $04;
  ErrorCode_Condition4 = $08;

function Control(Strings: TStrings; var BreakLine, ErrorCode: integer): boolean;
var n : integer;
    c1, c2, c3, c4 : boolean;

begin

  result := true;
  breakline := -1;
  ErrorCode := ErrorCode_NoError;
  for N := 0 to Strings.Count-1 do

  begin

    c1 :(String[N] condition1);    c2 :(String[N] condition2);    c3 :(String[N] condition3);    c4 :(String[N] condition4);

    result := c1 and c2 and c3 and c4;

    if not Result then
    begin
      BreakLine := N;
      if not c1 then
        ErrorCode := ErrorCode or ErrorCode_Condition1;
      if not c2 then
        ErrorCode := ErrorCode or ErrorCode_Condition2;
      if not c3 then
        ErrorCode := ErrorCode or ErrorCode_Condition3;
      if not c4 then
        ErrorCode := ErrorCode or ErrorCode_Condition4;
      Exit;
    end;
  end;
end;

var TSL : TStringList;
    BL,EC : integer;
    FileName, MsgErr: string;
begin
  FileName := 'c:\mon programme\fichier.txt';

  TSL := TStringList.Create;
  try
    TSL.LoadFromFile(FileName);

    if not control(TSL, BL, EC) then
    begin
      MsgErr := 'Erreur ( ';
      if (ErrorCode_condition1 and EC) > 0 then
        MsgErr := MsgErr + 'C1 ';
      if (ErrorCode_condition1 and EC) > 0 then
        MsgErr := MsgErr + 'C2 ';
      if (ErrorCode_condition1 and EC) > 0 then
        MsgErr := MsgErr + 'C3 ';
      if (ErrorCode_condition1 and EC) > 0 then
        MsgErr := MsgErr + 'C4 ';
      MsgErr := MsgErr + ') a la ligne ['+IntToStr(BL)+']'+#13#10;
      MsgErr := MsgErr + 'Le fichier '+ExtractFileName(FileName)+' est rejeté.';
      MessageDlg(MsgErr, mtError, [mbOk], 0);
    end    
    else
      MessageDlg('Fichier ok', mtInformation, [mbOk], 0);
  finally
    TSL.Free;
  end;
end;
  

<hr size="2" width="100%" />
http://deefaze.gnomz.com
Commenter la réponse de f0xi
Messages postés
97
Date d'inscription
vendredi 19 octobre 2007
Statut
Membre
Dernière intervention
18 décembre 2013
4
0
Merci
En modifiant la fonction comme indiqué ça marche tres bien mais le risque et que je ne connais pas la taille du fichier d'origine.

Merci comme meme pour l'aide.
Commenter la réponse de grandyaka54