Data Files - C Interview Questions and Answers


  1. How can I read and write comma-delimited text?

    Many of today's popular programs use comma-delimited text as a means of transferring data from one program to another, such as the exported data from a spreadsheet program that is to be imported by a database program. Comma-delimited means that all data (with the exception of numeric data) is surrounded by double quotation marks ("") followed by a comma. Numeric data appears as-is, with no surrounding double quotation marks. At the end of each line of text, the comma is omitted and a newline is used.

    To read and write the text to a file, you would use the fprintf() and fscanf() standard C library functions. The following example shows how a program can write out comma-delimited text and then read it back in.

    #include <stdio.h>
    #include <string.h>
    typedef struct name_str
    {
         char       first_name[15];
         char       nick_name[30];
         unsigned years_known;
    } NICKNAME;
    NICKNAME nick_names[5];
    void main(void);
    void set_name(unsigned, char*, char*, unsigned);
    void main(void)
    {
         FILE*     name_file;
         int       x;
         NICKNAME tmp_name;
         printf("\nWriting data to NICKNAME.DAT, one moment please...\n");
         /* Initialize the data with some values... */
         set_name(0,    "Sheryl",      "Basset",      26);
         set_name(1,    "Joel",        "Elkinator",    1);
         set_name(2,    "Cliff",       "Shayface",    12);
         set_name(3,    "Lloyd",       "Lloydage",    28);
         set_name(4,    "Scott",       "Pie",          9);
         /* Open the NICKNAME.DAT file for output in text mode. */
         name_file = fopen("NICKNAME.DAT", "wt");
         /* Iterate through all the data and use the fprintf() function
            to write the data to a file. */
         for (x=0; x<5; x++)
         {
              fprintf(name_file, "\"%s\", \"%s\", %u\n",
                          nick_names[x].first_name,
                          nick_names[x].nick_name,
                          nick_names[x].years_known);
         }
         /* Close the file and reopen it for input. */
         fclose(name_file);
         printf("\nClosed NICKNAME.DAT, reopening for input...\n");
         name_file = fopen("NICKNAME.DAT", "rt");
         printf("\nContents of the file NICKNAME.DAT:\n\n");
         /* Read each line in the file using the scanf() function
            and print the file's contents. */
         while (1)
         {
              fscanf(name_file, "%s %s %u",
                         tmp_name.first_name,
                         tmp_name.nick_name,
                         &tmp_name.years_known);
              if (feof(name_file))
                   break;
              printf("%-15s %-30s %u\n",
                         tmp_name.first_name,
                         tmp_name.nick_name,
                         tmp_name.years_known);
         }
         fclose(name_file);
    }
    void set_name(unsigned name_num, char* f_name, char* n_name, unsigned years)
    {
         strcpy(nick_names[name_num].first_name, f_name);
         strcpy(nick_names[name_num].nick_name,  n_name);
         nick_names[name_num].years_known = years;
    }
    


« Prev   1 2 3 4 5 6 7 8 9