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

Free Pascal Discussion :

Fonction renvoyant un array of type [Free Pascal]


Sujet :

Free Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 15
    Par défaut Fonction renvoyant un array of type
    Bonjour,
    je dois construire un index de fichier.
    J'ai déjà stocké la structure de mon index dans un fichier nommé Dico.idx.
    Je souhaite récupérer les données dans un tableau de type index mais c'est là que le programme plante.
    Le message d'erreur à la ligne 'function genTabIndex(...)' est :
    Error: Type identifier expected
    Fatal: Syntax error, ";" expected but "ARRAY" found
    Fatal: Compilation aborted
    J'ai beau chercher, l'erreur doit être bête mais je ne la trouve pas.
    Je demande votre aide encore une fois !
    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
     
    Type index = record
    	cle : string[10];
    	lien : LongInt;
    end;
     
    function genTabIndex(var fileIndex : file of index): array of index;
    var tabIndex : array of index;
    	idx : index;
    begin
    	setlength(tabIndex,0);
    	OPEN(fileIndex,'index/Dico.idx');
    	while not(EOF(fileIndex)) do begin
    		setlength(tabIndex,length(tabIndex)+1);
    		Read(fileIndex,idx);
    		tabIndex[length(tabIndex)-1]:=idx;
    	end;
    	genTabIndex:=tabIndex;
    end{/genTabIndex};
    Merci

  2. #2
    Membre éprouvé
    Inscrit en
    Mars 2004
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 126
    Par défaut
    salut
    Code Delphi : 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
     
    Type index = record
            cle : string[10];
            lien : LongInt;
          end;
          FA = file of index;
          IA = array of index;
    function genTabIndex(var fileIndex : FA): IA;
    var tabIndex : IA;
    	idx : index;
    begin
    	setlength(tabIndex,0);
    	OPEN(fileIndex,'index/Dico.idx');
    	while not(EOF(fileIndex)) do begin
    		setlength(tabIndex,length(tabIndex)+1);
    		Read(fileIndex,idx);
    		tabIndex[length(tabIndex)-1]:=idx;
    	end;
    	genTabIndex:=tabIndex;
    end{/genTabIndex};

  3. #3
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 15
    Par défaut
    merci ça marche impec
    mais bon je ne comprends pas pourquoi il faut passer par des constantes

  4. #4
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Parce que les fonctions/méthodes en Pascal n'accèptent pas de types composés en arguments ni en type retour (Il faut créer un type - et non une constante - correspondant au type composé que l'on veut lire ou retourner pour que ce soit possible).

  5. #5
    Invité de passage
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1
    Par défaut Merci
    Bonjour,

    Cette astuce m aide beaucoup...

    Merci

    Kiki_surface

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Jao,
    Citation Envoyé par mathieu.toury
    Cette astuce m aide beaucoup...
    Je ne pense pas qu'on puisse appeler ça "une astuce".

    Citation Envoyé par Loceka
    Parce que les fonctions/méthodes en Pascal n'accèptent pas de types composés en arguments ni en type retour (Il faut créer un type - et non une constante - correspondant au type composé que l'on veut lire ou retourner pour que ce soit possible).
    Pour le retour, c'est vrai, mais pas pour les paramètres.

    On peut parfaitement écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure tarte(var t : array of integer);
    Avec quand même des inconvénients :

    - dans la procédure, les limites des indices du tableau sont inconnues, et le 1er élément sera à l'index 0

    - pour la même raison, la procédure ne sait pas jusqu'où pouvoir aller dans le tableau, et il faudra donc lui passer un 2ème paramètre, indiquant le nombre d'élements dans le tableau (et pas la limite max des indices utilisés par ailleurs, qui est autre chose).

    Bien évidemment, je déconseille fortement ce genre d'acrobatie !!

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

Discussions similaires

  1. Fonction LEFT sur champ de type "text" : méthodes
    Par MatthieuQ dans le forum Langage SQL
    Réponses: 4
    Dernier message: 08/06/2004, 11h15
  2. [VB6] [Syntaxe] Fonction renvoyant un tableau d'objets
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/10/2002, 15h33
  3. fonction renvoyant un tableau en argument
    Par Jones dans le forum Langage
    Réponses: 6
    Dernier message: 30/09/2002, 18h20

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