wyszukanie i zamiana w pliku

0

Mam problem, gdyż muszę napisać program który wyszuka w pliku znak i zamieni go na inny. Napisałem tylko kod do momentu w którym pyta się użytkownika który znak chce zamienić.

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

int main(int argc, char *argv[])
{ 
  char znak;
  FILE *plik;
/*Otwarcie pliku*/  
  plik = fopen("plik.txt", "r"); 
  
/*Sprzwdzanie czy plik istnieje, jeżeli tak to wyświetala zapisany wcześniej napis*/  
  if (plik!=NULL) {
     fscanf(plik,"%s",&napis);
     fclose(plik);
     printf("Tekst: %s\n", napis);
  }

/*Zapisuje nowe słowo do pliku*/    
  printf("Nowy tekst: \n");
  scanf("%s",&napis);
  plik = fopen("plik.txt","w");
  fprintf(plik,"%s\n", napis);
  fclose(plik);
  
  printf("Jaki znak chcesz zamienic?\n");
  scanf("%s\n", znak);   
  
  system("PAUSE");	
  return 0;
}

Byłbym wdzięczny gdyby ktoś pomógł.

0

Powiem Ci, że musisz sobie wczytać zawartość pliku, podmienić znaki i dopiero zapisać plik :)

0

Problem jest jednak w tym, że nie wiem jak wczytać z pliku do tablicy. Znalazłem tylko, że muszę to zrobić z funkcji fgets, lecz jak z niej poprawnie skorzystać to nie wiem.

0
Blood napisał(a)

Powiem Ci, że musisz sobie wczytać zawartość pliku, podmienić znaki i dopiero zapisać plik :)

Nie musi. Nie dezinformuj kolegi.

Do wątkotwórcy: postaraj się chłopie. Nikt za Ciebie nie będzie odwalał zadania. Poczytaj o trybach otwarcia pliku, odczycie i zapisie. Wszystko masz w dokumentacji.

0

To w jaki sposób będzie podmieniał znaki w pliku?

0
Blood napisał(a)

To w jaki sposób będzie podmieniał znaki w pliku?

Jest taka funkcja jak fseek, którą można przesunąć wskaźnik pliku na odpowiednie miejsce: http://www.cplusplus.com/reference/clibrary/cstdio/fseek/
@Niewidoczny Google Twoim przyjacielem jest

0

Oke, już wiem ocb. Zapomniałem, że wpisując znak do pliku, nadpisujemy ten, który tam się znajdował.

0
Blood napisał(a)

To w jaki sposób będzie podmieniał znaki w pliku?

Np. tak:

#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>


int  main(int  argc, const char  *argv[]) {
    int         fd;
    char        r;


    if ( argc != 4 ) {
        fprintf(stderr, "Usage:  rchr SEARCH REPLACE FILE\n");
        return 1;
    };

    if ( (fd = open(argv[3], O_RDWR)) == -1 ) {
        perror("open()");
        return 2;
    };

    while ( 1 ) {
        if ( !read(fd, &r, 1) )
            break;

        if ( r == argv[1][0] ) {
            lseek(fd, -1, SEEK_CUR);
            write(fd, &(argv[2][0]), 1);
        };
    };

    return close(fd) * -1;
}

:D

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