Ouverture d'un fichier

Résolu
grandyaka54 Messages postés 97 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 18 décembre 2013 - 8 févr. 2008 à 16:42
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;

4 réponses

fbalien Messages postés 251 Date d'inscription dimanche 7 décembre 2003 Statut Membre Dernière intervention 11 novembre 2016
8 févr. 2008 à 17:49
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
3
grandyaka54 Messages postés 97 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 18 décembre 2013 5
8 févr. 2008 à 17:33
C'est le passage de parametre qui me bloque

Function (Fich : TextFile) : Boolean;
begin

Repeat


   Readln(Fich,Ligne);


Until EOF(Fich);

Resutl := Resultat;

end;
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
8 févr. 2008 à 18:24
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
0
grandyaka54 Messages postés 97 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 18 décembre 2013 5
11 févr. 2008 à 13:35
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.
0
Rejoignez-nous