Posiadam coś takiego (większość zaczerpnięta z manuali).
program skanuje plik aby odczytać jego rozmiar , alokuje pamięć , przepisuje zawartość do bufora. Teraz myślałem żeby użytkownik podał ID rekordu który chce usunąć i poprzez strstr odnaleźć początek szukanego rekordu(x). Następnie zapisz od 0 elementu do x oraz od x+ilość elementów w wierszu do końca bufora. Idea chyba nie jest taka zła(strstr to słabe ogniwo gdyż wyszukuje 1 hasło = id musi być unikatowe).
Problem w rozpoznaniu ilości elementów w usuwanym wierszu. Najlepiej gdyby był on stalą wartością w moim przypadku(nie tym poniżej) każdy wiersz to 1 rekord struktury
id[max] marka[max1] model[max2] cena [max3] przebieg[max4] <- każde pole ma ustalony max rozmiar. Tylko co z tego jeżeli np do marki wpisze "a" to będzie długości 1 znaku musiałoby jakoś automatycznie uzupełniać spacjami do MAX wielkości.
Inny pomysł to od wartości X zacząć wyszukiwać znaku końca Lini \n\r (jakiś y)- w tym przypadku mam dany początek i koniec wiersza = zapisz od 0 do x i od y do końca bufora.
A masz już funkcje która wyświetla pierwszy z brzegu rekord z pliku?
Pierwszy/ostatni to żaden problem od 0 do znaku końca Lini, tylko jak to zastosować do 2,3,4 etc linijek ;/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE * pFile;
long lSize;
char * buffer, *s;
size_t result;
int i,x ;
pFile = fopen ( "slownik.txt" , "rb" ); // otwarcie przykladowego pliku
if (pFile==NULL) {fputs ("File error",stderr); exit (1);}
// odczyt rozmiaru pliku
fseek (pFile , 0 , SEEK_END); //ustawienie pozycji w pliku pfile na pozycji poczatkowej az do konca(SEEK_END)
lSize = ftell (pFile); //ftell mowi gdzie dokladnie jest wskaznik pliku
rewind (pFile);
// rezerwowanie pamieci dla calego pliku
buffer = (char*) malloc (sizeof(char)*lSize); // rezerwowanie pamieci // jedyna linijka ktorej nie rozumiem
if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}
// copy the file into the buffer:
result = fread (buffer,1,lSize,pFile);
if (result != lSize) {fputs ("Reading error",stderr); exit (3);}
// caly plik znajduje sie w bufforze w postaci ciagu znakow enter = 2 znaki \n\r
s = strstr(buffer, "ID"); // znajduje ,,id'' rekordu
if (s != NULL)
{
x = s - buffer;
printf("Found string at index = %d\n",x); //wypisanie pozycji gdzie rozpoczyna sie x
}
fclose (pFile);
free (buffer);
return 0;
}