Archief - [PROG]C Woorden uit bestanden verwijderen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

azkme

Legacy Member
Hallo,

ik zou graag een woord kunnen verwijderen uit een binair bestand, overschrijven met spaties is geen optie wat ik moet dat bestand nog inlezen en dan gaat em die spaties als een woord zien.

Ik ben geen C-brein dus ik probeer met beperkte kennis toch wat te rommelen ;)

Code:
typedef struct{
		char woord[20];
		int nummer;
}WOORDEN;

void woordenverwijderen(void){

	char tabwoord[20]={0};
	char hoofdl[20]={0};
	char c;
	int i=0;
	FILE *f;
	WOORDEN w;

	printf("\nWOORDEN VERWIJDEREN");

	printf("\n\nGeef het woord dat u wil verwijderen: ");
	scanf("%19s%c", &tabwoord, &c);

	for(i=0; i<strlen(tabwoord); i++)
		{
			hoofdl[i]= tolower(tabwoord[i]);
		}

	f = fopen("woorden.bin","ab+");
	while(fread(&w, sizeof(WOORDEN), 1, f))
	{
		if(w.woord == hoofdl){
			w.woord = '\0';
			w.nummer = '\0';
			printf("Woord verwijdert");
			}
		else
			printf("Woord kan niet terug gevonden worden in het bestand");
	}
	fclose(f);

	printf("\n\nDruk op een willekeurige toets om terug te gaan ..");
		getch();

}

Alle hulp is welkom! Dank u!

azkme

Legacy Member
Een vriend van me heeft me uit de nood geholpen .. kmoet wel zeggen dak er nooit op was gekomen om al die woorden behave het woord da ge zocht te gaan kopieren naar nen arrey, om dan daarna dien arrey over te schrijven in da bestand .. raar gedoe die C :o

Code:
void woordenverwijderen(void){

	char tabwoord[20]={0};
	char hoofdl[20]={0};
	char c;
	int i=0,y,gevonden=0;
	FILE *f;
	WOORDEN w;
	WOORDEN *behouden;
	
	printf("\nWOORDEN VERWIJDEREN");

	printf("\n\nGeef het woord dat u wil verwijderen: ");
	scanf("%19s%c", &tabwoord, &c);

	for(i=0; i<strlen(tabwoord); i++)
		{
			hoofdl[i]= tolower(tabwoord[i]);
		}

	f = fopen("woorden.bin","rb");

	// aantal woorden tellen en plaats make
	fseek(f,0,SEEK_END);
	behouden = malloc(sizeof(WOORDEN)*(ftell(f)/sizeof(WOORDEN)));
	fseek(f,0,SEEK_SET);

	i = 0;
	while(!feof(f))
	{
		fread(&w, sizeof(WOORDEN), 1, f);
		if(strcmp(w.woord,hoofdl)==0){
			printf("Woord gevonden");
			gevonden++;
			// niet onthouden
		} else {
			// wel onthouden
			behouden[i] = w;
			i++;
		}
	}
	// bestand uitgelezen
	fclose(f);
	
	if (gevonden) {
		// bestand opnieuw uitschrijven zonder gezochte woord

		f = fopen("woorden.bin","wb");
		for (y=0;y<i;y++) {
			fwrite(&behouden[i],sizeof(WOORDEN),1,f);
		}
		//  bestan opnieuw geschreven
		fclose(f);
	
		// bestand uitgeschreven
	} else {
		printf("Woord niet gevonden");
	}

	printf("\n\nDruk op een willekeurige toets om terug te gaan ..");
		getch();

}

Tyfius

Legacy Member
Wat je ook kan doen (en handig voor toekomstig gebruik) is een strReplace() functie maken, en die vervolgens oproepen.
Code:
void StrReplace(char *what, char *by, char *in, char *result)
{

        char *ptrIn, *ptrResult;
        unsigned int byLength = (unsigned int)strlen(by);
        unsigned int whatLength = (unsigned int)strlen(what);

        for(ptrIn=in, ptrResult=result; *ptrIn;) {
                if(strncmp(ptrIn,what,whatLength) == 0) {
                        strcpy(ptrResult, by);
                        ptrResult += byLength;
                        ptrIn     += whatLength;
                } else {
                        *ptrResult = *ptrIn;
                        ptrResult++; 
                        ptrIn++;
                }
        } 
        *ptrResult = (char)0;
}
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan