Skip to content
Snippets Groups Projects
Commit 41325a2c authored by James Willis's avatar James Willis
Browse files

Read simple file into struct of strings.

parent 202a4abe
No related branches found
No related tags found
1 merge request!129Parameter file
......@@ -20,21 +20,30 @@
#ifndef SWIFT_PARSER_H
#define SWIFT_PARSER_H
/* Needs to be included so that strtok returns char * instead of a int *. */
#include <string.h>
#define MAX_LINE_SIZE 128
#define MAX_NO_OF_PARAMS 4
struct model_params {
//char *names[] = {"no_of_threads", "no_of_time_steps", "max_h", "ic_file"};
struct parameter {
char name [MAX_LINE_SIZE];
char value [MAX_LINE_SIZE];
};
int no_of_threads;
int no_of_time_steps;
float max_h;
char *ic_file;
struct swift_params {
struct parameter data [MAX_NO_OF_PARAMS];
};
void parseFile(struct model_params *params, const char * file_name) {
void printParameters(struct swift_params *params);
void getParam(struct swift_params *params, char * name, int * retParam);
void parseFile(struct swift_params *params, const char *file_name) {
FILE *fp;
char line[MAX_LINE_SIZE];
int param_count = 0;
/* Open file for reading */
fp = fopen(file_name, "r");
......@@ -47,82 +56,55 @@ void parseFile(struct model_params *params, const char * file_name) {
while(!feof(fp)) {
/* Read a line of the file */
if(fgets(line,MAX_LINE_SIZE,fp)!=NULL)
{
if(fgets(line,MAX_LINE_SIZE,fp)!=NULL) {
/* Check if the line contains a value */
if(strchr(line,':')) {
//int size = atoi(line);
//int i;
//char *p;
//char *elements[size];
//for(i=0; i<8; i++) elements[i] = (char *)malloc(MAX_LINE_SIZE);
//
////for(i=0; i<size; i++) {
// fgets(line,MAX_LINE_SIZE,fp);
// strtok(line,":");
// strcpy(elements[0],line);
// p = (char *)strtok(NULL,":");
// strcpy(elements[1],p);
////}
int i;
char * token;
char *elements[8];
for(i=0; i<8; i++) elements[i] = (char *)malloc(MAX_LINE_SIZE);
int element_count = 0;
printf ("Splitting string: '%s' into tokens:\n",line);
token = (char *)strtok(line,":");
printf("Token:%s\n",token);
token = strtok(&(line[0]),":");
while (token != NULL) {
strcpy(elements[element_count],token);
printf ("Element:%s\n",elements[element_count]);
token = (char *)strtok (NULL, ":");
element_count++;
}
//if(strcmp("no_of_threads",elements[0])) {
// params->no_of_threads = atoi(elements[1]);
//}
//else if(strcmp("no_of_time_steps",elements[0])) {
// params->no_of_time_steps = atoi(elements[1]);
//}
//else if(strcmp("max_h",elements[0])) {
// params->max_h = atof(elements[1]);
//}
//else if(strcmp("ic_file",elements[0])) {
// params->ic_file = elements[1];
//}
//for(i=0; i<element_count; i++)
// printf("Element[%d]: %s\n",i,elements[i]);
//while (token != NULL) {
strcpy(params->data[param_count].name,token);
token = strtok (NULL, ":");
strcpy(params->data[param_count++].value,token);
//}
//float fp_number;
//char * str;
//fscanf(fp, "%f %s", &fp_number,str);
//
///* writing content to stdout */
//printf("%s",line);
////printf("Float: %f, comment: %s\n",fp_number,str);
}
}
}
}
printf("no_of_threads:%d, no_of_time_steps:%d, max_h:%f, ic_file:%s\n",params->no_of_threads,params->no_of_time_steps,params->max_h,params->ic_file);
fclose(fp);
}
void storeParam() {
void getParam(struct swift_params *params, char * name, int * retParam) {
int i;
for(i=0; i<MAX_NO_OF_PARAMS; i++) {
if(strcmp(name,params->data[i].name)) {
*retParam = atoi(params->data[i].value);
return;
}
}
}
void printParameters(struct swift_params *params) {
int i;
printf("\n--------------------\n");
printf("SWIFT Parameter File\n");
printf("--------------------\n");
for(i=0; i<MAX_NO_OF_PARAMS; i++) {
printf("Name: %s\n",params->data[i].name);
printf("Value: %s\n",params->data[i].value);
}
}
#endif /* SWIFT_VECTOR_H */
#endif /* SWIFT_PARSER_H */
......@@ -4,10 +4,10 @@
int main(int argc, char *argv[]) {
struct model_params params;
const char * input_file = argv[1];
struct swift_params param_file;
parseFile(&param_file,input_file);
//parseFile(&params,"testInput.dat");
parseFile(&params,input_file);
printParameters(&param_file);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment