"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares
si in effetti sembra essere l'approccio migliore!
Comunque ora sto provando a scriverlo partendo da 0 in C, senza flex. E' praticamente il mio primo programma "serio" (senza contare gli esercizietti didattici, che ho comunque fatto anni fa) che creo, e lo uso anche a fini didattici. La prima metà l'ho già fatta e funziona perfettamente!![]()
Non dovrebbe essere complicato dato che è line-based e senza blocchi di codice...
E dato che ogni tipo di riga si riconosce dalla seconda parola separata da spazi!
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares
No, non è complicato. Devo solo ragionarci un po' su, ma è normale!
Ho riscontrato ora un piccolo problema. Sicuramente c'è una funzione che risolve il mio problema, però non la conosco e se devo gestirla "alla grezza", non è il massimo....
Dunque:
supponiamo che io leggo una riga intera del file e la metto in una stringa (quindi array di caratteri). Supponiamo che questa stringa contenga soltanto un qualcosa del tipo:
[ 8 6 ]
io devo memorizzare in un array numerico i due valori. quindi dovrò ottenere input[0] = 8 e input[1] = 6.
il tutto però è attualmente memorizzato in una stringa. quindi io leggo la cella di posizione 3 dell'array string e salvo il suo contenuto in input[0]. Cioè sarà input[0] = stringa[3]; (anche qua ci sarebbe il problema di conversione, perchè il numero lo vede come carattere... e quindi input[0] non lo vede come 8 ma come 56, che è il numero ascii del carattere '8'. Io per ora ho risolto facendo input[0] = stringa[3] - 48; Non so se magari esiste un sistema più elegante... )
Fino a qua tutto ok.
Il problema si presenta quando nella stringa mi ritrovo ad avere
[ 10 7 ]
cioè un numero di 2 (o più) cifre.
Se facessi come prima, cioè input[0] = stringa[3] memorizzo soltanto l'1. se invece faccio input[0] = stringa[4] memorizzo solo lo 0. Io vorrei salvare il numero intero, in un unica cella del mio array di interi.
Esiste un modo per fare ciò? Basterebbe una funzione che legga una singola stringa, cioè tutto ciò che è delimitato dagli spazi. E che possibilmente lo converta subito come intero, e non come carattere '10'
Grazie mille!![]()
Puoi usare sscanf o strtok + atoi
"Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares
Figata! sscanf è proprio adatto a quello che devo fare io, e mi semplifica un sacco la vita!
Praticamente devo cancellare un sacco di righe di codice, e sostituirle con un paio di sscanf... e dovrei impararmi un po' più di funzioni, per evitare di fare giri strani quando si possono evitare utilizzando semplici funzioni...
Aggiornamento: Parser terminato qualche giorno fa. L'ho provato e funziona bene! Grazie per i consigli!
PS: 1'060 righe di codice! :O E' vero che è ben commentato e ci sono molti controlli sull'apertura e corretta scrittura dei file/buffer, però... non pensavo fosse così corposo!![]()