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;
}