elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C] Problema con nombres de ficheros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C] Problema con nombres de ficheros  (Leído 2,762 veces)
JJShadiw

Desconectado Desconectado

Mensajes: 4


Ver Perfil
[C] Problema con nombres de ficheros
« en: 23 Diciembre 2010, 15:59 pm »

Hola a todos. Estoy realizando un programa en C, en el cual inicialmente abro dos archivos, cuyos nombres de quedan almacenados en 2 cadenas de caracteres y son los siguientes:

caso1.sec
caso2.sec

Pues bien, mi problema viene es que ahora necesito crear un fichero de salida que contenga los nombres de cada uno (sin la extensión) separados por un -, y la extensión .out. Quedaría de esta manera:

caso1-caso2.out

Y por más que lo intento, no consigo sacarlo. No puedo escribir directamente "caso1-caso2.out" ya que los nombres de los ficheros pueden ser diferentes, tengo que hacerlo de modo general. Lo he intentado con el siguiente código, pero me da error (me devuelve NULL) a la hora de crear el fichero .out:

Código
  1. for (i=0;nomFich1[i]!='.';i++)
  2.            {
  3.                fichSal[i]=nomFich1[i];
  4.            }
  5.            fichSal[i]='-';
  6.            i++;
  7.            for(j=0;nomFich2[j]!='.';j++){
  8.                fichSal[i]=nomFich2[j];
  9.                i++;
  10.            }
  11.            strcat(fichSal,".out");

Donde nomFich1 es la cadena donde está almacenado "caso1.sec", nomFich2 donde se encuentra "caso2.sec" y fichSal nombre del fichero que debo crear.

¿Dónde está el fallo? ¿Hay alguna manera más fácil de realizar lo que pido?

Gracias!


« Última modificación: 23 Diciembre 2010, 16:01 pm por JJShadiw » En línea

dooque

Desconectado Desconectado

Mensajes: 170



Ver Perfil
Re: [C] Problema con nombres de ficheros
« Respuesta #1 en: 23 Diciembre 2010, 19:57 pm »

Wenas!

Si bien el codigo q pusiste no parce estar mal, no pusiste la parte en donde creas el fichero y te devuelve NULL asi que no podemos decirte x q te devuelve NULL!

Ahora dos observaciones respecto del codigo:

1) Trata de identar bien asi es mas legibe. Muchos errores vienen por un feo coding-style, ademas con buen codigo se pueden encontrar errores mas facilmente! A primera vista pareceria que todo esta dentro del primer for cuando no es asi, y lo que engaña es la visual.

2) Estas usando la funcion strcat(fichSal,".out");, que no esta mal pero tenes que tener mucho cuidado, si no inicializaste bien tus cadenas podes hacer mucho lio! Las funciones de C de este tipo asumen que las cadenas terminan con un 0 al final, y si no es el caso, vas a tener muchos problemas!

Asi que pone un poco mas de codigo (las declaraciones de las variables que usas y como crear el archivo, como los abris etc.) asi entendemos un poco mas y te podemos ayudar a resolver cual es el problema!

Saludos!


En línea

Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.  -- Kernighan
JJShadiw

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: [C] Problema con nombres de ficheros
« Respuesta #2 en: 23 Diciembre 2010, 22:30 pm »

