<div dir="ltr"><div><div><div><div><div><div>Buenas tardes a todos.<br></div>Tengo un problema que espero me podáis ayudar en su solución.<br><br></div>Necesito recuperar unos datos desde un archivo plano generado automáticamente. Se trata de un fichero que contiene registros de temperatura y la hora de lectura de la misma.<br></div>Mi intención es separar ambos datos, y llenar dos Arrays con ellos, uno para las fechas y otro para las temperaturas.<br></div>Para ello he implementado el código adjunto, pero el array, solo se llena de datos con la lectura de última fecha.<br></div><div>Sé que es cuestión de que estoy enviando datos al array desde posiciones de memoria incoherentes, pero no encuentro la manera de corregirlo.<br></div>En el código que adjunto solo he implementado el array de fechas, con el objeto de simplificar la lectura, no obstante, estoy convencido que solucionando éste, el otro quedará resuelto, pues es cuestión de repetir el proceso.<br></div>En el archivo.zip adjunto se encuentra el proyecto C::B y el archivo plano.<br><br><div><div><div><div><div>Hace años que sigo vuestra web y también esta lista, aunque no he tenido necesidad usarla antes, no quiero dejar pasar la oportunidad de agradeceros los conocimientos que tan generosamente compartís y que tan útiles me han sido otras veces.<br><div><br>Muchísimas gracias de antemano por vuestra atención.<br></div><div>Atentamente,<br><br></div><div>Manuel Protasio.<br></div><div><br></div><div>Código del programa<br></div><div>###############<br><br><br>  #include <stdio.h><br>#include <ctype.h><br>#include <string.h><br><br>using namespace std;<br><br>FILE *fichero;<br>char *MATRIZ_FECHAS[30];<br>char nueva_fecha[]="fechafechafech";<br>int contador_de_fechas_distintas=0;<br><br>void AbrirFichero();<br>void VisualizarImagenDeFichero();<br>void CerrarFichero();<br>void VisualizarSoloLasFechas();<br>void Guardar_En_MATRIZ_FECHAS(char nueva_fecha[],int numero_registro);<br>void Visualizar_MATRIZ_FECHAS(int cantidad_de_registros);<br><br>int main()<br>{<br>    AbrirFichero();<br>    // Imprime por pantalla una imagen del fichero<br>    VisualizarImagenDeFichero();<br>    CerrarFichero();<br>    AbrirFichero();<br>    // Imprime por pantalla las fechas existentes en fichero<br>    VisualizarSoloLasFechas();<br>    CerrarFichero();<br>    // Deberia imprimir las fechas guardadas anteriormente en la matriz<br>    // pero solo imprime la última fecha en todos los registros de la matriz<br>    Visualizar_MATRIZ_FECHAS(contador_de_fechas_distintas);<br>    return 0;<br>}<br><br>void AbrirFichero()<br>{<br><br>    if ((fichero=fopen("fichero_a_tratar.dat","a+"))==NULL)<br>    {<br>        printf("Error: no se pudo abrir en fichero");<br>    }<br>}<br>void CerrarFichero()<br>{<br>    fclose(fichero);<br>}<br>void VisualizarImagenDeFichero()<br>{<br>    printf("\n=============== Impresion de imagen de fichero  =========\n");<br>    while(!feof(fichero))<br>    {<br>        fputc(fgetc(fichero), stdout);<br>    }<br>}<br>void VisualizarSoloLasFechas()<br>{<br>    printf("\n=============== Impresion de las fechas del fichero  =========\n");<br>    char caracter_leido;<br>    int contador_posicion_nueva_fecha=0;<br>    bool es_el_inicio_de_una_fecha=false;<br>    while (!feof(fichero))<br>    {<br>        caracter_leido=fgetc(fichero);<br><br>        if (caracter_leido=='<')<br>        {<br>            es_el_inicio_de_una_fecha=true;<br>        }<br>        if (es_el_inicio_de_una_fecha)<br>        {<br><br><br>            if (contador_posicion_nueva_fecha>=2 && contador_posicion_nueva_fecha<=15)<br>            {<br><br>                nueva_fecha[contador_posicion_nueva_fecha-2]=caracter_leido;<br>            }<br>            contador_posicion_nueva_fecha++;<br>        }<br>        if (caracter_leido=='>')<br>        {<br>            // Guarda la nueva fecha en la matriz<br>            Guardar_En_MATRIZ_FECHAS(nueva_fecha,contador_de_fechas_distintas);<br>            contador_posicion_nueva_fecha=0;<br>            contador_de_fechas_distintas++;<br>            printf("\n%s",nueva_fecha);<br>            es_el_inicio_de_una_fecha=false;<br>        }<br><br>    }<br><br>}<br>void Guardar_En_MATRIZ_FECHAS(char fecha[],int numero_registro)<br>{<br>    MATRIZ_FECHAS[numero_registro]=fecha;<br><br>}<br>void Visualizar_MATRIZ_FECHAS(int cantidad_de_registros)<br>{<br>    printf("\n=============== Impresion del volcado del Array  =========\n");<br>    printf("=========== el cual deberia mostrar fechas distintas =====\n");<br>    for (int k=0; k<cantidad_de_registros; k++)<br>    {<br>        if (MATRIZ_FECHAS[k]!=NULL)<br>        {<br>            printf("\nValor de MATRIZ_FECHAS[%d] = %s",k,MATRIZ_FECHAS[k]);<br><br>        }<br>        else<br>        {<br>            printf("\nFin de la visualización");<br>            k=cantidad_de_registros;<br>        }<br>    }<br><br>}<br><br><br>#######<br><br></div><div>Fichero plano:<br></div><div>#########<br><br>< 22/01/15 22:36 ><br>     71 <br>< 22/01/15 22:37 ><br>     71 <br>< 22/01/15 22:38 ><br>     71 <br>< 22/01/15 22:39 ><br>     71 <br>< 22/01/15 22:40 ><br>     71 <br>< 22/01/15 22:41 ><br>     71 <br>< 22/01/15 22:42 ><br>     71 <br>< 22/01/15 22:43 ><br>     71 <br>< 22/01/15 22:44 ><br>     71 <br>< 22/01/15 22:45 ><br>     71 <br>< 22/01/15 22:46 ><br>     71 <br>< 22/01/15 22:47 ><br>     71 <br>< 22/01/15 22:48 ><br>     71 <br>< 22/01/15 22:49 ><br>     71 <br>< 22/01/15 22:50 ><br>     71 <br>< 22/01/15 22:51 ><br>     71 <br>< 22/01/15 22:52 ><br>     71 <br>< 22/01/15 22:53 ><br>     71 <br>< 22/01/15 22:54 ><br>     71 <br>< 23/01/15 17:16 ><br>     63 <br>< 23/01/15 17:17 ><br>     63 <br>< 23/01/15 17:18 ><br>     63 <br>< 23/01/15 17:19 ><br>     63 <br>< 23/01/15 17:20 ><br>     63 <br>< 23/01/15 17:21 ><br>     63 <br>< 23/01/15 17:22 ><br>     63 <br>< 23/01/15 17:23 ><br>     63 <br><br><br><br><br><br></div></div></div></div></div></div></div>