[Courses] [C] Beginner's Lesson: How do I...?

KWMelvin kwmelvin at intrex.net
Fri Dec 13 15:49:45 EST 2002


Greetings,

My question is: How do I read a sequential text file and do a formatted
output of "records" that have a newline delimiter, which consist of four
Tab delimited "fields"?  The function strtok() is in strings.h, but it
is a rather complex thing to deal with.  Here is an example that reads
from a string array that is in the program:

#include <stdio.h>
#include <string.h>
int main(void)
{
  char records[] = "rec 1 fld 1	rec1 fld2	rec1 fld3	rec 1 fld 4\nrec2 fld1	rec 2 fld 2	rec2 fld3	rec2 fld4\nrec3 fld1	rec3 fld2	rec 3 fld 3	rec3 fld4\n";
  char delimiters[] = "\t";
  char *field;

    field = strtok(records, delimiters); /* find first field */
    while (field != NULL) 
    {
      printf("%s\t", field);
      field = strtok(NULL, delimiters); /* find next field */
    }
  printf("\n");

  return 0;
}

Okay, the fact that this works with a string array suggests a possible
solution: Somehow copy the file to a string array and make sure it ends
with a NULL.  Perhaps this string array could be called a "buffer"?
Then it might be possible to use strtok() with "\n" as the delimiter
to get a record? Then use strtok() with "\t" as a delimiter to get each
field and assign each one to a separate array (like fld1[], fld2[]...)?
Then I might be able to do something in a printf() to format the output
of each field? 

Am I even approaching this problem in a manner that might work?  It 
seems like a lot of work, but then again, C is known for being hard
to work with when it comes to strings.

I've found an example that does ALMOST what I want to do, except it
creates a random-access file that contains the records. The program
does create a text file of the data in the random-access file. But like
I said, it ALMOST does what I want.... I want to be able to read and
do a formatted output from a plain text file.  I'm beginning to think
that I need to look at the source code of "less" or "cat".  I wonder
where THAT is? fileutils?  (Aside: Yes, the source code is free, but YOU
have to FIND IT if you want to look at it! 8^D)

Happy Programming!
--
K



More information about the Courses mailing list