Gracias por tus consejos dooque. Este es el código de mi programa (en realidad hay más funciones, pero no tienen nada que ver con lo que pregunto):

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define MAXCAR 50
  5. #define TAM 300
  6.  
  7. int cargarFichero1(char [MAXCAR], char [TAM]);
  8. int cargarFichero2(char [MAXCAR], char [TAM]);
  9. void guardarMatrizDePuntos(char [MAXCAR], char [TAM], int, char [TAM], int);
  10. void main()
  11. {
  12.    char nomFich1[MAXCAR],nomFich2[MAXCAR],fichSal[MAXCAR];
  13.    char s1[TAM],s2[TAM];
  14.    int n1,n2,i,j;
  15.  
  16.    do
  17.    {
  18.        n1=cargarFichero1(nomFich1,s1);
  19.    }
  20.    while (n1==-1);
  21.  
  22.    do
  23.    {
  24.        n2=cargarFichero2(nomFich2,s2);
  25.    }
  26.    while(n2==-1);
  27.  
  28.  
  29.    for (i=0;nomFich1[i]!='.';i++)
  30.    {
  31.        fichSal[i]=nomFich1[i];
  32.    }
  33.    fichSal[i]='-';
  34.    i++;
  35.    for(j=0;nomFich2[j]!='.';j++)
  36.    {
  37.        fichSal[i]=nomFich2[j];
  38.        i++;
  39.     }
  40.     strcat(fichSal,".out");
  41.     guardarMatrizDePuntos(fichSal,s1,n1,s2,n2,puntos);
  42. }
  43.  
  44.  
  45. int cargarFichero1(char nomFich [MAXCAR], char s[TAM])
  46. {
  47.    FILE *f;
  48.    int i,cont;
  49.    printf("Introduce el nombre del fichero con la primera secuencia (sin extension): ");
  50.    gets(nomFich);
  51.    strcat(nomFich,".sec");
  52.    f=fopen(nomFich,"r");
  53.    if (f==NULL)
  54.    {
  55.        printf("ERROR: El fichero %s no se pudo abrir\n",nomFich);
  56.        return -1;
  57.    }
  58.    else
  59.    {
  60.        i=0;
  61.        cont=-2;
  62.        s[i]=fgetc(f);
  63.        while (!feof(f))
  64.        {
  65.            i++;
  66.            s[i]=fgetc(f);
  67.            cont++;
  68.        }
  69.        fclose(f);
  70.        return cont;
  71.    }
  72. }
  73.  
  74.  
  75. int cargarFichero2(char nomFich [MAXCAR], char s[TAM])
  76. {
  77.    FILE *f;
  78.    int i,cont;
  79.    printf("Introduce el nombre del fichero con la segunda secuencia (sin extension): ");
  80.    gets(nomFich);
  81.    strcat(nomFich,".sec");
  82.    f=fopen(nomFich,"r");
  83.    if (f==NULL)
  84.    {
  85.        printf("ERROR: El fichero %s no se pudo abrir\n",nomFich);
  86.        return -1;
  87.    }
  88.    else
  89.    {
  90.        i=0;
  91.        cont=-2;
  92.        s[i]=fgetc(f);
  93.        while (!feof(f))
  94.        {
  95.            i++;
  96.            s[i]=fgetc(f);
  97.            cont++;
  98.        }
  99.        fclose(f);
  100.        return cont;
  101.    }
  102. }
  103.  
  104.  
  105. void guardarMatrizDePuntos(char nomFich[MAXCAR], char s1[TAM], int n1, char s2[TAM], int n2)
  106. {
  107.    FILE *f;
  108.    f=fopen(nomFich,"w");
  109.    if (f==NULL)
  110.        printf("Error al crear el fichero");
  111.    else
  112.    {
  113.        fprintf(f,"# MATRIZ DE PUNTOS #\n");
  114.        fprintf(f,"\n");
  115.        fprintf(f," ");
  116.        fprintf(f,"%s\n",s2);
  117.    }
  118.    fclose(f);
  119. }

Ese es el código en el cual intervienen las variables de mi problema. Cuando llamo a la última función (guardarMatrizDePuntos), siempre me muestra por pantalla "Error al crear el fichero"
« Última modificación: 23 Diciembre 2010, 22:32 pm por JJShadiw » En línea

dooque

Desconectado Desconectado

Mensajes: 170



Ver Perfil
Re: [C] Problema con nombres de ficheros
« Respuesta #3 en: 24 Diciembre 2010, 00:22 am »

Bien...

Sigo sin ver el error leyendo el codigo. Intente debuguearlo con gdb pero me di cuena que no pusiste todo el codigo!

Es probable que el error sea con las cadenas, pero sin correrlo no estoy seguro! Proba inicializar todos los arreglos que uses a cero con la funcion memset() (http://www.manpagez.com/man/3/memset/) capas eso te solucione algo!

Como no pude ayudarte con el error te doy otro consejo para el codigo:

Fijate que las funciones
int cargarFichero1(char [MAXCAR], char [TAM]);
int cargarFichero2(char [MAXCAR], char [TAM]);

hacen exactamente lo mismo, es el mismo codigo, lo unico que cambia es el nombre del archivo. Lo mejor, o en realidad lo que deberias hacer, es una sola funcion que haga el trabajo, despues de todo para eso son las funciones, cuando uno necesita una funcionalidad mas de una ves, crea una funcion para no repetir el mismo codigo dos veces, entonces uno piensa como podria funcionar el codigo de forma general y lo "generaliza", valga la redundancia, en una funcion! Es algo que tenes que aprender y acostumbrarte a hacer, por ahi al principio cuesta abstraerce un poco, pero con practica te vas a ir dndo cuenta!

Saludos!
« Última modificación: 24 Diciembre 2010, 00:25 am por dooque » En línea

Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.  -- Kernighan
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con envio de ficheros
Java
Debci 4 2,698 Último mensaje 26 Agosto 2009, 10:03 am
por Debci
problema con programa de ficheros en c
Programación C/C++
Quake-man 1 2,556 Último mensaje 10 Septiembre 2010, 18:39 pm
por nicolas_cof
Problema con descriptores de ficheros
Programación C/C++
iapellaniz 3 2,248 Último mensaje 17 Octubre 2014, 23:35 pm
por Eternal Idol
como obtener nombres de ficheros de una unidad de disco
Scripting
Tomas1982 7 3,935 Último mensaje 8 Agosto 2016, 22:14 pm
por Tomas1982
renombrar ficheros con distintos nombres
Scripting
500DRIFT 3 5,149 Último mensaje 12 Agosto 2022, 00:09 am
por 500DRIFT
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines