¿Cómo puedo grabar y leer ficheros con c++ Builder?
¿Alguien me puede poner un ejemplo de cómo se puede grabar y luego leer 10 caracteres de un archivo utilizando C++ Builder? Gracias.
Muchas gracias, PEEEEEEEEERO. ¿No hay alguna forma tal y como me habeis dicho de que si tengo un archivo de texto grande ir grabando LINEA POR LINEA en un buffer o variable tipo string?????
Para eso puedes usar fgets en vez de fscanf, este ejemplo lo saque de la ayuda de C++.
#include <string.h>
#include <stdio.h>
int main(void)
{
FILE *stream;
char string[] = "This is a test";
char msg[20];
/*Abre el archivo en modo de escritura para agregar */
stream = fopen("DUMMY.FIL", "w+");
/* escribe un string en el archivo */
fwrite(string, strlen(string), 1, stream);
/*busca el inicio del archivo */
fseek(stream, 0, SEEK_SET);
/* lee una cadena del archivo */
fgets(msg, strlen(string)+1, stream);
/* muestra la cadena*/
printf("%s", msg);
fclose(stream);
return 0;
}
y chan chan, listo!
Pasa por mi foro.-
_Viktor
#include <string.h>
#include <stdio.h>
int main(void)
{
FILE *stream;
char string[] = "This is a test";
char msg[20];
/*Abre el archivo en modo de escritura para agregar */
stream = fopen("DUMMY.FIL", "w+");
/* escribe un string en el archivo */
fwrite(string, strlen(string), 1, stream);
/*busca el inicio del archivo */
fseek(stream, 0, SEEK_SET);
/* lee una cadena del archivo */
fgets(msg, strlen(string)+1, stream);
/* muestra la cadena*/
printf("%s", msg);
fclose(stream);
return 0;
}
y chan chan, listo!
Pasa por mi foro.-
_Viktor
no sé bien lo que quieres, pero tanto para grabar como para abrir puedes utilizar un Memo
Ejemplo para guardar:
Añade un Button, un Memo y un SaveDialog.
En el evento OnClick del Button escribe lo siguiente:
if(SaveDialog1->Execute())
Memo1->Lines->SaveToFile(SaveDialog1->FileName);
Para abrir añade otro Button y un OpenDialog:
if(OpenDialog1->Execute())
Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
Para acceder a la primera lÃnea del memo y meterla en una variable por ejemplo, lo haces con:
AnsiString a = Memo1->Lines->Strings[0];
y para coger los primeros 10 caracteres de esa lÃnea;
AnsiString b = a.SubString(1,10);
Donde el 1 es el caracter de la cadena a partir del cual extraemos la nueva cadena y 10 es el nº de caracteres que cogemos a partir de ahÃ.
Espero haberte ayudado.
Salu2.
Ejemplo para guardar:
Añade un Button, un Memo y un SaveDialog.
En el evento OnClick del Button escribe lo siguiente:
if(SaveDialog1->Execute())
Memo1->Lines->SaveToFile(SaveDialog1->FileName);
Para abrir añade otro Button y un OpenDialog:
if(OpenDialog1->Execute())
Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
Para acceder a la primera lÃnea del memo y meterla en una variable por ejemplo, lo haces con:
AnsiString a = Memo1->Lines->Strings[0];
y para coger los primeros 10 caracteres de esa lÃnea;
AnsiString b = a.SubString(1,10);
Donde el 1 es el caracter de la cadena a partir del cual extraemos la nueva cadena y 10 es el nº de caracteres que cogemos a partir de ahÃ.
Espero haberte ayudado.
Salu2.
Hola podrias hacerlo de esta forma, asi solo lees lo justo y necesario.
#include <stdio.h>//fscanf//
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TOpenDialog *Abrir = new TOpenDialog(Application);
FILE *fp;
char caracter;
String lineas="";
Abrir->DefaultExt="txt";
Memo1->Clear();
if(Abrir->Execute())
{
fp=fopen(Abrir->FileName.c_str(),"r" ) ;
for(int i=0;i<10;i++)
{
fscanf(fp,"%c",&caracter);
lineas+=String(caracter);
}
Memo1->Lines->Add(lineas);
fclose(fp);
}
delete Abrir;
}
Y finalmente haces en otro boton si quieres
Memo1->Lines->SaveToFile("ruta_destino");
Suerte!
#include <stdio.h>//fscanf//
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TOpenDialog *Abrir = new TOpenDialog(Application);
FILE *fp;
char caracter;
String lineas="";
Abrir->DefaultExt="txt";
Memo1->Clear();
if(Abrir->Execute())
{
fp=fopen(Abrir->FileName.c_str(),"r" ) ;
for(int i=0;i<10;i++)
{
fscanf(fp,"%c",&caracter);
lineas+=String(caracter);
}
Memo1->Lines->Add(lineas);
fclose(fp);
}
delete Abrir;
}
Y finalmente haces en otro boton si quieres
Memo1->Lines->SaveToFile("ruta_destino");
Suerte!
Me gusta esa forma de hacerlo pero...
cuando pones
for(int i=0;i<10;i++)
{
fscanf(fp,"%c",&caracter);
lineas+=String(caracter);
}
no entiendo cómo vas pasando de caracter. no veo dónde influye i para avanzar caracteres a lo largo del archivo.
Espero que no sea mucho pedir, ¿podrÃas explicarme un poco el código que has puesto dentro del if (solo lo de entre las llaves)?
Estoy algo verde usando las funciones relativas a archivos (deberÃa darme vergüenza!!!). Gracias de antemano.
Salu2
cuando pones
for(int i=0;i<10;i++)
{
fscanf(fp,"%c",&caracter);
lineas+=String(caracter);
}
no entiendo cómo vas pasando de caracter. no veo dónde influye i para avanzar caracteres a lo largo del archivo.
Espero que no sea mucho pedir, ¿podrÃas explicarme un poco el código que has puesto dentro del if (solo lo de entre las llaves)?
Estoy algo verde usando las funciones relativas a archivos (deberÃa darme vergüenza!!!). Gracias de antemano.
Salu2
Es super simple, mira:
Como tu problema radicaba en leer solo diez caracteres, el for repite la accion 10 veces
for(int i=0;i<10;i++)
{
//lee un caracter y lo almacena en "caracter", luego el puntero fp, avanza para leer la proxima letra en el ciclo que viene del for
fscanf(fp,"%c",&caracter);
//voy pegando todas las letras a la variable "lineas"
lineas+=String(caracter);
}
Asi finalmente la agrego como linea al memo.
Es eso, asi de simple.
Visita mi foro:
http://ayudacbuilder.foros.st/
Como tu problema radicaba en leer solo diez caracteres, el for repite la accion 10 veces
for(int i=0;i<10;i++)
{
//lee un caracter y lo almacena en "caracter", luego el puntero fp, avanza para leer la proxima letra en el ciclo que viene del for
fscanf(fp,"%c",&caracter);
//voy pegando todas las letras a la variable "lineas"
lineas+=String(caracter);
}
Asi finalmente la agrego como linea al memo.
Es eso, asi de simple.
Visita mi foro:
http://ayudacbuilder.foros.st/
OK, muchas gracias. Por lo que veo el puntero avanza automáticamente al siguiente caracter después de leer uno. Mmm, no sé si me explico bien, pero creo que lo he entendido. Algo asà como cuando hacÃas un scanf en c y saltaba solo de lÃnea, mientras que con printf siempre habÃa que poner el n, supongo. Parece q me armo un cacao mental, jejeje, pero sÃ, creo que lo he entendido.
Ya que he dado la lata una vez, a ver si puede ser otra...
fscanf para leer, y ¿para escribir en un fichero? ¿y añadir algo a un fichero?
Evidentemente sé hacerlo a través de memos, pero me parece mucho más elegante y mejor programado hacerlo a través de las funciones falgo como fscanf y otras. Me llega que me digas q órdenes son. Después ya las estudio yo, que serÃa mucho morro pedirte explicación de todo.
Gracias.
Salu2
Ya que he dado la lata una vez, a ver si puede ser otra...
fscanf para leer, y ¿para escribir en un fichero? ¿y añadir algo a un fichero?
Evidentemente sé hacerlo a través de memos, pero me parece mucho más elegante y mejor programado hacerlo a través de las funciones falgo como fscanf y otras. Me llega que me digas q órdenes son. Después ya las estudio yo, que serÃa mucho morro pedirte explicación de todo.
Gracias.
Salu2
seria fprintf
algo asi
FILE *fp = fopen("fichero.txt","w");//w de escritura
imagina que quieres escribir del uno al diez en el fichero. Seria asi
for(int i=0;i<10;i++)
fprintf(fp,"%dn",i+1);
Asi de simple.-
Visita mi foro
http://ayudacbuilder.foros.st/
algo asi
FILE *fp = fopen("fichero.txt","w");//w de escritura
imagina que quieres escribir del uno al diez en el fichero. Seria asi
for(int i=0;i<10;i++)
fprintf(fp,"%dn",i+1);
Asi de simple.-
Visita mi foro
http://ayudacbuilder.foros.st/
MuchÃsimas gracias. Con eso voy más que servido.
Por cierto, menudas horas para andar programando! jejeje Buenas noches.
Por cierto, menudas horas para andar programando! jejeje Buenas noches.
