12-04-2014 01:36 PM
Hi all!
I had posted a few days ago about some software I was working on. It is for an API for a client. They wanted it in the CVI environment for their project. It's essencially a parser. So we are aiming to create a .h and .C file that has a function in it that can be called so they can parse a file and read each of the elements in a .csv file. Each line will be separated and placed in a variable in a struct that is an element in an array of structs.
I've developed the function. now I want to get the function to handle two arguments: an array with the filepath string stored in it, and the number of lines to read.
so it essentially was a function that had a void type.
void ParseConfigFile(char filepath[], int LinesToRead);
I have the struct decleration defined in the header file.
I then declared:
struct TestStep TestSteps[500];
During debugging I was just able to print at the bottom of the function using a format like:
TestSteps[LineNumber].StructElement
easily.
How do i convert it into a function that can be called with the arguments shown above and return the array of structs so the user can just call:
TestSteps[LineNumber].StructElement
I hope that wasn't confusing.
Thanks in advance!
12-05-2014 03:13 AM - edited 12-05-2014 03:14 AM
Basically, you should be able to do something like this:
/// HIFN ReadFile /// HIFN The function reads the data file and stores the content in an /// HIFN array of structs for the caller /// HIPAR file/The pathname of the file to read /// HIPAR nrec/The number of records read from the file (returned to caller) /// HIRET The allocated array of structs read from the file /// HIRET It is responsibility of the caller to free the allocated memory /// OUT nrec myStruct *ReadFile (char *file, int *nrec) { int size; FILE *fH = NULL; logRec *xl = NULL; // WARNING! // Error checking must be added for all I/O operations // Check if file exists and calculate array size if (!FileExists (file, &size) || !size) { MessagePopup ("Read", "Either the file does not exist or there are non records to view."); return NULL; } *nrec = size / sizeof (myStruct); // Allocate and intialize memory xl = malloc (*nrec * sizeof (myStruct)); memset (xl, 0, *nrec * sizeof (myStruct)); // Open, read and close the file fH = fopen (LOGF, "rb"); fread (xl, sizeof (myStruct), *nrec, fH); fclose (fH); // That's all! return xl; }
Please take care of freeing memory after you have finished using it.