¿Como mostrar línias específicas en un fichero en C?

publicado por: Anonymous

tengo una duda sobre como mostrar líneas de un fichero específicas definidas en un archivo.

Primero, aquí tenemos el fichero con las líneas definidas a mostrar: (lineas.txt)

0
1
3
6
9
12
15
17

Aquí tenemos el fichero a mostrar las líneas específicas:(archivo.c)

//Arxiu.c
#include <stdio.h>

int main()
{
 //comentari
 int i = 0;
 char array[100]="Show time";
 while( array[i]!=0)
 {
  printf("%dt", array[i]);
  i++;
 }
 for (i=0; i<3; i++)
 {
  printf("Holan");
  printf("Aquest es el codi del fitxer en cn");
  printf("%dn", i );
  printf("El arxiu ha sigut llegitn");
 }
 return 0;
}

El problema que tengo en mi código es que no muestra las líneas adecuadas del fichero archivo.c

Para finalizar aquí tenéis mi código del programa:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
int i;
int line_file;
char linea[120];
FILE *file1;
FILE *file2;
file1=fopen("lineas.txt", "r");
file2=fopen("arxiu.c", "r");

while ((fgets(linea, sizeof(linea), file1)) != NULL)
{
  char * token;
  token = strtok (linea, " ");
  printf("%sn", token );

  fgets(token, sizeof(linea), file2);
  puts(fgets(token, 1024, file2));

}

  return 0;
}

Gracias por vuestra ayuda, espero que me podáis ayudar.

solución

Suponiendo que las lineas de lineas.txt estan ordenadas y arrancan en 1 ( es mas facil, si queres lo podes cambiar, (borra el 0 de tu lineas.txt ) te dejo mi solucion:

#include <stdio.h>
#include <stdlib.h>


int main()
{
    char linea[256];
    int nLinea;
    int nLineaPrevia = 0;

    FILE *fLineas = fopen("lineas.txt", "r");
    FILE *fAMostrar = fopen("arxiu.c", "r");

    while( fgets(linea, sizeof(linea) , fLineas) )
    {
        nLinea = atoi( linea ); // Se puede usar otra funcion mejor (strtol)
        nLineaPrevia = nLinea - nLineaPrevia;

        while( (nLineaPrevia-- > 0) && fgets( linea, sizeof( linea), fAMostrar ) ) { };

        printf("%d: %s", nLinea, linea);
        nLineaPrevia = nLinea;
    }

    fclose( fLineas );
    fclose( fAMostrar );


    return 0;
}

La salida quedaria como:

1: //Arxiu.c
3:
6:  //comentari
9:  while( array[i]!=0)
12:   i++;
15:  {
17:   printf("Aquest es el codi del fitxer en cn");

Abrazo++;

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *