[ Foro de C ]

Practicas agresivas

11-Mar-2006 13:12
Javier Hernández
12 Respuestas

Bueno, ante mi total desacuerdo del reparto de equipos ya que a sido totalmente injusto y antidemocratico, voi a exponer mi duda.


No tengo ni idea como cortar el fichero inicial, lo que viene siendo idea 0 pues eso. Algun iluminado que arroje un poco de luz a mi ofuscada mente.

(Se me va la pelota)


Un saludo


P.D.: Se puede usar punteros??


11-Mar-2006 16:39
Taisen Tetsu

no se pueden usar, hay que usarlos xD. El ejercicio es muy parecido al que hicimos de copiar un archivo con punteros, con la diferencia de que en vez de poner malloc (longitud) tienes que poner en el sitio de longitud el tamanyo que te ha dicho el que usa el programa. Y con un for ir leyendo los cachos de ese mismo tamaño y guardandolos en 1 fichero diferente cada vez (pista: el nombre del fichero se hace con sprintf y cambiando la extension con el contador del for).

Ya no digo mas.

PD: al leer el tamanyo me da un error default noseke y no es por el ampersan, he probado con scanf("%ld%c",&tamanyo); y usando gets(temporal); sscanf(temporal,"%ld",&tamanyo); y me dice que no va ni patras. a ver si alguien se imagina porque puede ser.


12-Mar-2006 19:30
Javier Hernández

Ya lo tengo hecho, pero es normal que vaya a patadas?? Osea que funcione como dios le dio a entender??

No se, a veces no me coje el fichero, otra me ace 3000 trozos de fichero cuando no deberia acer ni 20.

No lo entiendo.

Nacho nos ocultas algo pq esto no rula bien. El fuente lo e revisao como unas 50 veces i lo e compilao unas 50000, compila bien pero ace lo k kiere, y el fuente no tiene nada raro.

12-Mar-2006 19:30
Nacho Cabanes (+83)

En primer lugar, confirmar que el reparto de grupos ha sido totalmente antidemocrático y posiblemente injusto... igualito que cuando salgais al mercado laboral. Si vuestro compañero no trabaja, o no os deja trabajar, o os cae mal, o os enamorais de el/ella y no rendís... son dificultades con las que os encontrareis dentro de poco, y aun así tendreis que rendir.

En segundo lugar, un pista en pseudocódigo (insisto en que deberías intentar siempre primero el pseudocódigo: cuando seais capaces de razonar con soltura en castellano, os bastará un "recetario" de C de una página de tamaño para solucionar cualquier problema):

- Abrir fichero de entrada
- Abrir primer fichero de destino
- Repetir
  . Leer un byte
  . Volcar ese byte al fichero destino
  . Aumentar contador de bytes escritos
  . Si se ha alcanzado el tamaño máximo previsto,
    + Cerrar fichero de destino
    + Abrir nuevo fichero de destino con siguiente nombre correlativo
    + Contador de bytes escritos = 0
- Hasta final del fichero de entrada
- Cerrar fichero de entrada

Con poco más que eso, todo el problema debería estar resuelto.

Se puede optimizar leyendo un bloque (que deberíais reservar con "malloc, ya sabeis) en vez de byte a byte, pero yo os aconsejaría dejar eso para la "fase de mejoras", una vez que el programa básico está funcionando.

N.


12-Mar-2006 20:05
Diego Teruel

Mi duda en el programa es la siguiente:

El programa que he hecho yo pide el nombre del fichero, lo lee, pide el tamaño y to eso. Luego con un for voy recorriendo los bytes, en fin que me compila.

Pero a la hora de ejecutarlo se me cuelga el ordenador.

Alguien sabe por que???

Un saludo


12-Mar-2006 20:33
Javier Hernández

Yo lo se. Windows es una castaña.

Usa linux




12-Mar-2006 22:50
Nacho Cabanes (+83)

Si alguien sabe por qué se te cuelga sin ver el fuente, es porque es un semidios  ;-)

Aun así, revisa ese "for"...

N.


