-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathImportGraphUnit.pas
More file actions
60 lines (51 loc) · 2.93 KB
/
ImportGraphUnit.pas
File metadata and controls
60 lines (51 loc) · 2.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Unit ImportGraphUnit;
interface
uses SysUtils,Math, types ;
procedure ChargerStations (inputFile: string; var Graph : TGraph; var stations: Tstations);
// Le fichier texte doit suivre le format suivant :
// ID ARRIVEE(int),POIDS(int) NomDeLaStation ,[mode]
// Exemple : 1 2,5 INSA ,[métro]
implementation
procedure ChargerStations (inputFile: string; var Graph : TGraph; var stations: Tstations);
var
f: Text; // Fichier texte contenant les données du graphe
line : string; // Variables pour stocker la ligne lue
nomStation, mode: string; //le nom de la station, et son mode
numero, arrivee, poids,i : Integer; // ID de la station actuelle, station d'arrivée, poids de l'arête
posVirgule, posVirgule2, posSpace, posCro,l : Integer; //indices des espaces, crochets, etc.. l nombre de ajout d'arret adjacent
begin
Assign(f, inputFile); // Associe la variable `f` au fichier spécifié
Reset(f); // ouverture mode lecture
// Boucle pour parcourir tout le fichier ligne par ligne
while not Eof(f) do
begin
ReadLn(f, line); // Lecture d'une ligne du fichier
// Extraction des positions des caractères utiles pour découper la ligne
posSpace := Pos(' ', line); // Position du premier espace
posVirgule := Pos(',', line); // Position de la première virgule
posCro := (pos('[', line)+1); // Position du crochet ouvrant `[`
posVirgule2 := Pos(' ', line, Pos(',', line)); // Position du deuxième espace après la virgule
// Extraction des données depuis la ligne
numero := StrToInt(Copy(line, 1, posSpace - 1)); // ID de la station actuelle
poids := StrToInt(Copy(line, posVirgule + 1, Pos(' ', line, posVirgule) - posVirgule - 1)); // Poids
arrivee := StrToInt(Copy(line, posSpace+1 , posVirgule - posSpace -1 )); // ID de la station d'arrivée
nomStation := Trim(Copy(line, posVirgule2, (posCro-2)-posVirgule2)); // Nom de la station
mode := copy(line,poscro,2); // mode de transport (T1,T2...)
//attribution du numero de la station au nom de la sation
stations[numero] := nomStation;
//Ajout des stations dans un sens pour la station actuelle
l := length(Graph[numero]); // Taille actuelle de la liste pour `numero`
setlength(Graph[numero],l+1); // Augmente la taille de la liste
Graph[numero][l].Arrivee := arrivee; // Ajoute l'ID de la station d'arrivée
Graph[numero][l].poids := poids; // Ajoute le poids du lien numero - arrivee
Graph[numero][l].mode := mode; // Ajoute le mode de transport
//Ajout des stations dans le sens opposé pour garantir un graph non orienté
l := length(Graph[arrivee]); // Taille actuelle de la liste pour `arrivee`
setlength(Graph[arrivee],l+1); // Augmente la taille de la liste
Graph[arrivee][l].Arrivee := numero;
Graph[arrivee][l].poids := poids;
Graph[arrivee][l].mode := mode;
end;
Close(f); // Ferme le fichier une fois la lecture et la construction du graphe terminée
end;
end.