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>
typedefstruct
name_str
{
char
first_name[
15];
char
nick_name[
30];
unsigned
years_known;
} NICKNAME;
NICKNAME nick_names[
5];
voidmain(
void);
voidset_name(
unsigned,
char*,
char*,
unsigned);
voidmain(
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);
}
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