Program kopiujący zawartość z jednego pliku txt do drugiego

0

Witam,

Mam problem z napisaniem programu w C. Ma on skopiować zawartość
pliku txt podanego przez paramentr do drugiego pliku (również podanego
przez parametr) i zastąpić wybrany wyraz asteriksami (ilość asteriksów
zależna od długości wyrazu). Do tej pory udało mi się odczytać plik txt i
wypisać jego zawartość i tutaj utknąłem. Za każdą pomoc bardzo dziękuję

#include<stdio.h>
#include<stdlib.h>

int main(int argc,char* argv[])
{	
	
       FILE   *fp;
	      
	   if ((fp=fopen(argv[1], "r"))==NULL) {
	     printf ("Nie mogę otworzyć pliku %c do odczytu!\n", argv[1]);
	     exit(1);
	     }
	     
	     int chr;
	     while ((chr=fgetc(fp))!=EOF)
			printf("%c",chr);
			
		
	     
	     
	     
	
	
	fclose(fp);
	return 0;
} 

Jeśli nie chce wypisywać tylko skopiować to takie coś będzie działać?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(int argc,char* argv[])
{    
    
       FILE   *fp1;
       FILE      *fp2;
       
       
          
        if ((fp1=fopen(argv[1], "r"))==NULL) {
            printf ("Can't open file %c!\n", argv[1]);
             exit(1);
        }
        if((fp2=fopen(argv[2], "w"))==NULL){
            printf("Can't open file %c!\n", argv[2]);
            exit(1);
        }
                 
         int chr;
         while ((chr=fgetc(fp1))!=EOF)
            putc(chr, fp2);
            
        
         
         
         
    
    
    fclose(fp1);
    fclose(fp2);
    return 0;
} 

BTW mam również problem z parametrami w DevC++.
Jeśli miałem 1 plik to w parameters wystarczyło, że wpisałem ścieżkę do
niego. A co mam wpisać w parameters jeśli potrzebuje dwóch plików jak w
programie wyżej?

0
marcino123 napisał(a):

Jeśli miałem 1 plik to w parameters wystarczyło, że wpisałem ścieżkę do
niego. A co mam wpisać w parameters jeśli potrzebuje dwóch plików jak w
programie wyżej?
Tego bez doktoratu i habilitacji nie da się domyślić - trzeba wpisać dwie ścieżki do dwóch plików.

0

Ale mają być oddzielone czymś?

0

jak odpalasz program (np. z konsoli: shift i prawym w folderze -> otwórz okno poleceń):
nazwa.exe plik1.txt plik2.txt

2

W pierwszej linii programu powinieś też mieć:

if (argc != 3) { printf("nie podalaes parametrow"); return 1; }

oraz tutaj:

        if((fp2=fopen(argv[2], "w"))==NULL){
            printf("Can't open file %c!\n", argv[2]);
            fclose(fp1); // <-------------------------------
            exit(1);
        }

dodatkowo możesz zastąpić exit(1); zapisem return 1; (tylko w funkcji main)

0
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(int argc,char* argv[])
{    
    
       FILE   *fp1;
       FILE      *fp2;
       
       if (argc != 3) { 
               printf("Wrong parameters");
                return 1;
        }
          
        if ((fp1=fopen(argv[1], "r"))==NULL) {
            printf ("Can't open file %c!\n", argv[1]);
             exit(1);
        }
        if((fp2=fopen(argv[2], "w"))==NULL){
            printf("Can't open file %c!\n", argv[2]);
            return 1;
        }
                 
         int chr;
         while ((chr=fgetc(fp1))!=EOF)
            putc(chr, fp2);
            
        
         
         
         
    
    
    fclose(fp1);
    fclose(fp2);
    return 0;
}

O to chodzi? Czy w fp1 też to zmienić?

Dobra, program kopiuje. Teraz mógłby ktoś podpowiedzieć jak zamienić słowo podane przez użytkownika na ilość gwiazdek odpowiadające ilości znaków słowa

0
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(int argc,char* argv[])
{    
char *pch;
char x;
int i;
       
       
FILE   *fp1;
FILE      *fp2;
       
   if (argc != 3) { 
        printf("Wrong parameters");
        return 1;
        }
          
        if ((fp1=fopen(argv[1], "r"))==NULL) {
            printf ("Can't open file %c!\n", argv[1]);
             exit(1);
           }
            if((fp2=fopen(argv[2], "w"))==NULL){
                printf("Can't open file %c!\n", argv[2]);
                return 1;
            }
                 
int chr;

    while ((chr=fgetc(fp1))!=EOF)//reading all characters from file1
            putc(chr, fp2);//putting all characters from file1 to file2
            
        printf("Enter the word you want to replace\n");
        scanf("%s", &x);
        
        pch=strstr (fp2, x);
        strncpy (pch, "*", strlen(x));
        puts(fp2);
        
        
fclose(fp1);
fclose(fp2);
return 0;
}

Takie coś wykombinowałem, ale nie wiem gdzie mam błędy.

0
while((chr=fgetc(fp1))!=EOF) putc(isalpha(chr)?'*':chr,fp2);

Kto pyta ten się nie uczy.

0

Ale to mi zamieni każdą literę na ' * '. Ja potrzebuje zamiany wyrazu podanego przez użytkownika na ciąg ' * ' odpowiadający długości tego słowa.

0

No tak, tylko gotowiec, mózg włączyć to nie do pomyślenia:

while(!isspace(chr=getchar())) putc(isalpha(chr)?'*':chr,fp2);
0

Ja słabo co potrafię programować, z isspace i isalpha spotykam się po raz pierwszy. Dlatego nie oczekiwałem na gotowy kod tylko na podpowiedź. Ale dzięki.
Tylko, że nadal nie mam pojęcia jak to ma pomóc w moim programie. Teraz zamienia wpisany ciąg na *. A ja potrzebuje przekopiować tekst z plik1 do plik2 i zamienić podany wyraz na ciąg *. Jeśli to jest tak oczywiste to naprowadź mnie jakoś. Będę wdzięczny

0

Zamień fp2 na stdou, lub użyj putchar.

0

ale teraz nie kopiuje mi znaków z file1 do file2 tylko wyświetla je w konsoli. Ja potrzebuje, żeby skopiowało cały plik1 do pliku2. I tam zamieniło wybrane słowo przez użytkownika

1 użytkowników online, w tym zalogowanych: 0, gości: 1