fbpx
  1. sqkare
  2. S.O.S. Computer
  3. Domenica, 03 Dicembre 2006
  4.  Subscribe via email
devo realizzare un programma per il progetto di lab. in cui un MAIN acceda a diversi file in formato .txt(a seconda di ciò che voglia eseguire) e legga alcune "macroistruzioni" (ignoro cosa siano).

in pratica con la funzione fopen() apro il file ma poi come faccio ad eseguire le istruzioni? e come devo scriverle le istruzioni nel file .txt?

vi prego aiutatemi altrimenti sono nella m***a fino al collo.

Grazie
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Se, come penso, sul file le macroistruzioni sono distribuite su più righe, una volta aperto il file devi usare le

char *fgets(string[] nome_riga, int MAX, FILE *sorgente)

in un ciclo while che termina quando il file sorgente è terminato (la fgets ritorna NULL)

ovviamente, se devi lavorare con ogni riga e leggere parte di essa, devi invocare la sscanf(string[] nome_riga, ...) dove i puntini di sospensione stanno al posto dei tipi dei paramentri che devi leggere (%s stringhe, %d interi) seguiti dai nomi che dai loro..

Per la scritturadevi usare la fprintf(FILE *destinatario, char *formato, paramentri)

dove il formato è di nuovo %d, %s ecc

In bocca al lupo!
Comment
There are no comments made yet.
  1. more than a month ago
  2. S.O.S. Computer
  3. # 1
Accepted Answer Pending Moderation
Grazie mille della tempestiva risposta...
Ma non mì è ben chiara una cosa: il file in .txt a cui devo accedere deve contenere delle istruzioni che mi eseguano delle funzioni(printf(), cos(),sin(),ecc...)
potresti farmi un esempio?

tipo un file main che apre il file ciao.txt, e il file ciao.txt che contiene due righe(di macroistruzioni) contenenti due printf(). (così che, se volessi cambiare le scrittedelle printf(), il main resterebbe lo stesso e cambierei solo le macro del .txt)

Grazie mille!
Comment
There are no comments made yet.
  1. more than a month ago
  2. S.O.S. Computer
  3. # 2
Accepted Answer Pending Moderation
Per la prima cosa è semplice: mettiamo che il file.txt sia nella cartella C:

[code type="markup"]int main(int argc, char *argv[])
{
FILE *fp;
char *i;
char comando[50];
//il file viene aperto in lettura e scrittura posizionando lo stream all'inizio
fp=fopen("C:\file.txt", "r+";);
if (fp!=NULL)
while(i!=NULL)
{
i=fgets(comando, 50, fp);
if (i!=NULL)
{
//qui dentro fai le operazioni che devi con la macroistruzione
//contenuta nella variabile comando
}
}
}[/code]

Non ho capito cosa intendi per fprintf che non cambia il main...
Cmq per capire meglio l'uso delle funzioni di input e output guarda qui:

http://digilander.libero.it/uzappi/C/librerie/funzioni/fopen.html
Comment
There are no comments made yet.
  1. more than a month ago
  2. S.O.S. Computer
  3. # 3
Accepted Answer Pending Moderation
questo è quello che ho fatto io:
può andare? è corretto?


[code type="markup"]int main()
{

FILE *stream;
char nome_file[20];
char string[40];
static float encoder[5];
int c_encoder=0;
int i;
int caso;
iniz_lett:

printf("inserire il nome del file compreso di estensione\n\n";);
scanf("%s", nome_file);
printf("\n\n%s\n", nome_file);
//open a file in read mode

if((stream = fopen(nome_file,"r";))==NULL)
{
printf("Impossibile aprire il file.. \n(assicurarsi di aver inserito il 'nome' in maniera corretta)";);
getch();

goto iniz_lett;

}
else
{
stream=fopen(nome_file, "r";);
fgets(string,40,stream);
printf("\n%s", string);



caso=atof(&string[0]);



//------------->leggo il primo carattere della stringa e switcho



printf("\n\n%i",caso);
getch();

switch(caso) {
case 0:

printf("\n\ncaso zero";);
break;

case 1:

for(i=3; c_encoder<5; i+=6)
{
encoder[c_encoder]=atof(&string[i]);
printf("\n\n%2.2f", atof(&string[i]));
if(string[i-1]=='m')
{
encoder[c_encoder]=-(abs(encoder[c_encoder]));
}
c_encoder++;
}//fine ciclo for


printf("\n BASE Encoders= %2.2f\n",encoder[0]);
printf(" SHOULDER Encoders= %2.2f\n",encoder[1]);
printf(" ELBOW Encoders= %2.2f\n",encoder[2]);
printf(" PITCH Encoders= %2.2f\n",encoder[3]);
printf(" ROLL Encoders= %2.2f\n",encoder[4]);
break;

case 2:
//------------>leggo angoli
printf("caso due";);

break;

}//fine switch
getch();

fclose(stream);

}//fine else

system("PAUSE";);
return 0;
}[/code]

e questi sono i file di testo:

uno.txt:

[code type="markup"]1>m0100>p0200>m1300>m0034>p0560
[/code]
due.txt:
[code type="markup"]0
[/code]

quello che chiedevo io era, se è possibile aprire un file di testo con al suo interno delle istruzioni direttamente in c in modo tale che aprendo il file dal main vengano eseguite direttamente le istruzioni.

esempio:

uno.txt:
[code type="markup"]printf("ho aperto il file uno..";);[/code]

Ancora Grazie mille della disponibilità, non puoi capite quanto mi abbia aiutato!!!
Comment
There are no comments made yet.
  1. more than a month ago
  2. S.O.S. Computer
  3. # 4
Accepted Answer Pending Moderation
Guarda, il codice credo vada bene.. purtroppo, senza commenti le mie capacità di comprensione sono limitate già riguardando miei vecchi programmi... :P
Ad ogni modo se lo fai girare e funziona, vuol dire che va bene, no?!?

Cmq se nel file non ci sono più righe, invece della fgets puoi utilizzare la fscanf...

Qui
http://digilander.libero.it/uzappi/C/librerie/funzioni/scanf.html
ci sono tutte le funzioni per l'input da file.

Per l'altra cosa, ovvero l'utilizzo di istruzioni scritte su file, dubito che si possa fare, perchè il C è un linguaggio compilato e il codice non è automodificante (come per l'asm), nè interpretato, come il Java... ciò vuol dire che quando fai girare il programma il "pacchetto" dovrebbe già essere tutto pronto...

Poi può essere anche che mi sbagli ma, intuitivamente, non mi sembra una cosa fattibile!

Sono contenta di averti sbloccato.. buon lavoro!
Comment
There are no comments made yet.
  1. more than a month ago
  2. S.O.S. Computer
  3. # 5
  • Page :
  • 1


There are no replies made for this post yet.
Be one of the first to reply to this post!