Newsgroup: it.comp.lang.c
Titolo: Giorni dell'anno

Salve a tutti, vorei provare a scrivere un prog
che crei tanti file.txt quanti sono i giorni
dell'anno , partendo da un dato giorno ,
in modo che ogni file abbia la forma:
1gennaio2006domenica.txt. , magari anche in una
cartella che rappresenti il mese.
Mi sapete fare degli esempi?
Grazie a tutti e Buon Anno! :-)
Ciao


Una array con i nomi dei mesi, una con i nomi dei giorni della settimana.
Inizializzi una variabile di tipo time_t con mktime al 1 gennaio 
dell'anno e un'altra al 31 dicembre dello stesso (eventualmente 
cambiando le date puoi fare in modo di passare da un giorno all'altro) 
con gli orari di mezzogiorno (per non aver problemi di ora legale).
A questo punto fai un ciclo for tra i due time_t incrementando di 86400 
(i secondi in 24 ore) e con localtime inizializzi una struttura tm che 
ti restituisce numero del giorno, numero del mese (come indice per 
l'array, quindi 0 è gennaio), numero dell'anno (a partire dal 1900) e 
giorno della settimana (0 è la domenica).
Hai già la gestione degli anni bisestili.
Con il nome del file, poi, utilizzi una sprintf e ti componi il nome del 
file.
Un consiglio: per avere ordinamenti più semplici dei file per data, puoi 
utilizzare questa maschera:
YYYYmmmDDggg, ossia %04d%s%02d%s
dove YYYY è l'anno a 4 cifre,
mmm è il nome del mese (però converrebbe il numero del mese a 2 cifre 
con lo zero iniziale)
DD è il giorno del mese a 2 cifre con lo zero iniziale (per evitare di 
avere una lista 1-10-11-12-...-19-2-20-21-... ecc.)
ggg è il giorno della settimana.
LP

[...]
.. ti ringrazioper le info!
Ciao

[...]
... non e mica semplice! :-)
Ciao


vediamo:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define SECONDS_DAY  (3600*24) //86400 secondi per una giornata
char *pszMesi[]={
   "gennaio","febbraio","marzo","aprile","maggio","giugno",
   "luglio","agosto","settembre","ottobre","novembre","dicembre"
};
char *pszSettimana[]={
   "domenica","lunedì","martedì","mercoledì",
   "giovedì","venerdì","sabato"
};
/* Funzione crea_data:
  * dato il giorno (1-31), il mese (1-12) e l'anno (1970-2035)
  * ritorna il time_t della data selezionata alle 12:00
  */
time_t crea_data(int giorno, int mese, int anno) {
   struct tm data;
   memset(&data,0,sizeof(data));
   data.tm_mday=giorno;
   data.tm_mon=mese-1;
   data.tm_year=anno-1900;
   data.tm_hour=12;
   return mktime(&data);
}
int main () {
   time_t data0, data1;
   time_t un_giorno;
   struct tm giorno;
   char szNomeFile[255];
   //Data di inizio e di fine
   //Seleziono 2 anni
   data0=crea_data(1,1,2000);
   data1=crea_data(31,12,2001);
   // ora cicliamo tra le due date
   for (un_giorno=data0; un_giorno<=data1; un_giorno+=SECONDS_DAY) {
     //leggiamo la data selezionata
     giorno=*localtime(&un_giorno);
     // primo modo: mese come testo
     //Componiamo il nome del file
     sprintf (szNomeFile,"%04d%s%02d%s.txt",
	     giorno.tm_year+1900,
	     pszMesi[giorno.tm_mon],
	     giorno.tm_mday,
	     pszSettimana[giorno.tm_wday]);
     printf ("%s\n", szNomeFile);
     // secondo modo: mese come numero
     //Componiamo il nome del file
     sprintf (szNomeFile,"%04d%02d%02d%s.txt",
	     giorno.tm_year+1900,
	     giorno.tm_mon+2,
	     giorno.tm_mday,
	     pszSettimana[giorno.tm_wday]);
     printf ("%s\n", szNomeFile);
   }
   //Fine
}
Questo è un piccolo stralcio dell'output nel caso dei mesi in lettere
2001novembre28mercoledì.txt
2001novembre29giovedì.txt
2001novembre30venerdì.txt
2001dicembre01sabato.txt
2001dicembre02domenica.txt
2001dicembre03lunedì.txt
2001dicembre04martedì.txt
2001dicembre05mercoledì.txt
2001dicembre06giovedì.txt
Piccola nota: ho solo esportato l'inizializzazione delle 2 date nella 
funzione crea_data per comodità, ma potevo anche farne a meno.
LP