Autor
|
Tema: [C] Problema con nombres de ficheros (Leído 2,719 veces)
|
JJShadiw
Desconectado
Mensajes: 4
|
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: for (i=0;nomFich1[i]!='.';i++) { fichSal[i]=nomFich1[i]; } fichSal[i]='-'; i++; for(j=0;nomFich2[j]!='.';j++){ fichSal[i]=nomFich2[j]; i++; }
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
Mensajes: 170
|
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
Mensajes: 4
|
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): #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXCAR 50 #define TAM 300 int cargarFichero1(char [MAXCAR], char [TAM]); int cargarFichero2(char [MAXCAR], char [TAM]); void guardarMatrizDePuntos(char [MAXCAR], char [TAM], int, char [TAM], int); void main() { char nomFich1[MAXCAR],nomFich2[MAXCAR],fichSal[MAXCAR]; char s1[TAM],s2[TAM]; int n1,n2,i,j; do { n1=cargarFichero1(nomFich1,s1); } while (n1==-1); do { n2=cargarFichero2(nomFich2,s2); } while(n2==-1); for (i=0;nomFich1[i]!='.';i++) { fichSal[i]=nomFich1[i]; } fichSal[i]='-'; i++; for(j=0;nomFich2[j]!='.';j++) { fichSal[i]=nomFich2[j]; i++; } guardarMatrizDePuntos(fichSal,s1,n1,s2,n2,puntos); } int cargarFichero1(char nomFich [MAXCAR], char s[TAM]) { FILE *f; int i,cont; printf("Introduce el nombre del fichero con la primera secuencia (sin extension): "); if (f==NULL) { printf("ERROR: El fichero %s no se pudo abrir\n",nomFich ); return -1; } else { i=0; cont=-2; { i++; cont++; } return cont; } } int cargarFichero2(char nomFich [MAXCAR], char s[TAM]) { FILE *f; int i,cont; printf("Introduce el nombre del fichero con la segunda secuencia (sin extension): "); if (f==NULL) { printf("ERROR: El fichero %s no se pudo abrir\n",nomFich ); return -1; } else { i=0; cont=-2; { i++; cont++; } return cont; } } void guardarMatrizDePuntos(char nomFich[MAXCAR], char s1[TAM], int n1, char s2[TAM], int n2) { FILE *f; if (f==NULL) printf("Error al crear el fichero"); else { fprintf(f ,"# MATRIZ DE PUNTOS #\n"); } }
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
Mensajes: 170
|
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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema con envio de ficheros
Java
|
Debci
|
4
|
2,682
|
26 Agosto 2009, 10:03 am
por Debci
|
|
|
problema con programa de ficheros en c
Programación C/C++
|
Quake-man
|
1
|
2,524
|
10 Septiembre 2010, 18:39 pm
por nicolas_cof
|
|
|
Problema con descriptores de ficheros
Programación C/C++
|
iapellaniz
|
3
|
2,163
|
17 Octubre 2014, 23:35 pm
por Eternal Idol
|
|
|
como obtener nombres de ficheros de una unidad de disco
Scripting
|
Tomas1982
|
7
|
3,869
|
8 Agosto 2016, 22:14 pm
por Tomas1982
|
|
|
renombrar ficheros con distintos nombres
Scripting
|
500DRIFT
|
3
|
5,013
|
12 Agosto 2022, 00:09 am
por 500DRIFT
|
|