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