Bonjour à tous.
Voici le souci : J'ai un fichier de coordonnées dont il faut que je récupère les données. Les données sont de la forme :
3.9983 -9.3670 1.1698 C 0 0 0 0 0 0 0 0 0
Pour les récuperer, j'utilise comme tout le monde readln(FFile,Buffer);
Comme il y a plusieurs espaces, j'applique DelSpace1(Buffer) puis je découpe la chaine comme cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
FLine := TStringList.Create();
FLine.Clear;
FLine.Text := StringReplace(Buffer, ' ', #13#10, [rfReplaceAll]);
p^.Add_Atome(FLine[4], Ivar1);
FLine contient alors un tableau contenant les diverses informations de la ligne.
Maintenant, j'utilise une liste chainée de classe "Molecules" et j'essaie d'ajouter les atomes ainsi que leurs coordonnées. Le probleme c'est que ca me fait "Invalid pointer operation."
Voici l'interface pour molécule :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
ptrMole = ^Molecules;
 Molecules=Class(TObject)              // Création de Molecule dérivant de TObject
    private
        Atome : ptrAtoms;                 // Liste chainé d'atomes
        Nom : String;                     // Nom de la molécule
        NbAtom : integer;
        NbBond : integer;
    public
        Suivant : ptrMole;
        constructor create();
        destructor destroy(); override;
        procedure Add_Atome( At_Nom:String ; At_Num:integer);
     end;
Le code de la fonction qui me pose probleme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
procedure Molecules.Add_Atome (At_Nom:String ; At_Num:integer);
   var
      p: ptrAtoms;
   begin
      new(p);
      p^.Nom := At_Nom;
      p^.Num := At_Num;
      p^.Suivant := Atome;
      Atome := p;
   end;
Ce que j'arrive pas à comprendre, c'est que pour commencer la liste chainée, je crée 1 "faux atome" : p^.Add_Atome('', -1); Et ca marche très bien !!! Mais dès que je remplace '' par FLine[4] (cf plus haut), il me sort le "invalid pointer operation". Je commence en Free Pascal et j'avoue je bug un peu pour le coup. Si vous pouviez m'aider ca serait sympa merci.