Newsgroup: it.comp.lang.c
Titolo: problema di indicizzamento

Ciao!Avevo già postato un po' di tempo fa.....
ma purtroppo avevo sbagliato a spiegarmi e inoltre non ero riuscito a
mettere in pratica l'aiuto che mi era stato dato.
Mi rispiego: devo fare un programma che dati due parametri dalla linea di
comando del tipo
    indicizza    testo.txt    testo.idx
legga il file testo.txt e da questo elemini le parole scritte nel file
escludi.txt(già presente nella stessa directory e di lunghezza variabile.
Tali parole sono scritte separate da una virgola) e produca il file
testo.idx con le parole rimanenti, elencate in ordine descrescente dalla
parola che appare più volte...
Vi riporto l'esempio...
testo.txt
La  mia casa è veramente una bella casa. E' bella come un fiore.
escludi.txt
li,lo,la,le,e,se,è,un,una
testo.idx
casa(n2);bella(n2);mia(n1);veramente(n1);casa(n1);come(n1);fiore(n1)
Pensavo, da come mi era stato suggerito, e come pensavo, di mettere le
parole contenute in escludi.txt in un char **escludi. Il mio problema è che
non so come allocare la memoria. In una prima passata leggo sequanzialmente
carattere per carattere dal file e conto le parole ma poi quando devo
allocare la memoria non so quanto sono lunghe le parole...come posso fare
questa operazione? E poi come fare a caricarle in memoria?
Grazie anticipatamente per la risposta.
Davide

 E poi come fare a caricarle in memoria?
  Nel secondo caso, puoi "unificare" le due azioni:
<code warn=no tested">
	#include <stdio.h>
	#include <stdlib.h>
	#include <string.h>
	/* ... */
	int      words;	/* number of counted words */
	int   ch,i,ndx;
	FILE       *in;
	char  buff[64];	/* temporary buffer */
	char **exclude;
	/* 
	 * Here the file operations and the calculation of the 
	 * number of words
	 */
	exclude=malloc(words*sizeof(char *));	
	for(i=0;i<words;i++) {
		ndx=0;
		while(((ch=fgetc(in))!=',')&&(ch!=EOF)) {
			*(buff+ndx)=ch;
			ndx++;
		}	/* while */
		*(buff+ndx)='\0';
		*(exclude+i)=malloc(ndx+1);
		strcpy(*(exclude+i),buff);
	}	/* for */
 
</code>
	Alla prossima,
		Marco

Ti ringrazio moltissimo per l' aiuto!!!! Sono riuscito finalmente a
risolvere il problema anche se per riuscire a farlo girare ho dovuto
aggingere un casting esplicito quando alloco memoria:
es: exclude=(char **)malloc(words*sizeof(char *));
Perchè? Ho fatto degli errori? Centra con il compilatore?
Ho già provato con dei file creati da me e funziona....
Adesso riesco finalmente tramite un ciclo a far confrontare le parole che ho
caricato in char **exclude con quelle che leggo sequenzialmente dal
file(leggo una parola dal file e la confronto con tutte quelle di escludi).
Adesso devo tenere le parole non escluse ed ordinarle in un file in base al
numero di volte che appaiono nel testo in modo decrescente. Io pensavo di
creare un array di strutture del tipo
struct restanti{
    char *parola;
    int n;
}
e poi una volta creato, leggere il numero più alto di n e cominciare a
scrivere sul file...
Devo sempre allocare la memoria come ho fatto prima? Essendo una struttura
cambia qualcosa?
E' la strada migliore o mi stò solo complicando la vita inutilmente? C'è un
modo più semplice?
Ti ringrazio infinitamente per la risposta....
Ciao!
Davide

 Ti ringrazio infinitamente per la risposta....
  Prego.
	Alla prossima,
		Marco