====== 11. Práce se soubory ======
===== Textový soubor =====
$ cat databaze.txt
jules verne;1890;dva roky prazdnin
bohumil riha;1951;honzikova cesta
$ ./a.out -i databaze.txt
autor: jules verne
rok: 1890
nazev: dva roky prazdnin
autor: bohumil riha
rok: 1951
nazev: honzikova cesta
jules verne : dva roky prazdnin (1890)
bohumil riha : honzikova cesta (1951)
#include
#include
#include
typedef struct
{
char * autor;
char * rok;
char * nazev;
} kniha;
int main(int argc, char * argv[])
{
FILE *f;
char slovo[20], soubor[20], radek[100];
int a, e = 0, pocet = 0;
kniha ** knihovna = malloc(sizeof(kniha *));
for (int i = 0; i < argc; i++)
{
if (!strcmp("-i", argv[i]))
{
e = 1;
strcpy (soubor, argv[i+1]);
}
}
if (e == 0)
{
printf("nebyl zadan vstupni soubor\n");
return 100;
}
f = fopen(soubor, "r");
if (f == NULL)
{
printf("neco neni v poradku\n");
}
while (fgets(radek, 100, f))
{
// printf ("%s\n", radek);
kniha * t = malloc (sizeof(kniha));
// autor
strcpy (slovo, strtok (radek, ";"));
t->autor = malloc (strlen(slovo) + 1);
strcpy (t->autor, slovo);
printf ("autor: %s\n", t->autor);
// rok
strcpy (slovo, strtok (NULL, ";"));
t->rok = malloc (strlen(slovo) + 1);
strcpy (t->rok, slovo);
printf ("rok: %s\n", t->rok);
// nazev
strcpy (slovo, strtok (NULL, "\n"));
t->nazev = malloc (strlen(slovo) + 1);
strcpy (t->nazev, slovo);
printf ("nazev: %s\n", t->nazev);
// naplneni knihovny
knihovna[pocet++] = t;
knihovna = realloc (knihovna, (pocet+1)*sizeof(kniha *));
}
for (int i = 0; i < pocet; i++)
{
printf("%-20s: %s (%s)\n", knihovna[i]->autor, knihovna[i]->nazev, knihovna[i]->rok);
}
return 0;
}
===== Binární soubor =====
#include
int main()
{
FILE *f = fopen ("data.bin", "rwb");
unsigned char i = 100;
unsigned char j = 0;
fwrite (&i, sizeof(unsigned char), 1, f);
fseek (f, 0, SEEK_SET);
fread (&j, sizeof(unsigned char), 1, f);
printf("j = %i\n", j);
fclose(f);
}