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)
| | |-+  archivos en c.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: archivos en c.  (Leído 2,105 veces)
aggv1106

Desconectado Desconectado

Mensajes: 5


Ver Perfil
archivos en c.
« en: 29 Junio 2016, 16:38 pm »

hola, una consulta...en una parte de un ejercicio me pide que divida un archivo por medio de saltos de linea, el usuario debe ingresar en cuantas partes quiere dividir el archivo, el caso es que no se porque no puedo imprimir el salto de linea donde yo quiero, el código que hice es el siguiente:
#include<stdio.h>
int main(){
FILE *fp1;
int n,a=0, suma=0, cant/*cantidad de datos a agarrar por partes*/;
char c;
char entrada[100];
printf("Ingrese el nombre del archivo origen:\n");
scanf("%s",entrada);
if((fp1=fopen(entrada,"a+"))==NULL){
printf("\nError al abrir el archivo %s",entrada);
return 0;
}
printf("\n ¿en cuantas partes desea partir el archivo?: ");
scanf("%d", &n);
 c=fgetc(fp1);//Acá calculo cuantos bytes tiene el archivo;
    while (!feof(fp1)){
            a=sizeof(c);
            suma=suma+a;
            a=0;
            c=fgetc(fp1);
    }

cant=suma/n;//cantidad de bytes que debo agarrar para cada parte.
suma=0;
rewind(fp1);
c=fgetc(fp1);// acá deberia imprimir el enter cuando alcancé la cantidad de bytes requeridos para una parte;
while(!feof(fp1)){
    a=sizeof(c);
    suma = suma+a;
    if (suma==cant){
        fprintf(fp1, "\n");
        suma=0;
        a=0;
    }
    a=0;
    c=fgetc(fp1);
}
fclose(fp1);

}


En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: archivos en c.
« Respuesta #1 en: 29 Junio 2016, 16:50 pm »

Código
  1. c=fgetc(fp1);//Acá calculo cuantos bytes tiene el archivo;


El que???? Asi no se calcula eso ahi solo obtienes el primer byte del contenido del archivo.

Para saber cuanto pesa un archivo tienes que usar la libreria sys/stat.h

Código
  1. #include <sys/stat.h>
  2.  
  3. //Dentro de main:
  4.  
  5. int size = fsize("nombre"):
  6.  
  7.  
  8. //Funcion aparte.
  9.  
  10. off_t fsize(const char *filename) {
  11.    struct stat st;
  12.  
  13.    if (stat(filename, &st) == 0)
  14.        return st.st_size;
  15.  
  16.    return -1;
  17. }

Fuente: http://stackoverflow.com/questions/8236/how-do-you-determine-the-size-of-a-file-in-c

Saludos!!


« Última modificación: 29 Junio 2016, 16:54 pm por AlbertoBSD » En línea

aggv1106

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: archivos en c.
« Respuesta #2 en: 29 Junio 2016, 16:56 pm »

yo me referia a lo siguiente, si tengo un frase en el archivo: "holaquetal" y yo quiero separar la misma de la siguiente forma: hola \n que \n tal. con el fgetc y el while voy sacando y contando caracter por caracter para saber donde imprimir el salto de linea. o sea...no es que calculo cuanto pesa el archivo propiamente dicho, eso fue un error de tipeo mio.
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: archivos en c.
« Respuesta #3 en: 29 Junio 2016, 17:18 pm »

Hola ten en cuenta que estas imprimiendo en el mismo archivo que estas leyendo. con lo cual cada vez que imprimas un enter, realmente estas sustituyendo el caracter que se encontraba en una posicion adelante dwl cual acababas de leer. Necesitas

a) crear un nuevo archivo temporal donde se reflejen los cambios y hacer el intercambio de archvio

b) leer todo en memoria y reescribir el archvio desde 0 ya con loa cambios hechos.

Saludos
En línea

aggv1106

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: archivos en c.
« Respuesta #4 en: 29 Junio 2016, 17:33 pm »

probaré con eso, gracias!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines