Q. 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>typedefstructname_str
{charfirst_name[15];
charnick_name[30];
unsignedyears_known;
} NICKNAME;NICKNAME nick_names[5];
voidmain(void);
voidset_name(unsigned,char*,char*,unsigned);
voidmain(void)
{ FILE* name_file;intx;
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);}voidset_name(unsignedname_num,char* f_name,char* n_name,unsignedyears)
{ 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;}EACCES
-
Permission denied to access file
EINVACC
-
Invalid access code
The following example shows how to open a file in shared mode:
#include <stdio.h>
#include <fcntl.h>
#include <sys\stat.h>
#include <io.h>
#include <share.h>
void main(void);
void main(void)
{
int file_handle;
/* Note that sopen() is not ANSI compliant */
file_handle = sopen("C:\\DATA\\TEST.DAT", O_RDWR, SH_DENYNO);
close(file_handle);
}
Whenever you are sharing a file's contents with other programs, you should be sure to use the standard C library function named locking() to lock a portion of your file when you are updating it.
Comments
Post a Comment