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 :
FLine contient alors un tableau contenant les diverses informations de la ligne.
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);
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 :
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
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;
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.
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;
Partager