comparando y revisando columnas en dos archivos

Tengo dos archivos que van así:

El ARCHIVO A es:

J5 J15 J25 J30 J35 

y el ARCHIVO B es:

 J0 23 56 J5 24 58 J10 26 60 J15 29 63 J20 31 36 J25 23 32 J30 51 14 J35 34 21 J40 46 12 

El problema es que tengo que verificar el ARCHIVO A con el ARCHIVO B por su contenido y copiar los valores de los elementos Jth en un nuevo archivo como este: (ARCHIVO C):

 J5 24 58 J15 29 63 J25 23 32 J30 51 14 J35 34 21 

Sería de gran ayuda si formula un código C para abordar este problema. Gracias.

Te recomiendo que hagas tres “Archivos de acceso aleatorio” (porque están más organizados), pero primero:

  • Debe formatear cada archivo con la estructura. Utilizará, en el primer archivo la estructura [1] Solo necesitará un miembro el nombre (matriz char), en la segunda estructura [2] necesitará tres miembros el nombre (matriz char ) y 2 valores (supongo que dos enteros), y la tercera restricción es la misma que la segunda, así que puedes reutilizarla.

[1]

 /* Struct for the first file. */ typedef { char name[4]; } file1_t; 

[2]

 /* Struct for the second file. */ typedef { char name[4]; int value1, value2; } file2_t; 
  • Para crear esos archivos, tendrá que usar un código como este (Suponiendo que el archivo se abre en modo “wb”, pero no se crea):

     /* This is an incomplete example (I can't make your whole Homework)*/ void file2Creator( FILE *fPtr ) { int i; // Counter to create the file. file2_t data = { "", 0, 0 }; // A blank example to format the file. /* You will create 9 consecutive records*/ for( i = 1; i <= 9; i++ ){ fwrite( &data, sizeof( file2_t ), 1, fPtr ); } fclose( fPtr ); // You can close the file here or later however you need. } 
  • Después de eso tienes que llenar los espacios en blanco que hiciste (supongo que el archivo está abierto):

     void fillFile2( FILE *fPtr) { int position; file2_t data = { "", 0, 0 }; printf( "Enter the position to fill (1-9) 0 to finish:\n?" ); scanf( "%d", &position ); while( position != 0 ){ printf( "Enter the name, and the two other values (integers):\n?" ); fscanf( stdin, "%s%d%d", data.name, data.value1, data.value2 ); /* You have to seek the pointer. */ fseek( fPtr, ( position - 1 ) * sizeof( file2_t ), SEEK_SET ); fwrite( &data, sizeof( file2_t ), 1, fPtr ); printf( "Enter a new position (1-9) 0 to finish:\n?" ); scanf( "%d", &position ); } fclose( fPtr ); //You can close the file or not, depends in what you need. } 
  • Ahora imagino que tiene el archivo 1, el archivo 2 y el archivo 3 formateados, y los archivos 1 y 2 están llenos, y desea llenar el archivo 3 ¿cómo hacerlo? Sencillo.

     /* 3 pointers to each file */ void fillFile3( FILE *f1Ptr, FILE *f2Ptr, FILE *f3Ptr ) { int i, j, k, number; char word[ 4 ]; file1_t data1 = { "" }; file2_t data2, data3 = { "", 0, 0 }; k = 1; /* I suppose that files are opened with their correctly FILE pointers. */ for( i = 1; i <= 5; i++ ){ /* I locate in the "i" position of the file1. */ fseek( f1Ptr, ( i - 1 ) * sizeof( file1_t ), SEEK_SET ); /* I read the slot. */ fread( &data1, sizeof( file1_t ), 1, f1Ptr ); /*Now we compare the file2 until we find the correct value, if it is organized we can jump some slots if not compare with all.*/ for( j = 1; j <= 9, j++ ){ fseek( f2Ptr, ( j - 1 ) * sizeof( file2_t ), SEEK_SET ); fread( &data2, sizeof( file2_t ), 1, f2Ptr ); /* We compare the strings, If they are equal we paste the value in file 3*/ if( strcmp( data1.name, data2.name ) == 0 ){ /*file 3 is of type of the file 2*/ fseek( f3Ptr, ( k - 1 ) * sizeof( file2_t ), SEEK_SET ); fwrite( &data2, sizeof( file2_t ), 1, f3Ptr ); k++; break; } } } fclose( f1Ptr ); fclose( f2Ptr ); fclose( f3Ptr ); } 

Agregó un punto y coma después de if, y olvidó un paréntesis.

 if( strcmp( A[i][j], B[i][j] ) == 0 ){ printf( "%s /n %s ", strcmp( A[i][j], B[i][j] ) ); } 

Estoy tratando de hacer este progtwig, pero simplemente no se ejecuta.

 #include  #include  int main() { FILE *fp1 ,*fp2; char ca , cb; int i,j,x,s; char A[i][j],B[i][j]; char file1[1024], file2[1024]; printf( "Enter file1: ", file1 ); gets( file1 ); printf( "Enter file2: ",file2 ); gets( file2 ); fp1=fopen( file1, "r"); if ( fp1 == NULL ){ printf("Cannot open %s for reading \n", file1 ); exit(1); } while ( ( fgets( file1, sizeof file1, stdin ) ) != EOF ){ for(i=0;i<2500;i++){ for(j=0;j<5;j++){ fscanf(fp1,"%s",&A[i][j]); } } } fp2 = fopen( file2, "r"); if ( fp2 == NULL ){ printf("Cannot open %s for reading \n", file2 ); exit( 1 ); } while ( fgets ( file2, sizeof file2, stdin) != EOF){ for( i = 0; i < 2500; i++ ){ for( j = 0; j < 5; j++ ){ fscanf(fp2,"%s",&B[i][j]); } } } /*Here it was a ; without any sense (after the if)*/ if( strcmp( A[i][j], B[i][j] ) ) == 0; { printf( "%s /n %s ", strcmp( A[i][j], B[i][j] ) ); } fclose(fp1); fclose(fp2); return 0; } 

el comstackdor muestra el error de syntax antes del token "==" (8ª línea desde abajo en la función strcmp). Alguna ayuda ??