Program FILTER v C

Programovacie jazyky, rady, poradňa...
tomy72
Light Expert
Light Expert
Príspevky: 52
Registrovaný: 25 okt 2008, 17:32

Program FILTER v C

Príspevok od používateľa tomy72 »

prosim vas nevedeli by ste mi pomoct spravit program v C podla zadania lebo to musim odovzdat v skole a neviem co s tim:

Napísať program FILTER , ktory otvorí vstupný súbor, číta ho a prepisuje do výstupného súboru, pričom však vynecháva všetky c-čkové komentáre (t.j text medzi /*a*/ včitane zatvoriek)
- vstupný súbor (nanovo) vytvorí
- mená vstupného a výstupného súboru dostanete ako argument pri spustení z príkazového riadku
>filter vstup.txt vystup.txt
- pokiaľ nastane nejaká I/O chyba vypíše zmysluplné chybové hlásenie na obrazovku a skončí.


keby ste mi s tim vedeli poradit bol by som vam strasne vdacny.
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Čo máš z toho už urobené?
tomy72
Light Expert
Light Expert
Príspevky: 52
Registrovaný: 25 okt 2008, 17:32

Príspevok od používateľa tomy72 »

no v podstate to ze mi to precita z jedneho suboru a zapise do druheho ale nemam tam to aby mi to vynechavalo tie komentare
#include <stdio.h>
int main(void) {
char znak;
FILE* vstupnySubor = fopen("Cvic4_Priklad3.cpp","r"); FILE* vystupnySubor = fopen("vystupny_subor.txt","w");
if(vstupnySubor==NULL) {
printf("Vstupny subor sa nepodarilo otvorit!");

fclose(vstupnySubor); fclose(vystupnySubor);
return 0; }
while(EOF!=(znak=fgetc(vstupnySubor)))
{
fputc(znak,vystupnySubor); }
fclose(vstupnySubor); fclose(vystupnySubor);
return 0;
}
c-ice
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 475
Registrovaný: 04 mar 2008, 15:18
Kontaktovať používateľa:

Príspevok od používateľa c-ice »

Tu mas mas tam aj naznacene to ako tam budes davat parametre s command linu dolad si to sam ;)

Kód: Vybrať všetko

#include <stdio.h>

int main(/*int argc, */char *argv[]) {
		//if(argc==2) {
    char znak,znak2;
    int zapis=1,stav; // mod ci moze zapisovat 0=Nemoze, 1=OK,3=je to v pi*i
    FILE* vstupnySubor = fopen("ss.txt","r");//fopen(argv[1],"r");
    FILE* vystupnySubor = fopen("vystupik.txt","w");//fopen(argv[2],"w");
		
    if(vstupnySubor==NULL)	{
		  printf("Vstupny subor sa nepodarilo otvorit!");		
   	}
   	else{
      while(feof(vstupnySubor)==0) 
		  {
		      stav=zapis;
          znak=fgetc(vstupnySubor);
		      if (znak=='*' || znak == '/') {
            stav=3;
            znak2=fgetc(vstupnySubor);
            if (znak2=='*') zapis=0;
            if (znak2=='/') zapis=1; 
          }
          if(zapis<=stav && zapis==1) {
                fputc(znak,vystupnySubor);
                if(stav==3) fputc(znak2,vystupnySubor);
                stav=1;
          }
          if (zapis>stav) {
            znak=fgetc(vstupnySubor);
            fputc(znak,vystupnySubor);
          }
   	  }
		}
		fclose(vstupnySubor);
   	fclose(vystupnySubor);	
   	//}else printf("musis zadat 2 vstupne argumenty , \nv tvare \"nazov_programu.exe vstup.txt vystup.txt\"\n ");
   	system("PAUSE");
return 0;
}
//edit jop stale som si hovoril ze to moze mat 3 stavy a zabudol som ho nakoniec ten 3ti dat :)
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

Príspevok od používateľa Snacker »

c-ice
Mne to blbne ten tvoj skript. ak dam napr. vstup:

Kód: Vybrať všetko

AHoj a/ko sa m*as? Ja sa mam /* celkom dobre */ a ty?
vysup je:

Kód: Vybrať všetko

AHoj a/o sa m*s? Ja sa mam  a ty?
a mal by asi byt:

Kód: Vybrať všetko

AHoj a/ko sa m*as? Ja sa mam   a ty?
a neni to trosku neprehladne??

tomy72
Na aku chodis skolu? Ved je to par podmienok. Cecko som preletel si pred rokom takze nic si z neho uz nepamatam ale tak skus:

Kód: Vybrať všetko

#include <stdio.h>

main(){
FILE *fr, *fw;
char c;
char b;
char memory;
int komentar = 0;

fr = fopen("vstup.txt", "r");
fw = fopen("vystup.txt", "w");

while ((c = getc(fr)) != EOF){

if(komentar == 1){
  if(memory == '*' && c == '/'){  
   komentar = 0;  
   c = b;                  
 }
}

if(komentar == 0){
  if(c == '/') {
    memory = c;
    continue;
  }

  if(memory == '/' && !(c == '*')){
    putc('/', fw);
  }

if(memory == '/' && c == '*'){
  komentar = 1;
}  

if(komentar == 0){
  putc(c, fw);
}
}

memory = c;
}
  close(fr);
  close(fw);

return 0;
}
Premenna b je tam len tak lebo si nepamatm ako sa do premennej dava prazdna hodnota :P
tomy72
Light Expert
Light Expert
Príspevky: 52
Registrovaný: 25 okt 2008, 17:32

Príspevok od používateľa tomy72 »

dakujem pekne za vasu ochotu a pomoc pomohlo mi to
Napísať odpoveď