00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include <stdio.h>
00038 #include <assert.h>
00039 #include <string.h>
00040 #include <stdlib.h>
00041
00042 #include <utils/eoParser.h>
00043
00044 #include "data.h"
00045 #include "node.h"
00046
00047 #define MAX_TRASH_LENGTH 1000
00048 #define MAX_FIELD_LENGTH 1000
00049 #define MAX_LINE_LENGTH 1000
00050
00051 static void getNextField (FILE * __f, char * __buff) {
00052
00053 char trash [MAX_TRASH_LENGTH];
00054
00055 fscanf (__f, "%[ \t:\n]", trash);
00056 fscanf (__f, "%[^:\n]", __buff);
00057 fgetc (__f);
00058 }
00059
00060 static void getLine (FILE * __f, char * __buff) {
00061
00062 char trash [MAX_TRASH_LENGTH];
00063
00064 fscanf (__f, "%[ \t:\n]", trash);
00065 fscanf (__f, "%[^\n]", __buff);
00066 }
00067
00068 void loadData (const char * __filename) {
00069
00070 FILE * f = fopen (__filename, "r");
00071
00072 if (f) {
00073
00074 printf ("Loading '%s'.\n", __filename);
00075
00076 char field [MAX_FIELD_LENGTH];
00077
00078 getNextField (f, field);
00079 assert (strstr (field, "NAME"));
00080 getNextField (f, field);
00081 printf ("NAME: %s.\n", field);
00082
00083 getNextField (f, field);
00084 assert (strstr (field, "COMMENT"));
00085 getLine (f, field);
00086 printf ("COMMENT: %s.\n", field);
00087
00088 getNextField (f, field);
00089 assert (strstr (field, "TYPE"));
00090 getNextField (f, field);
00091 printf ("TYPE: %s.\n", field);
00092
00093 getNextField (f, field);
00094 assert (strstr (field, "DIMENSION"));
00095 getNextField (f, field);
00096 printf ("DIMENSION: %s.\n", field);
00097 numNodes = atoi (field);
00098
00099 getNextField (f, field);
00100 assert (strstr (field, "EDGE_WEIGHT_TYPE"));
00101 getNextField (f, field);
00102 printf ("EDGE_WEIGHT_TYPE: %s.\n", field);
00103
00104 getNextField (f, field);
00105 assert (strstr (field, "NODE_COORD_SECTION"));
00106 loadNodes (f);
00107
00108 getNextField (f, field);
00109 assert (strstr (field, "EOF"));
00110 printf ("EOF.\n");
00111 }
00112 else {
00113
00114 fprintf (stderr, "Can't open '%s'.\n", __filename);
00115 exit (1);
00116 }
00117 }
00118
00119 void loadData (eoParser & __parser) {
00120
00121
00122
00123 eoValueParam <std :: string> param ("", "inst", "Path of the instance") ;
00124 __parser.processParam (param) ;
00125 loadData (param.value ().c_str ());
00126 }