Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-08-2010
maugescully maugescully is offline
Registrado
 
Registrado: ago 2010
Posts: 8
Poder: 0
maugescully Va por buen camino
Auxilio

Hola, estoy haciendo un curso de programacion para delphi y necesito entregar un trabajo práctico, el tema es que estoy trabada porque no logro sortear un problema. Este problema es que mediante la aplicacion debo crear un archivo txt para almacenar informacion de tipo nombre, apellido, etc, y no puedo hacerlo. es decir, logro crear el archivo pero almacena la informacion de manera erronea.. es decir con garabatos EJ: " aaaaa Üý Äl aaaaaaäE`$wD \ý ü ² bbbbbb Üý Äl"
Como puedo solucionarlo? Les adjunto los codigos:

Unit 1
Código:
procedure TForm1.AgregarCliente1Click(Sender: TObject);
var c:Cliente; cod:byte ;
begin
c.Apellido:=Edit1.Text;
c.Nombres:=Edit2.Text;
c.DNI:=StrToInt(Edit3.Text);
z.GrabarCliente(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;

unit 2
Código:
procedure TManejoClientes.GrabarCliente(c:Cliente; var cod:byte);
  begin
{$I-}
Seek(Archi, FileSize(archi));
{$I+};
cod:=IOResult;
If cod=0 then
Write(Archi,c);
  end;
Desde ya muchisimas gracias!!!
Responder Con Cita
  #2  
Antiguo 07-08-2010
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
Hola, maugescully. Bienvenida al club.

Como a todos los nuevos, te invito a leer la guía de estilo.

Con respecto a tu pregunta. Ese archivo "Archi"... supongo que es un "file of Cliente". ¿Y cliente qué sería un registro? ¿verdad?

Si es un registro (record), seguramente no te va a guardar un texto bien armadito. Va a guardar la representación interna del registro... y eso no es texto normal.

La información está guardada, y podrías leerla con un Read, pero no está en formato de texto.

Para guardarla en formato de texto tendrías que declarar el archivo como "TextFile" y después hacer

Código Delphi [-]
Write(Archi, c.Apellido);
Write(Archi, c.Nombres);
Write(Archi, c.DNI);
// o usando Writeln(archivo, c.xxx) para que guarde linea por linea y no todo en una sola linea.

PD: Por cierto, no quiero complicarte la vida, por ahora está bien que uses IOResult, pero sabé que no es lo más correcto. Así que en algún momento sería bueno que investigaras el asunto.
Responder Con Cita
  #3  
Antiguo 07-08-2010
maugescully maugescully is offline
Registrado
 
Registrado: ago 2010
Posts: 8
Poder: 0
maugescully Va por buen camino
Gracias lord delfos por tus consejos, te cuento que estoy intantando hacer el cambio que me dijiste peor me salta un error que no logro corregir. Si no es mucha molestia te pediría queme orientes: te paso el codigo completo para que veas de que se trata

unit 1
Código:
 
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, Unit2;
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Archivo: TMainMenu;
    ARCHIVO1: TMenuItem;
    NUEVO1: TMenuItem;
    ABRIR1: TMenuItem;
    GUARDAR1: TMenuItem;
    AGREGARALUMNO1: TMenuItem;
    ELIMINARALUMNO1: TMenuItem;
    CERRRA1: TMenuItem;
    HERRAMIENTAS1: TMenuItem;
    objectLabel5TLabel1: TMenuItem;
    LISTACPROMEDIOS1: TMenuItem;
    LISTADEREGULARES1: TMenuItem;
    LISTADELIBRES1: TMenuItem;
    SALIR1: TMenuItem;
    Label8: TLabel;
    Label9: TLabel;
    Edit7: TEdit;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    procedure NUEVO1Click(Sender: TObject);
    procedure ABRIR1Click(Sender: TObject);
    //procedure GUARDAR1Click(Sender: TObject);
    procedure AGREGARALUMNO1Click(Sender: TObject);
    procedure SALIR1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    //procedure ELIMINARALUMNO1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  z: TAdministrar;
implementation

{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
   z:=TAdministrar.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.AGREGARALUMNO1Click(Sender: TObject);
  var a:Alumno; b:byte; z: TAdministrar;
begin
    a.Apellido:=Edit2.Text;
    a.Nombres:=Edit3.Text;
    a.DNI:=StrToInt(Edit1.Text);
    a.N1:=StrToInt(Edit4.Text);
    a.N2:=StrToInt(Edit5.Text);
    a.N3:=StrToInt(Edit6.Text);
    z.AgregarAlumno(a,b);
If b<>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.SALIR1Click(Sender: TObject);
begin
Close;
end;
Unit2
Código:
unit Unit2;
interface
uses SysUtils,Dialogs;
 Type
   Alumno= Record
   Apellido, nombres: string[20];
   DNI:longint;
   N1, N2, N3: real;
end;
TAdministrar=class
   private
   Archi: File of Alumno;
   public
  procedure ArchivoNuevo(ArchiFisico:string);
  procedure AbrirArchivo(ArchiFisico:string);
  procedure AgregarAlumno(a:Alumno; var b:byte);
  //procedure borrarArchivo(p:word; a:Alumno; var cod:byte; m:string);
  //procedure BuscarCliente(p:word; var c:Cliente; var m:string);
  //procedure CerrarArchivo;
end;
 
implementation

procedure TAdministrar.ArchivoNuevo(ArchiFisico:string);
  var archi:textfile;
  begin
    AssignFile(Archi,ArchiFisico);
    Rewrite(Archi);
  end;
procedure TAdministrar.AbrirArchivo(ArchiFisico:string);
  var archi:textfile;
  begin
    AssignFile(Archi,ArchiFisico);
    Reset(Archi)
  end;
procedure TAdministrar.AgregarAlumno(a:Alumno; var b:byte);
  begin
  {$I-}
    Seek(Archi, FileSize (archi));
  {$I+};
    b:=IOResult;
    If b=0 then
      Writeln(Archi, a.Apellido);
      Writeln(Archi, a.Nombres);
      Writeln(Archi, a.DNI);
      Writeln(Archi, a.N1);
      Writeln(Archi, a.N2);
      Writeln(Archi, a.N3);
      end;
end.
Me saltan los siguientes errores:
[Error] Unit2.pas(52): Incompatible types: 'Alumno' and 'ShortString'
[Error] Unit2.pas(53): Illegal type in Write/Writeln statement
[Error] Unit2.pas(53): Incompatible types: 'Alumno' and 'ShortString'
[Error] Unit2.pas(54): Illegal type in Write/Writeln statement

Muchisimas gracias!!!

Última edición por maugescully fecha: 07-08-2010 a las 05:31:33. Razón: me falto [code][/code]
Responder Con Cita
  #4  
Antiguo 07-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola maugescully.

Cuando ví el título pensé que te estabas ahogando...

Voy a agregar algunas sugerencias a las que ya te ha dado Lord Delfos.

En este caso no es buena idea dejar que el usuario elija el nombre del archivo, complica la cosa y es
propenso a generar confusiones.
Si lo que guardamos son alumnos y el archivo es de texto, lo lógico es darle un nombre (ALUMNOS.TXT por ej.) y
trabajar con el mismo. El nombre de la variable archivo "Archi" podés declararlo como global por ahora.

Todo esto te simplifica puesto que podés habrir el archivo al ingresar a la aplicación y cerrarlo cuando
abandonas la misma, prescindiendo así de los TOpenDialog.

Abrir y Cerrar:
Código Delphi [-]
procedure TForm1.FormCreate;
begin
  Assign(Archi,'C:\PRUEBA\ALUMNOS.TXT'); // o variable con: ruta+nombre
{$i-}
  Reset(Archi);
  if IOResult <> 0 then 
    Rewrite(Archi);
{$I+}
end;

procedure TForm1.FormClose;
begin
  CloseFile(Archi);
end;

Los errores se generan en AgregarAlumo, mirá este código:
Código Delphi [-]
procedure TAdministrar.AgregarAlumno(a:Alumno; var b:byte);
begin
  {$I-}
  //Seek(Archi, FileSize (archi)); MAL:es archivo secuencial. Debe ir: 
  Append(Archi); //Append: añade datos al final de archivo de texto
  {$I+};
  b:=IOResult;
  if b = 0 then
  BEGIN  // Te faltaba, sólo ejecutaba la línea de abajo si b=0 y las demás sí o sí
    Writeln(Archi, a.Apellido);
    Writeln(Archi, a.Nombres);
    // de acuerdo a la versión que trabajes, tal vez debas convertir 
    // a string los campos que siguen.
    // (acordate que el archivo es de texto)
    Writeln(Archi, a.DNI);  // Longint-> string
    Writeln(Archi, a.N1);   // Real -> string   
    Writeln(Archi, a.N2);   
    Writeln(Archi, a.N3);   
  END // Te faltaba, necesario para if/then/begin/end
end;

Hay más cosas para depurar, pero la idea es que vos lo hagas...

Por último te aconsejo que escuches lo dicho por mi colega sobre el uso de {$I}.
Una pista: You try to resolve.


Saludos.

Última edición por ecfisa fecha: 07-08-2010 a las 17:05:17.
Responder Con Cita
  #5  
Antiguo 07-08-2010
maugescully maugescully is offline
Registrado
 
Registrado: ago 2010
Posts: 8
Poder: 0
maugescully Va por buen camino
Mil gracias a los dos... La verdad es que si, mi auxilio sono desesperado, y es porque lo estamos. Hace 15 dás venimos luchando con este trabajo y no logramos sacarlo. El tema es que tenemos que entregarlo el martes a mas tardar.
Seguiremos luchando y si necesito de ustedes volvere a consultarles!! Muchissimas gracias de nevo!
Responder Con Cita
  #6  
Antiguo 08-08-2010
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Como decía Queen....another one bites the dust!!!...En fin bien por Delfos y los demás..mal por el usuario ya saben por qué---
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #7  
Antiguo 08-08-2010
maugescully maugescully is offline
Registrado
 
Registrado: ago 2010
Posts: 8
Poder: 0
maugescully Va por buen camino
Cita:
Empezado por AzidRain Ver Mensaje
...mal por el usuario ya saben por qué---
No entendí!!! Ojalá no sea una agresión hacia mí...

Última edición por maugescully fecha: 08-08-2010 a las 03:00:51.
Responder Con Cita
  #8  
Antiguo 08-08-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Cita:
Empezado por maugescully Ver Mensaje
No entendí!!! Ojalá no sea una agresión hacia mí...
Lo es y directa, no hay que ser muy entendedor y no se necesitan muchas palabras para entenderlo.
Lo curioso es que lo hace quien inicio ESTO.
Lo que te han tratado de decir, los que si te han ayudado es que trates de hacer las cosas por tu cuenta, poco a poco, que no te ayudan dándote todo.
Sigue intentando, hay personas que te ayudaran.
Saludos
__________________
Siempre Novato

Última edición por Caral fecha: 08-08-2010 a las 03:47:27.
Responder Con Cita
  #9  
Antiguo 08-08-2010
maugescully maugescully is offline
Registrado
 
Registrado: ago 2010
Posts: 8
Poder: 0
maugescully Va por buen camino
Se que me agrede, y tambien se que no me ayudan haciendome el ejercicio, y por eso no pedí que me lo hicieran, solo algunos consejos, que no puedo pedir a quien corresponde (o sea quien dicta el curso).
Quien me quiera ayudar que lo haga, no obligo a nadie, y se lo agradeseré muchisimo como ya lo hice, y quien no, que ocupe su tiempo mejor... GRACIAS!
Responder Con Cita
  #10  
Antiguo 08-08-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Creo que ya te han dado pinceladas e ideas concretas.
Lo que creo es que todavía no las captas, no las entiendes.
Me parece, muy personalmente, que deberías de extraer lo que te han explicado y replantear el o los problemas que tienes y no entiendes.
Como dije, es mi percepción personal.
Yo te ayudaría con gusto, pero sinceramente no he seguido mucho el hilo y no entiendo bien de que se trata tu problema.
Saludos
Edito:
Creo conocer a AzidRain, estoy seguro que aveces hacemos comentarios y posteriormente nos convertimos en amigos y maestros.
No creo que debas tomar el comentario a mal, tomalo como una broma, estoy seguro que ganaras mas y que AzidRain asi lo habra hecho ver.
Yo solo le muestro a mi amigo AzidRain que aveces nos equivocamos todos, incluyéndome.
__________________
Siempre Novato

Última edición por Caral fecha: 08-08-2010 a las 04:21:10.
Responder Con Cita
  #11  
Antiguo 08-08-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Aqui hay informacion de archivos text.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #12  
Antiguo 08-08-2010
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
Cita:
Empezado por maugescully Ver Mensaje
Me saltan los siguientes errores:
[Error] Unit2.pas(52): Incompatible types: 'Alumno' and 'ShortString'
[Error] Unit2.pas(53): Incompatible types: 'Alumno' and 'ShortString'
Bueno, un poco tarde, pero...

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:

Código Delphi [-]
var Archi: file of Alumno;
...
Write(Archi, Alumno); //Bien
Write(Archi, Alumno.Nombre); //Mal, nombre es un string[20], no un Alumno.

var Archi: TextFile;
...
Wirte(Archi, Alumno); //Mal. Es un archivo de texto y Alumno no es texto.
Write(Archi, Alumno.Nombre); //Bien
Write(Archi, Alumno.DNI); //Mal. DNI es un Integer, y tu archivo es de strings.

Cita:
Empezado por maugescully Ver Mensaje
[Error] Unit2.pas(53): Illegal type in Write/Writeln statement
[Error] Unit2.pas(54): Illegal type in Write/Writeln statement
El Writeln sólo funciona con TextFile, con un archivo binario (como "file of Alumno") no tiene ningún sentido escribir "una linea" (que es la diferencia entre un Write y un Writeln).

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.
Responder Con Cita
  #13  
Antiguo 08-08-2010
maugescully maugescully is offline
Registrado
 
Registrado: ago 2010
Posts: 8
Poder: 0
maugescully Va por buen camino
Muchas Gracias A Los Dos Por Su Ayuda!
Responder Con Cita
  #14  
Antiguo 08-08-2010
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
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||
Responder Con Cita
  #15  
Antiguo 09-08-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
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:
Código Delphi [-]
var
BD: TextFile;
begin
  AssignFile( BD, ExtractFilePath( Application.ExeName ) + 'prueba.txt' );
  Rewrite( BD );
  WriteLn( BD, 'Esto es el contenido del archivo de texto.' );
  CloseFile( BD );
Creamos una variable tipo TextFile, asignamos el file, escribimos el texto y lo guardamos, simple.

Para traer los datos:
Código Delphi [-]
var BD: TextFile;
    sLinea: String;
begin
  AssignFile( BD, ExtractFilePath( Application.ExeName ) + 'prueba.txt' );
  Reset( BD );
  while not Eof( BD ) do
  begin
  ReadLn( BD, sLinea );
  Memo1.Lines.Add( sLinea );
  end;
  CloseFile( BD );
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.
Responder Con Cita
  #16  
Antiguo 09-08-2010
maugescully maugescully is offline
Registrado
 
Registrado: ago 2010
Posts: 8
Poder: 0
maugescully Va por buen camino
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
Responder Con Cita
  #17  
Antiguo 09-08-2010
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
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||
Responder Con Cita
  #18  
Antiguo 10-08-2010
maugescully maugescully is offline
Registrado
 
Registrado: ago 2010
Posts: 8
Poder: 0
maugescully Va por buen camino
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!!
Responder Con Cita
  #19  
Antiguo 10-08-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No entiendo nada de nada.
Es mas, nadaaaaaaaa.
No entiendo como es posible complicarse la vida tanto para hacer un programa que inserte, modifique, vea, busque y todo lo demas de un archivo text.
Como dije: No entiendo nada.
Me ayudais a enterder?, a ver si aprendo algo nuevo.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #20  
Antiguo 10-08-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Ahora pensando un poco:
Esto es una tarea, por eso es que se necesita complicarse tanto la vida creando Clases y esas cosas?.
Es que así lo pide el Maisstro?.
Saludos
PD: Esto me hace acordar al Viejo codigo de C en el que se debía declarar todo.
Por eso lo odio y nunca pude entenderlo jejejee.
__________________
Siempre Novato
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 21:30:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi