Stránka 1 z 1
Mazání v souboru
Napsal: 30 led 2010 18:15
od zabi
Nevíte prosím někdo, jak smazat řádky v souboru, do kterého se ukládají data?? Dejme tomu, že po stisknutí "d" se v soboru smaže posledních 5 řádků.
Stávající kód - slouží pro otevření a vypsání dat v souboru. Potřeboval bych ještě nějak vyřešit to smazání...
Kód: Vybrat vše
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "string.h"
FILE *input;
FILE *output;
char znak;
char nazev[20];
char zanr[10];
char role[50];
char zeme[20];
/*int rok;*/
int main(void)
{
printf("Seznam DVD\n==========\n\n");
printf("d+Enter = smazat posledni\n\n\n");
if ((input = fopen("soubor.txt", "r")) == NULL) {
printf("Chyba pri otvirani souboru!\n\nPro ukonceni programu stiskni libovolnou");
getch();
}
while ((znak = getc(input)) != EOF)
putchar(znak);
getch();
return 0;
}
Re: Mazání v souboru
Napsal: 31 led 2010 19:14
od CZechBoY
Jedině že bys četl řádek po řádku a ukládal to do proměnný, pak smazal poslendích 5 řádků a zapsal obsah proměnné do souboru.
Jinak nevim jak to udělat, žádné mazání v souboru neznám :(
Re: Mazání v souboru
Napsal: 01 úno 2010 00:55
od zabi
No, asi tam tu funnkčnost dávat nebudu.
Akorát si ještě nevím rady s následujícím: Kód který jsem uvedl v prvním příspěvku sloouží k otevření souboru a vypsání jeho obsahu. Teď jsem si vytvořil funkčnost pro zapsání do souboru (princip fungování: stiskem n+ENTER se zobrazí: Vložte název filmu atd.). Bohužel, když to dám dohromady, tak mi to nejede:-( pořád se to bortí:-( Si s tím už nevím rady:(
Chtěl jsem tam dát i rok natočení. dám jej jako typ <b>int<b/> ale vůbec nefunguje - hází jiné čísla + se nevloží předchozí řádek. To taky nechápu, proč to tak je:-(
Kód pro otevření a čtení ze souboru:
Kód: Vybrat vše
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "string.h"
FILE *output;
char znak;
char nazev[20];
char zanr[10];
char role[50];
char zeme[20];
/*int rok;*/
int main(void)
{
printf("Seznam DVD\n==========\n\n");
printf("n+Enter = novy zaznam\n\n\n");
if ((input = fopen("soubor.txt", "r")) == NULL) {
printf("Chyba pri otvirani souboru!\n\nPro ukonceni programu stiskni libovolnou");
getch();
}
while ((znak = getc(input)) != EOF)
putchar(znak);
getch();
return 0;
}
Kód pro zápis:
Kód: Vybrat vše
{
printf("Zadej nazev filmu: ");
gets(nazev);
printf("Zadej zanr filmu: ");
gets(zanr);
printf("Hlavni role: ");
gets(role);
printf("Zadej zemi puvodu: ");
gets(zeme);
/*printf("Zadej rok natoceni: ");
scanf("%d", rok);*/
getch();
if (( output = fopen("seznam.txt","a+"))!=NULL);
{
fprintf(output,"Nazev: " "%s\n", nazev);
fprintf(output,"Zanr: " "%s\n", zanr);
fprintf(output,"Hlavni role: " "%s\n", role);
fprintf(output,"Zeme puvodu: " "%s\n\n", zeme);
/*fprintf(output,"Rok natoceni: ", rok);
printf("Zaznam pridan");*/
getch();
}
if (fclose(output) == EOF)
printf("Chyba pri zavirani souboru!\n);
}
Re: Mazání v souboru
Napsal: 01 úno 2010 02:14
od melior
Cteni ze souboru: uprav podminku
Kód: Vybrat vše
if ((input = fopen("soubor.txt", "r")) == NULL) {
printf("Chyba pri otvirani souboru!\n\nPro ukonceni programu stiskni libovolnou");
getch();
}
/* TADY */
else {
while ((znak = getc(input)) != EOF)
putchar(znak);
getch();
} /*a tady*/
return 0;
jinak se program i pri neotevreni souboru pokusi cist a spadne
co se ukladani / cteni roku tyce - : musis pouzit CCkovske funkce pro prevod cisla na string a naopak
tedy idealne
cislo = atoi(znak) a naopak sprintf("%d", cislo)
mazani ze souboru nejde, musis jedine cely soubor nacist a potom znovu zapsat bez vybranych zaznamu (otevreny soubor pro cteni cist do nejakeho bufferu a pak buffer hazet do noveho pro zapis a vynechavat zaznamy ktere nepotrebujes pri znovuzapisovani
take si dovoluji upozornit ze
gets() neulozi do retezce znak "\n", tedy ve vyslednem souboru budou zaznamy neodradkovane. poklud chces nacist i odradkovani, pouzij
fgets()