Programación General > C++ Builder
Leer De Un Fichero Para Grabar En Otro
okap:
Hola:
Tengo un programa de diseño de etiquetas el cual una vez que tengo diseñada la etiqueta me genera un archivo de texto con el juego de instrucciones que le envia a la impresora. Dicho archivo yo lo tengo que tratar para introducirle una instrucción que el pograma de deseño no contempla y por eso se la tengo que introducir yo.
El problema es que anteriormente utilizaba otro programa el cual me generaba dicho fichero poniendo una instrucción por línea, pero el nuevo pone 2 o más instrucciones en una misma línea. Necesito leer dicho fichero y guardalo en otro poniendo cada instrucción en una sóla línea.
Este es un ejemplo del fichero que generaba el primer programa de diseño de etiquetas:
#!A1
#BON
#IMS54.0/25.0
#DC
#N9
#ERN0
#T6.2
#J3.9
#M1/1
#YN101/1/40///**031#G
#T12.1
#J6.4
#M1/1
#YN101/0/181///**019#G
Este es el código que genera el nuevo programa:
#!A1#BON
#IMSR54.02/24.98
#DC#N9
#ERN0
#T16.26 #J13.55
#YIR43/ÿ
@ þ( þ' þ& þ% þ$ þ#
þ" þ! þ þ¬
þ þ þ þ
þ þ þ þ
þ þ þ þ ¬ þ þ ! þ@ þ " þ@ þ $ þ ) þ#G
Siendo la última línea la instrucción referente a una imagen que he introducido y la cual me da problemas al leer del fichero original y grabarla en uno nuevo, donde separo cada instrucción en una línea. Sólo me coge los diez primeros caracteres.
Este es mi problema. Lo que he hecho es abrir el fichero original y el de destino mediante la clase TstringList, pero al leer cada línea como cadena, no consigo grabar en el fichero destino dicha instrucción tal cual está en el original.
Otra de las cosas que he intentado es esta:
FILE *forigen;
FILE *fdestino;
forigen = fopen(rutaFicheroInAux.c_str(),"r");
fdestino = fopen("c:\destino.txt","w");
char caracter = ' ';
char caract_aux = ' ';
while(!feof(forigen))
{
fscanf(forigen,"%c",&caracter);
if(caracter == '#')
{
caract_aux = '\n';
fprintf(fdestino,"%c",&caract_aux);
caract_aux = '\r';
fprintf(fdestino,"%c",&caract_aux);
fprintf(fdestino,"%c",&caracter);
}
else
fprintf(fdestino,"%c",&caracter);
}//fin del while
fclose(forigen);
fclose(fdestino);
Pero no me graba en el fichero destino caracteres ‘B’ y ‘C’, todos en una misma línea. Pensaba que leyendo el fichero origen carácter a carácter y grabandolo de la misma manera en el fichero destino tendría éxito, pero no ha sido así.
Por favor me gustaría que me mostraseis otra opción para conseguir mi objetivo.
Muchas gracias.
Eternal Idol:
No se si entendi muy bien lo que queres pero si lo hice esta es mi respuesta:
¿No es mas facil leer todo el primer archivo en un buffer y escribirlo tal cual en el segundo archivo? Despues tranquilamente se le agregan los datos nuevos.
okap:
No exactamente. Lo que quiero es leer el fichero origen caracter a caracter y grabarlo en el fichero destino caracter a caracter. Lo quiero así para que a la vez que voy leyendo del fichero de origen, saber cuando tengo que meter un '\n\r', para que me ponga la nueva instrucción en una sóla línea.
Para aclarar todo esto diré que cada instrucción viene precedida por el caracter '#', y lo que necesito es que sólo haya una instrucción por línea tal que así:
#!A1
#BON
#IMSR54.02/24.98
#DC
#N9
#ERN0
#T16.26
#J13.55
#YIR43/ÿ
@ þ( þ' þ& þ% þ$ þ#
þ" þ! þ þ¬
þ þ þ þ
þ þ þ þ
þ þ þ þ ¬ þ þ ! þ@ þ " þ@ þ $ þ ) þ#G
Pero el problema lo tengo al procesar esta última instrucción ya que se trata de una imagen y tiene todos esos caracteres "extraños" que no puedo leer, con lo cual el fichero destino no me quedaría igual que el origen.
Gracias.
okap:
Me gustaría aclarar lo siguiente. Desconozco si tengo que abrir el fichero origen en modo ascii o en modo binario, pero si lo abro en modo binario no sé si podré leer carácter a carácter para diferenciar cuando leo un ‘#’ para poder así bajar de línea en el fichero destino.
Además necesito abrir el fichero origen y luego grabar el fichero destino con el mismo nombre y en el mismo directorio, pero no sé como cargar el fichero origen en memoria o buffer para poder leer de ahí y a la vez escribir en el fichero destino.
Eternal Idol:
No llego a entenderlo realmente ...
¿El primero archivo tiene todo en una sola linea? Lo que mostras no es asi ...
Decis que es #INS#INS#INS pero mostras para el primer archivo:
#INS
#INS
#INS
Si tenes que insertar separadores de linea igualmente podes leer el archivo en un buffer e ir recorriendolo (binario siempre funciona).
Teniendo el archivo en un buffer es tan simple como:
--- Código: Text --- char *orgPtr = buffer;for (long x = 0; x < orgSize; x++, orgPtr++){ if (*orgPtr == '#') { fwrite("\r\n", 2, 1, dstF); } fwrite(orgPtr, 1, 1, dstF);}
Navegación
[#] Página Siguiente
Ir a la versión completa