Newsgroup: it.lavoro.professioni.webmaster
Titolo: [Super OT] Linguaggio C

Ho un problemino per la lettura e scrittura su file in linguaggio C.
Ecco la questione:
Ho un file di testo in cui sono memorizzati i titoli di canzoni con la
durata.
Quello che devo fare è di leggere questi dati e poi metterli in una
struttura per poi salvare in tutti in un file binario.
Successimanete dovrò leggere le informazioni sempre dal file binario.
Ecco quanto ho fatto:
#include <stdio.h>
#include <stdlib.h>
/* vettore di caratteri */
struct lista{
        char durata[10],
        nome[10];
};
int main()
{
struct lista canzoni[3],e[2];
FILE* fp;
FILE* fb;
int i=0;
int j;
fb=fopen("CANZONI.BIN","wb");
fp=fopen("CANZONI.TXT","r");
while (!feof(fp))
{
      fscanf(fp,"%s%s\n",canzoni[i].nome,canzoni[i].durata);
      i++;
}
fwrite(&canzoni,sizeof(struct lista),3,fb);
fclose(fb);
fb=fopen("CANZONI.BIN","rb");
fread(&e,sizeof(struct lista),3,fb);
fclose(fp);
fclose(fb);
for (j=0;j<3;j++)
printf("\n\n\n%s %s",e[j].nome,e[j].durata);
return 0;
}
In questo modo leggo titoli e durata delle canzoni salvate nel file txt in
questo modo
titolo_canzone_a 3:20
titolo_canzone_b 5:20
titolo_canzone_c 3:10
titolo_canzone_d 1:20
titolo_canzone_e 7:12
Il problema è che i titoli spesso sono composti da parole separata da spazi
e quindi andrei in crisi.
Inoltre non riesco a capire come, una volta fatto il file binario, accedere
alla struttura del file leggendo ad esempio o solo il titolo o solo la
durata di una canzone.
Ho cercato risposta alle mie domande sul Kernigan ma nulla. Non riesco
proprio a capire

 Ho un problemino per la lettura e scrittura su file in linguaggio C.
un NG appropriato no e'?
--
Lino Mari [mod - it.economia.e-commerce]
http://www.ebow.it
 - e-business on web!
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - d2D004
E' triste, ma la parte di azienda con cui i mercati vogliono parlare č
spesso nascosta dietro una cortina di fumo, il cui linguaggio suona
falso - e spesso lo č.

 un NG appropriato no e'?
Certo, c'e' quello di C, ma nessuno mi risponde da due giorni. Poichè qui ho
sempre trovato massima disponibilità e i frequentatori hanno le conoscenze
più svariate, ho deciso di provarci, speficando, tra l'altro, in oggetto in
modo CHIARO ed EVIDENTE l'OT.
Grazie cmq


:Li ti viene insegnato a usare il C, non a saperlo applicare nelle sue
svariate forme. E' naturale quindi che non lo trovi.
--
------------------------------------
Impastato Marcello
 [Web] 
http://www.blueware.it
 [Email] 
coo...@blueware.it
 [icq] 146781935
 [Irc] 
irc.azzurra.org
 - #chatlandia, #blueware


[CUT]
Prova con 
http://www.experts-exchange.com
 troverai tutte le soluzioni.
--
ITHost (your host company)
Technical Manager
C. Paparelli (MCSE,MCSD,MCDBA)
http://www.ithost.ch


Non uso alcun database.
E' un progetto di un esame dell'università e devo fare tutto in C ANSI.
Grazie


Devo usare C ANSI. Solo C.

Puoi leggere una riga per volta, in un array di char.
Poi vai alla fine di quest' array e recuperi l'ora leggendo prendendo i
caratteri da destra a sinistra e appena trovi lo spazio tronchi.
Ovviamente il C non supporta il tipo stringa, quindi per prelevare da destra
a sinistra dovrai scorrere prima tutta la stringa finche non trovi 0
nell'array.
Dunque ricapitolando:
- leggi la riga di testo. (Questo penso lo sai fare)
- ti posizioni alla fine dell'array di char dove è letta temporaneamente la
riga di testo presa dal file (Un ciclo fino a quando nont trovi 0
nell'array).
- da destra a sinistra recuperi l'orario estrapolando i caratteri
dall'array, scorrendo l'array e tornando dalla fine al primo spazio.
- sostituisci il primo spazio con uno \0
- metti quello che si trova nell'array letto dal file nei titolo, e l'orario
recuperato dove ti pare.
Comunque quando si programma, non ci si butta sul codice, bisogna prima
riflettere su come si risolverebbe il problema, che solitamente si sa
risolvere.
Questo è un problema semplicissimo, infatti mentalmente a vista, chiunque è
in grado di separare 2 stringhe e di capire quale è il titolo e quale
l'orario, dunque si trattavas solo di codificare.

titolo_canzone_e 7:12
ok,
io farei cosi:
controllerei che lo spazio sia l'ultimo prima dello "\n" se e'
l'ultimo allora l'offset precedente e' il titolo (ovviamente fino allo
"\n" precedente o posizione in termini di byte)
Per accedere invece ai titoli direttamente o alle singole durate
dovresti creare il bin in modo che i campi di grandezza preimpostata
..
ciao