Fecha automatica en un TXT
18/8/2012 11:00PM
¿Sabes la respuesta?Responder
26/10/2012 08:40PM
puedes empezar creando una lista de esta manera
struct lista
{
char linea_archivo[100]; /*el tamaño que tu veas conveniente*/
}
typedef struct lista *lista;
lista nodo_ini;
lista recorre;
lista auxiliar;
esta funcion puedes llamarla desde cualquier lugar del programa
void guardar()
{
creas la variables necasarias
abres archivo primero lo abres para añadir
cargar_archivo(); /*easta funcion es importante*/
/*esta ultima funcion cara al archivo pero si no habia ningun archivo o estaba vacio no lo carga es por eso del numero 70 para mi juego esta bien adaptalo a tu programa, la estructura debe ser global pero se puede modificar
para sea local, depende de ti, yo la hice asi*/
luego biene esta otra funcion
insertar_reg_lista();/*añade un registro al final del archivo, en realidad
solo incrementa un nodo mas de la lista con informacion*/
luego cierras el archivo
y lo vuelves a abrir pero en nmodo de escritura asi todo lo que tenia se borrara, ya que la info anterior fue salvada en memoriay actualizada, pero sigue en meoria, ahora hay que guardar en disco, asi
recorre_lista = nodo_ini;
while(recorre_lista != NULL)
{
fprintf(archivo, "%s", recorre_lista->linea_archivo);
recorre_lista = linea_archivo->next;
}
despyues cierras, el asrchivo, y verifica
pero antes tienes que eliminar la lista para devolver la meoria ocupada por los datos del programa
}
void cargar_archivo()
{
/*ya que la variable tam_Archivo es global no pierde su valor
al asalir de esta funcion*/
tam_archivo = longitud_archivo(archivo_juego);
rewind(archivo_juego);/*posicionamos el puntero del archivo al principio*/
/*si se devuelve el valor de NULL, entonces ya no lee nada y sale de
la funcion, ya que no exista ningun archivo*/
while(leer_linea_archivo() != NULL)
{
/*esto se hace solo en el caso de quieras actuializar el archivo, es decir de que no quieras sobrescribir la fecha u hora de algun registro del archivo*/
if(strcmp(linea_archivo, nombre_1) == 0 || strcmp(linea_archivo, nombre_2) == 0)
{
copiado = copiar_reg_lista();
if(copiado > 70 && copiado != EOF)
{
lista_creada(lista_aux);
}
else
{
"REGISTRO DAÑADO");
}
}
}
}
*lee solo una linea o un registro del archivo*/
int leer_linea_archivo()
{
/*vaciamos la cadena linea_archivo*/
strnset(linea_archivo, ESPACIO, 125);
/*esto es en ecaso de que no exista el archivo para evitar errores
en el programa por algun mal funcionamiento*/
if(tam_archivo > 50) /*si es que aun no existe el archivo o no fue creado aun*/
{
if(fgets(linea_archivo, 125, archivo_juego))
{
tam_registro = strlen(linea_archivo);
return TRUE;
}
else
{
return NULL;
}
}
else
{
return NULL;
}
}
int copiar_reg_lista()
{
if(tam_registro > 70)
{
lista_aux = crear_nodo();
if(lista_aux != NULL)
{
strnset(lista_aux->registro_juego, ESPACIO, TAM_NOMBRES + 5);
strcpy(lista_aux->registro_juego, linea_archivo);
return tam_registro;
}
else /*en caso de que no haya suficiente memoria en RAM para el nodo*/
{ /*y tambien toda la lista, o el archivo, se llama a la funcion inf_memory(), no la incluyo*/
return EOF;
}
}
else
{
return 0;
}
}
/*con esta funcion reservamos memoria para cada nodo de la lista*/
lista crear_nodo()
{
return (lista)malloc(sizeof(struct lista_juego));
}
/*aqui vamos incremenmtando la lista, es decir lo hacemos mas grande*/
void lista_creada(lista lista_c)
{
if(lista == NULL)
{
nodo_ini = lista_c;
}
else
{
lista->next = lista_c;
}
lista = lista_c;
lista_c->next = NULL;
}
void insertar_reg_lista()
{
lista lista_aux;
lista_aux = crear_nodo();
if(lista_aux)
{ /*lo insertas al final del la lista*/
sprintf(lista_aux->linea_archivo, "%s\t%s\t%s %d %d ",
nombre_1, dia, mes, hora, minutos);
/*esta desordenado, bueno es un ejemeplo*/
lista_creada(lista_aux);
}
else
{
inf_memoria();
}
}
espero te sirva hasta luego