I'm a C novice, require help on parsing text files and storing in an array or another text file:
Below is the data which are partly pipe delimited values and part of it are name-value pairs,
for instance the "cma{PL}Ind{1}man{6}gal{0}cif{}" mentioned below
cma is the field name and PL is its value, i need to extract only the values within the braces along with other pipe delimited values. Please suggest.
strtok() would help. read some online documentation on it.
It splits a string based on a delimiantor
such as a pipe, this would allow you to retrieve all the different ssctions between the pipes. Then you could further process the {} out of the data.
That program gave a good idea.. But suppose i need to write the contents of the text file into another text file after the file parsing, do i need to store it in a array or can do itthe read and write operation directly.
For ex:
Input file
1|2|3|?|feg|jfh||||"cma{PL}Ind{1}man{6}gal{0}cif{}"|
Output file:
1|2|3|?|feg|jfh||||PL|1|6|0||
that is as i mentioned earlier i need the values withhin the double quotes parsed only with values
You can read and write simultaneously like Sci@phy suggested...
1. Open file 1 in read mode
2. Open file 2 in append mode
3. read from file 1
4. do the processing
5. write to file 2
6. continue from step 3 till end of file of file 1
7. close file 2
8. close file 1
Thanks for the suggestion, I'm having trouble while writing to another file.
Suppose i have 2 lines in the input file,the output file has one line. I know its the newline character problem,But not sure how to solve it. One more problem is since i have 2 delimiters( | and {}) within the same line, how do i actually append it to the same line after the processing.
#include <stdio.h>
#include <string.h>
int main(void)
{
static const char filename[] = "file.txt"; /* the name of a file to open */
FILE * pFile;
FILE *file = fopen(filename, "r"); /* try to open the file */
pFile = fopen ("myfile.txt","a");
if ( file != NULL )
{
char line[BUFSIZ]; /* space to read a line into */
char data[1][32];
while ( fgets(line, sizeof line, file) != NULL ) /* read each line */
{
size_t i = 0, size;
char *token = line;
fputs(line, stdout);
for ( ;; )
{
size_t len = strcspn(token, ";\n"); /* search for delimiters */
sprintf(data[i], "%.*s", (int)len, token);
fprintf (pFile, "%s|",data[0]);
token += len; /* advance pointer by the length of the found text */
if ( *token == '\0' )
{
break; /* advanced to the terminating null character */
}
++token; /* skip the delimiter */
}
}
fclose(file);
fclose(pFile);
}
else
{
perror(filename); /* why didn't the file open? */
}
return 0;
}