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()