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
00054 char trash [MAX_TRASH_LENGTH];
00055
00056 fscanf (__f, "%[ \t:\n]", trash);
00057 fscanf (__f, "%[^:\n]", __buff);
00058 fgetc (__f);
00059 }
00060
00061 static void getLine (FILE * __f, char * __buff)
00062 {
00063
00064 char trash [MAX_TRASH_LENGTH];
00065
00066 fscanf (__f, "%[ \t:\n]", trash);
00067 fscanf (__f, "%[^\n]", __buff);
00068 }
00069
00070 void loadData (const char * __filename)
00071 {
00072
00073 FILE * f = fopen (__filename, "r");
00074
00075 if (f)
00076 {
00077
00078 printf ("Loading '%s'.\n", __filename);
00079
00080 char field [MAX_FIELD_LENGTH];
00081
00082 getNextField (f, field);
00083 assert (strstr (field, "NAME"));
00084 getNextField (f, field);
00085 printf ("NAME: %s.\n", field);
00086
00087 getNextField (f, field);
00088 assert (strstr (field, "COMMENT"));
00089 getLine (f, field);
00090 printf ("COMMENT: %s.\n", field);
00091
00092 getNextField (f, field);
00093 assert (strstr (field, "TYPE"));
00094 getNextField (f, field);
00095 printf ("TYPE: %s.\n", field);
00096
00097 getNextField (f, field);
00098 assert (strstr (field, "DIMENSION"));
00099 getNextField (f, field);
00100 printf ("DIMENSION: %s.\n", field);
00101 numNodes = atoi (field);
00102
00103 getNextField (f, field);
00104 assert (strstr (field, "EDGE_WEIGHT_TYPE"));
00105 getNextField (f, field);
00106 printf ("EDGE_WEIGHT_TYPE: %s.\n", field);
00107
00108 getNextField (f, field);
00109 assert (strstr (field, "NODE_COORD_SECTION"));
00110 loadNodes (f);
00111
00112 getNextField (f, field);
00113 assert (strstr (field, "EOF"));
00114 printf ("EOF.\n");
00115 }
00116 else
00117 {
00118
00119 fprintf (stderr, "Can't open '%s'.\n", __filename);
00120 exit (1);
00121 }
00122 }
00123
00124 void loadData (eoParser & __parser)
00125 {
00126
00127
00128
00129 eoValueParam <std :: string> param ("", "inst", "Path of the instance") ;
00130 __parser.processParam (param) ;
00131 loadData (param.value ().c_str ());
00132 }