Warning
This page is located in archive.

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 <stdio.h>
#include <string.h>
#include <stdlib.h>
 
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 <stdio.h>
 
 
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);
}

courses/b0b99prpa/solutions/lab11.txt · Last modified: 2019/12/05 07:49 by viteks