PDA

View Full Version : [c] lettura da file


fsdfdsddijsdfsdfo
13-02-2007, 22:16
Salve ho una domanda.

io ho una tabella di questo tipo in un file .txt:


6 0 15
3 1 1 22 2 14 6
2 3 12 4 3
1 12 1
0


e voglio metterla in una matrice frastagliata di interi.
Come faccio?

in particolare ho tre problemi:
a) non riesco a far funzionare atoi
b) non riesco a mettere due numeri vicini come un sol numero
c) non riesco ad allocare le tabelle.
In particolare per il punto c:
1) come faccio a fare un malloc (o calloc) che a volte aumenta le colonne, a volte le righe?
2) come faccio a riconoscere il return per la nuova riga in modo da fare una nuova riga nella matrice? con iscntrl() ?


grazie mille siete degli angeli!

andbin
14-02-2007, 08:45
Salve ho una domanda.

io ho una tabella di questo tipo in un file .txt:


6 0 15
3 1 1 22 2 14 6
2 3 12 4 3
1 12 1
0


e voglio metterla in una matrice frastagliata di interi.
Come faccio?Innanzitutto c'è la questione dell'array "frastagliato" (in inglese ... "jagged" array).
In C non c'è modo di conoscere la dimensione di un array allocato dinamicamente .... cioè la devi sapere tu a priori in qualche modo. Non è come in Java dove puoi fare array.length. ;)

Quindi la prima questione è quella di stabilire come gestire la matrice bidimensionale "jagged". Una soluzione potrebbe essere questa:

typedef struct
{
int dim;
int *valori;
} RIGA;

typedef struct
{
int dim;
RIGA *righe;
} MATRICE;
La procedura da seguire è la seguente:

1) Apri il file in lettura (funzione fopen).
2) Leggi il file riga per riga (funzione fgets).
3) Devi spezzare la stringa usando lo spazio come delimitatore per ottenere delle stringhe relative ad ogni numero (funzione strtok).
4) Per ogni stringa che contiene un numero la converti in numero (funzione atoi).
5) Ogni numero lo inserisci nell'array 'valori' della struttura RIGA. Nota che l'array lo devi allocare e riallocare man mano che ottieni dei numeri (funzione malloc/realloc).
6) Ogni riga di interi rappresentata da una struttura RIGA la inserisci nell'array 'righe' della struttura MATRICE. Anche qui l'array 'righe' è da allocare/riallocare man mano che si aggiungono righe.

Alla fine chiudi il file e in una MATRICE hai l'array jagged.

Ti conviene scrivere il codice in modo da avere più funzioni dedicate alla gestione di questa matrice, ad esempio: una funzione per allocare la MATRICE e popolarla di valori da un file, una funzione per fare una free di tutti i dati nella matrice, una funzione magari per stampare i dati della matrice, ecc...

cionci
14-02-2007, 12:08
Probabilmente anche una lista di liste ti potrebbe essere utile...
Ogni lista contiene una riga e la lista di liste contiene le varie righe...