![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#1
|
||||
|
||||
|
Cita:
Lo que está pasando es que declaraste el archivo como "file of Alumno". Eso es un archivo binario que solamente acepta que vos escribas variables de tipo Alumno. Para escribir Alumno.Nombre deberías tener un archivo de tipo "TextFile". Por ejemplo:
Cita:
En el link que te paso Caral explican muy bien cómo es el tema con los archivos de texto. Otro link por si las dudas. Saludos. |
|
#2
|
|||
|
|||
|
Muchas Gracias A Los Dos Por Su Ayuda!
|
|
#3
|
||||
|
||||
|
Gracias por los comentarios Caral, ya le comenté a nuestro amigo el sentido de mi comentario lo cual para nada era con la intención de atacar. Afortunadamente maugescully esta sacando bastante ayuda para resolver su duda y creo que ya tiene bastante claro cual es la filosofia del Club la cual obviamente no es resolver tareas ajenas sino ayudarnos pues no todos somos expertos en todo y siempre requerimos alguna opinión.
Tratando de aportar al hilo: No crees que serviría que nos escribas el texto de lo que te pidieron. Analizando lo que has hecho veo que en lo que ya te servía (tu primer código) prácticamente ya lo tenias resuelto pues lograbas almacenar todos los datos, solo faltaba grabar esos datos pero en formato TXT, que es relativamente muy simple basado en ese esquema, pues solamente tienes que ir recorriendo tu archivo de datos, leer cada registro y escribirlo en un archivo de texto. De esta forma puedes seguir agregando registros e inclusive volverlos a editar uno por uno. Pero insisto necesitas aclarar bien que te pidieron
__________________
AKA "El animalito" ||Cordobés a mucha honra|| |
|
#4
|
||||
|
||||
|
Hola
Vamos a ver los pormenores de un archivo texto en comparación con un archivo INI (tambien de texto). Si bien es cierto te pidieron que hicieras un programa que guardara la información en un archivo texto tratare de demostrar que no es practico. Dentro de lo que mi conocimiento llega. Hacer y guardar datos en un archivo text: Para eso simplemente se crea y luego se busca la informacion. El problema radica en que la infromacion no tiene codificacion, ruta, lugar etc. Por esta razon, si se coloca la informacion se tendra que traer toda, no se podra filtrar, por lo menos yo no se como hacerlo. Este seria el codigo para el archivo text: Creamos una variable tipo TextFile, asignamos el file, escribimos el texto y lo guardamos, simple. Para traer los datos: Casi lo mismo y mostramos los datos en un memo. Ahora viene mi duda, que pasa si quieres saber los datos de una persona determinada, con este archivo (segun lo que puedo conocer) no podras, osea no puedes filtrar esa informacion. Entonces recurrimos a otro tipo de archivo texto, este es un INIFile. Que particularidad tiene???. Lo mas importante es que la informacion la puedes guardar en forma ordenada, dandole una ruta, un codigo, una ubicación determinada. Con esto SI se puede jugar a base de datos y por supuesto filtrar. He hecho un ejemplo con este tipo de archivo (INI) para que puedas ver como trabaja. El ejemplo es muy. muy, muy simple. Lo que hace es: Guarda en un archivo el nombre, el apellido y el dni de una persona. Esto lo hace de la siguiente manera: 1-se escribe un codigo unico para la persona. 2-en el combobox se determina que se quiere guardar, (nombre, apellido o dni). 3-Se coloca el dato, osea, el nombre, apellido etc..... 4-Se guarda. Una vez guardada la informacion, con solo poner el codigo en el edit y presionar el boton traerá los datos de la persona que corresponda a este codigo. El archivo de muestra ya contiene 4 registros enumerados del 1 al 4, con solo colocar uno de esos numeros en el edit (Codigo) y presionar en Ver los datos te daras cuenta de como funciona. En base a esto se pueden hacer mil cosas diferentes. Espero te sirva de algo, por lo menos a mi me sirvio de practica. ![]() Saludos
__________________
Siempre Novato Última edición por Caral fecha: 10-09-2010 a las 23:41:47. |
|
#5
|
|||
|
|||
|
gracias a todos por su ayuda, antes que nada les comento que ya logramos hacer que la aplicacion grabe la informacion en un txt, y tambien leerla desde allí. creo que uno de nuestros errores era pretender leer el txt desde el bloc de notas y poder ver los datos tal cual. Para quienes querían saber cual era el ejercicio se los paso así le queda claro que necesito, pero por suerte ahora que pudimos destrabarnos, creo que el resto saldrá facilmente.
Les comento como sigo... Gracias!!! Ejercicio: Desarrolle una aplicación Delphi ORIENTADA A OBJETOS que permita administrar los alumnos y calificaciones de la asignatura Matemática Básica de cierta Facultad. La información de los alumnos de la mat eria se debe organizar en un archivo de acceso directo cuyos registros se componen de los campos: DNI, Apellido, nombres, Nota1, Nota2, Nota3 Menú Archivo: Nuevo, Abrir, Guardar, Agregar Alumno, Eliminar Alumno, Cerrar Menú Herramientas: Buscar Alumno x DNI, Lista c/Promedios, Lista de Regulares, Lista de Libres |
|
#6
|
||||
|
||||
|
Entonces sí es como te digo maugescully, procedo a desglosar el enunciado del ejercico:
Orientada a oBjetos: Tendras que hacer una clase "Alumno" o algun esquema similar Administrar: El clásico CRUD como más adelante te lo pone en los menús. Archivo de Acceso Directo: NO es un archivo de texto, es un archivo como el que creaste en el primer post que pusiste, eso está correcto. Los Menús que te ponen son las funciones que tendrías que desarrollar, que prácticamente son triviales. La unit 1 que hiciste es la que corresponderia a "Agregar Alumno". De manera que vamos olvidándonos de un archivo de texto, y vamos a repasar el tema de manejo de archivos de Delphi y las funciones: Rewrite; Reset; CloseFile; Seek;
__________________
AKA "El animalito" ||Cordobés a mucha honra|| |
|
#7
|
|||
|
|||
|
Gracias AzidRain. Te mando lo que tengo hasta el momento...
UNIT1 Código:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, Unit2;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
Archivo1: TMenuItem;
Nuevo1: TMenuItem;
Abrir1: TMenuItem;
Guardar1: TMenuItem;
AgregarAlumno1: TMenuItem;
EliminarAlumno1: TMenuItem;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label4: TLabel;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Cerrar1: TMenuItem;
Herramientas1: TMenuItem;
Buscar1: TMenuItem;
Listac1: TMenuItem;
N1: TMenuItem;
ListadeLibres1: TMenuItem;
Salir1: TMenuItem;
Label8: TLabel;
Label9: TLabel;
Button1: TButton;
Edit8: TEdit;
Label10: TLabel;
Edit9: TEdit;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure Nuevo1Click(Sender: TObject);
procedure Abrir1Click(Sender: TObject);
procedure AgregarAlumno1Click(Sender: TObject);
procedure Cerrar1Click(Sender: TObject);
procedure Buscar1Click(Sender: TObject);
procedure Salir1Click(Sender: TObject);
procedure Guardar1Click(Sender: TObject);
procedure Listac1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
z:TAlumno;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
z:=TAlumno.Create;
end;
procedure TForm1.Nuevo1Click(Sender: TObject);
begin
If saveDialog1.Execute then
begin
z.ArchivoNuevo(Savedialog1.FileName+'.txt');
showmessage('Se creó el archivo:'+Savedialog1.filename+'.txt')
end
end;
procedure TForm1.Abrir1Click(Sender: TObject);
begin
If OpenDialog1.Execute
then begin
z.AbrirArchivo(OpenDialog1.filename);
showmessage('Archivo '+OpenDialog1.filename+' Abierto')
end
end;
procedure TForm1.Guardar1Click(Sender: TObject);
var c:ficha ;cod:byte ;
begin
If saveDialog1.Execute then
begin
c.DNI:=StrToInt(Edit1.Text);
c.Apellido:=Edit2.Text;
c.Nombres:=Edit3.Text;
c.nota1:=StrToInt(edit4.text);
c.nota2:=StrToInt(Edit5.Text);
c.nota3:=StrToInt(Edit6.text);
c.Promedio:=(c.nota1+c.nota2+c.nota3)/3;
if c.Promedio<=60 then
begin
c.Condicion:='Libre';
end
else c.Condicion:='Regular';
z.guardarcomo (Savedialog1.FileName+'.txt', c, cod);
showmessage('El Archivo se a guardado como '+OpenDialog1.filename);
end
end;
procedure TForm1.AgregarAlumno1Click(Sender: TObject);
var c:Ficha; cod:byte ;
begin
c.DNI:=StrToInt(Edit1.Text);
c.Apellido:=Edit2.Text;
c.Nombres:=Edit3.Text;
c.nota1:=StrToInt(edit4.text);
c.nota2:=StrToInt(Edit5.Text);
c.nota3:=StrToInt(Edit6.text);
c.Promedio:=(c.nota1+c.nota2+c.nota3)/3;
if c.Promedio<=60 then
begin
c.Condicion:='Libre';
end
else c.Condicion:='Regular';
z.GrabarAlumno(c,cod);
If cod<>0 then
ShowMessage('No se pudo Agregar el Cliente.Seguramente no Abrió antes el archivo')
else ShowMessage('Se ha agregado el registro');
end;
procedure TForm1.Cerrar1Click(Sender: TObject);
begin
z.CerrarArchivo;
z.free;
Close
end;
procedure TForm1.Buscar1Click(Sender: TObject);
var i:word; c:Ficha; mensaje:string;
begin
i:=StrToInt(Edit9.Text);
z.BuscarAlumno(i,c,mensaje);
If mensaje='OK' then
begin
Edit1.Text:=IntToStr(c.DNI);
Edit2.Text:=c.Apellido;
Edit3.Text:=c.Nombres;
Edit4.Text:=IntToStr(c.nota1);
Edit5.Text:=IntToStr(c.nota2);
Edit6.Text:=IntToStr(c.nota3);
Edit7.Text:=FloatToStr(c.Promedio);
Edit8.Text:=c.Condicion;
end
else
ShowMessage(mensaje);
end;
procedure TForm1.Salir1Click(Sender: TObject);
begin
close();
end;
procedure TForm1.Listac1Click(Sender: TObject);
var A: TAlumno;
begin
if opendialog1.Execute then
begin
A:= Talumno.Create;
A.ListaPromedios(Memo1, opendialog1.FileName);
A.Free;
end;
end;
end.
UNIT2 Código:
unit Unit2;
interface
uses SysUtils, Dialogs, StdCtrls;
Type
Ficha= Record
DNI:longint;
Apellido, nombres: string[20];
nota1,nota2,nota3:integer;
Promedio:real;
Condicion: string[10];
end;
TAlumno=class
private
Archi: File of Ficha;
public
procedure ArchivoNuevo(ArchiFisico:string);
procedure AbrirArchivo(ArchiFisico:string);
procedure Guardarcomo(ArchiFisico:String; c:ficha; var cod:byte);
procedure GrabarAlumno(c:Ficha; var cod:byte);
procedure ListaPromedios(var Tm1: TMemo; ArchiFisico: string);
//procedure Eliminar(ArchiFisico:string);
procedure CerrarArchivo;
procedure BuscarAlumno(p:word; var c:Ficha; var m:string);
//procedure Promedio(P:prom.);
//procedure Regulares;
//procedure Libres;
end;
implementation
procedure TAlumno.ArchivoNuevo(ArchiFisico:string);
begin
AssignFile(Archi,ArchiFisico);
Rewrite(Archi);
end;
procedure TAlumno.AbrirArchivo(ArchiFisico:string);
begin
AssignFile(Archi,ArchiFisico);
Reset(Archi)
end;
procedure TAlumno.Guardarcomo(ArchiFisico:string; c:ficha; var cod:byte);
begin
AssignFile(Archi,ArchiFisico);
ReWrite(Archi) ;
{$I-}
Seek(Archi, FileSize(archi));
{$I+};
cod:=IOResult;
If cod=0 then
Write(Archi,c);
end;
procedure TAlumno.GrabarAlumno(c:Ficha; var cod:byte);
begin
{$I-}
Seek(Archi, FileSize(archi));
{$I+};
cod:=IOResult;
If cod=0 then
Write(Archi,c);
end;
procedure TAlumno.BuscarAlumno(p:word;var c:Ficha;var m:string);
var Largo:word;
begin
{$I-} Largo:=FileSize(archi);{$I+};
If (IOResult<>0)
then
begin
m:='Problemas con el archivo. Está creado o abierto ?';
exit // sale del procedure
end
else if p>=Largo then
begin
m:='El Número de registro está fuera de rango.';
exit; // sale del procedure
end;
Seek(Archi, p);
Read(archi,c);
m:='OK';
end;
procedure TAlumno.ListaPromedios (var Tm1: TMemo; ArchiFisico: string);
var Archi:TextFile;
Nomb, cadena: string;
DNI:longint;
n1,n2,n3: integer;
Promedio: real;
begin
AssignFile(Archi, ArchiFisico);
{$I-}
Reset(Archi);
{$I+}
if IOResult=0 then begin
readln(Archi, Nomb);//leo la comision
while not EOF(Archi) do
begin
readln(Archi,nomb);
readln(Archi,n1,n2,n3);
Promedio:= (n1+n2+n3)/3;
cadena:= 'Nota 1: '+inttostr(n1)+', Nota 2: '+inttostr(n2)+', Nota 3: '+inttostr(n3)+', Promedio: '+FormatFloat('###.##',promedio);
Tm1.Lines.Add(Nomb);
Tm1.Lines.Add(cadena);
end;
CloseFile(Archi);
end;
end;
procedure TAlumno.CerrarArchivo;
begin
CloseFile(Archi)
end;
end.
ahora el problema que tengo es que puedo grabar y puedo leer pero solo por byte... y si logro que busque solo me lee los simbolos no la informacion que corresponde! (la busqueda sería desde el edit1 no desde el 9, esa fue solo una prueba) en eso trabajo ahora, si tenes alguna ayudita o correccion para darme seria muy agradecida!! |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| string literal may have at most 255 elements?? auxilio | einarcito | SQL | 7 | 26-08-2008 01:26:15 |
| Auxilio con FastReport | nmg05 | Impresión | 0 | 14-04-2008 18:42:43 |
| Auxilio en ComboBox | Luis | Conexión con bases de datos | 4 | 30-09-2004 09:43:55 |
| Auxilio....Tipos de datos | buitrago | Firebird e Interbase | 0 | 07-09-2004 00:51:20 |
|