12-Mar-2006 23:12
Diego Teruel

A ver el codigo fuente es este, me falta poner los sprintf y algun detalle mas:

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

FILE* fichero1;
FILE* fichero2;
char nombre1[100];
char nombre2[100];
int tamanyo;
long resultado;
long longitud;
int numeroPartes;
int i;

char *buffer;

int main()
{
    numeroPartes=(longitud/tamanyo)+1;
printf("Dime el nombre del fichero: ");
scanf("%s",&nombre1);
printf("Dime el tamanyo de las partes en que divido el fichero: ");
scanf("%d",&tamanyo);
fichero1=fopen(nombre1,"rb");
 if(fichero1==NULL)
 {
 printf("Error, no existe el fichero\n");
 exit(1);
 }
 else
 fseek(fichero1,0,SEEK_END); /*Vas al final del fichero */
 longitud=ftell(fichero1);
 fseek(fichero1,0,SEEK_SET); /*Vas al principio del fichero */
 buffer=(char*)malloc(tamanyo);
  if(buffer==NULL)
  {
  printf("Se siente, no hay suficiente espacio\n");
  exit(2);
  }
  for(i=1;i<=numeroPartes;i++)
        {
 resultado=fread(buffer,1,tamanyo,fichero1);
  fclose(fichero1);
  
 puts("Dime el nombre del fichero donde guardarlo: ");
 gets(nombre2);
 fwrite(buffer,resultado,1,fichero2);
        }
        getch();
}

A ver si me podeis ayudar.

Un saludo.


12-Mar-2006 23:14
Diego Teruel

creo ke tengo ke kitar la segunda parte ke pide otro nombre del fichero, pero esto es solo de prueba, si alguien saca algo ke me lo diga.

Un saludo


13-Mar-2006 11:58
Taisen Tetsu

Re: Practicas agresivas
de Merovingio Buwoski - domingo, 12 de marzo de 2006, 20:33
 Yo lo se. Windows es una castaña.

Usa linux

no es por nada pero mi programa en linux peta y en windows va k te cagas sin cambiar codigo ni nada


13-Mar-2006 21:42
Jose P. Jávega

    A ver, en ese fuente hay alguna cosilla sin sentido.

-   Justo debajo de main calculas los trozos que vas a crear ¿Como lo haces sin ni siquiera saber el fichero que vas a cortar y el tamaño que tiene, ni el tamaño que se quiere de salida?.
-   Cuando haces el else despues de abrir el fichero origen, faltan llaves.
-   Si cierras el fichero1 despues de guardar el primer bloque, cuando lo vuelvas a abrir volverá a estar al principio y nunca copiará todo el fichero.
-   No llego a entender que se supone que quieres hacer con esta linea:
                   resultado=fread(buffer,1,tamanyo,fichero1);
    Yo diria que sirve para comprobar si has podido leer correctamente, pero para eso necesitas otra linea que comprueba el valo devuelto del fread. Por cierto, el formato es al contrario: primero el tamaño de lo que quieres leer (tamanyo) y despues el número de veces que quieres leerlo 1.


   
En fin, seguro que hay algo más, pero para lo poco que suelo escribir ya es bien....

13-Mar-2006 22:24
Diego Teruel

Vale, gracias por la informacion .

Mi duda es: Ahora que hay que hacerlo en bloques, ¿eso como se hace?.

El que va de byte a byte me va, pero esque en bloques no se ni como comenzar. Poner el pseudocodigo o algo de este ejercicio. Tambien estoy abierto a todas las posibles soluciones que deis

Un saludo.


14-Mar-2006 22:19
Diego Teruel

Yo estoy indignado con la nota de mi segundo ejercicio. No entiendo porque se me quita un punto porque me cree un fichero en blanco. Es una injusticia en toda regla enojado. Ademas, el programa hacia lo que debia, y no entiendo porque tengo un misero 9. Si alguien me lo explica....

Un saludo.diabólico

P.D Yo solo expreso mi opinion, luego no quiero follones de ningun tipo.

Un saludorisa






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)