Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-07-2003
migueilichenco migueilichenco is offline
Miembro
 
Registrado: may 2003
Ubicación: desconocido
Posts: 61
Poder: 21
migueilichenco Va por buen camino
problema de linea memo

hola a todos bueno escribo este problem que tengo en delphi es el siguiente yo quiero poder tener un texto.txt del cual colocar una lista de cadenas para luego poder llamrlas desde mi programa con un memo una por una segun algun orden, no quiero toda la lista sino una que yo elija de la lista no se si es por el numero o como agradeceria su respuesta
__________________
chenko----
Responder Con Cita
  #2  
Antiguo 30-07-2003
German C. C. German C. C. is offline
Miembro
 
Registrado: jul 2003
Posts: 11
Poder: 0
German C. C. Va por buen camino
Question

En vez de un TXT, ¿no te iria bien utilizar un INI para cargar una linea determinada del archivo de texto?
Responder Con Cita
  #3  
Antiguo 30-07-2003
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
No querría resultar insolente pero..... yo no he entendido nada de la pregunta..... ¿no crees que algún signo de puntuación ayudaría?
Piensa que si los foristas no te entienden, difícilmente te podrán ayudar.
__________________
E pur si muove
Responder Con Cita
  #4  
Antiguo 30-07-2003
migueilichenco migueilichenco is offline
Miembro
 
Registrado: may 2003
Ubicación: desconocido
Posts: 61
Poder: 21
migueilichenco Va por buen camino
Unhappy

bueno disculpen mi faltas de escritura, pero bueno como decia en mi posta anterior, no se si sabran como hacer para utilizar un txt, o un ini para almacenar cadenas y como puedo hacer para llamarlas desde mi programa una por una, a un memo segun un numero o o algo asi agradeceria su ayuda
__________________
chenko----
Responder Con Cita
  #5  
Antiguo 30-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Hola:

Como te han comentado más arriba, puede almacenarlas en un archivo .INI (da igual la extensión, puedes usar la que quieras, el caso es que uses un objeto TIniFile para leerlo), que permite almacenar los valores de la forma:

[ANIMALES]
1=Perro
2=Gato
3=Elefante
...

Puedes usar el método ReadString del objeto TIniFile:

Código:
function ObtieneNombreAnimal (Numero: Integer) : String;
begin
  with TIniFile.Create ('C:\MiArchivo.ini') do
  try
    result := ReadString ('ANIMALES', IntToStr(Numero), '');
  finally
    Free;
  end;
end;
Con esta opción accedes al archivo en disco cada vez que quieres obtener un valor.

Otra opción es que recuperes todos los valores de una sección (dentro del archivo .INI, la sección viene indicada entre corchetes []), mediante ReadSection del objeto TIniFile, lo cual copia los valores en una lista, del tipo TStrings o descendiente; de esta forma cargas los valores en memoria y su acceso es más rápido; luego puedes consultar esos valores accediendo a la propiedad VALUES de dicha lista:

Código:
ListaAnimales : TStringList;

// este procedimiento lo llamas al principio para cargar la lista
// acuérdate al cerrar el programa de liberarla: ListaAnimales.Free;
procedure CargaListaAnimales;
begin 
  if ListaAnimales = nil then
    ListaAnimales := TStringList.Create;
  with TIniFile.Create ('C:\MiArchivo.ini') do
  try
    ReadSection ('ANIMALES', ListaAnimales);
  finally
    Free;
  end;
end;

function ObtieneNombreAnimal (Numero: Integer) : String;
begin
  result := ListaAnimales.Values[IntToStr(Numero)];
end;
En este último ejemplo, hemos declarado una variable ListaAnimales del tipo TStringList. También hubieras podido usar la propiedad Items de un TListBox y cargar en dicho TListBox las cadenas, quizás sea una forma mejor que utilizar un TMemo. Sería así:

Código:
procedure CargaListaAnimales;
begin 
  with TIniFile.Create ('C:\MiArchivo.ini') do
  try
    ReadSection ('ANIMALES', ListBox1.Items);
  finally
    Free;
  end;
end;

function ObtieneNombreAnimal (Numero: Integer) : String;
begin
  result := ListBox1.Items.Values[IntToStr(Numero)];
end;
__________________
Guía de Estilo

Última edición por andres1569 fecha: 30-07-2003 a las 23:55:12.
Responder Con Cita
  #6  
Antiguo 30-07-2003
migueilichenco migueilichenco is offline
Miembro
 
Registrado: may 2003
Ubicación: desconocido
Posts: 61
Poder: 21
migueilichenco Va por buen camino
Question

bueno tras hacer lo que dise el codigo me sale el siguiente error, que no esta declarado Tinifileni, ni reacsection, ni result que puedo hacer, les agradeceria si me mandan un codigo mas especifico gracias
__________________
chenko----
Responder Con Cita
  #7  
Antiguo 30-07-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Hola:

Creo que el código es bastante específico para lo que preguntas, pero faltó decirte que para utilizar el objeto TIniFile debes incluir en el uses la unit IniFiles (esta información la da también la ayuda de Delphi, en la ayuda de cada clase aparece la unit donde se declara). No es reacsection sino ReadSection, ésto venía bien en el código que te puse.

Result: ahí metí la pata porque no pinta nada esa variable dentro de un procedure, y además el método ReadSection no devuelve ningún valor. Lo correcto es:

ReadSection ('ANIMALES', ListaAnimales); // a secas

y

ReadSection ('ANIMALES', ListBox1.Items); // a secas

Mira a ver si ahora te funciona. Voy a corregirlo en el mensaje anterior para que quede más claro.
__________________
Guía de Estilo
Responder Con Cita
  #8  
Antiguo 31-07-2003
migueilichenco migueilichenco is offline
Miembro
 
Registrado: may 2003
Ubicación: desconocido
Posts: 61
Poder: 21
migueilichenco Va por buen camino
Unhappy

bueno este es el codigo
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IniFiles, StdCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
ListaAnimales : TStringList;
implementation


{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
procedure CargaListaAnimales;
begin
with TIniFile.Create ('C:\archivo.ini') do
try
ReadSection ('ANIMALES', ListBox1.Items);
finally
Free;
end;
end;


function ObtieneNombreAnimal (Numero: Integer) : String;
begin
result := ListBox1.Items.Values[IntToStr(1)];
end;

end.
pero que esta mal por que me sale begin expectante de un end y ya trate de ponerle y nada agradeceria su comprension
__________________
chenko----
Responder Con Cita
  #9  
Antiguo 31-07-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Tu código:

procedure TForm1.Button1Click(Sender: TObject);
procedure CargaListaAnimales;
begin
with TIniFile.Create ('C:\archivo.ini') do
try
ReadSection ('ANIMALES', ListBox1.Items);
finally
Free;
end;
end;

function ObtieneNombreAnimal (Numero: Integer) : String;


Código indentado:

Código:
procedure TForm1.Button1Click(Sender: TObject);
  procedure CargaListaAnimales;
  begin
    with TIniFile.Create ('C:\archivo.ini') do
    try
      ReadSection ('ANIMALES', ListBox1.Items);
    finally
      Free;
    end;
  end;

function ObtieneNombreAnimal (Numero: Integer) : String;
Y aquí se ve más claro que falta el end del procedimiento Button1Click, suponiendo, claro, que la intención realmente era la de poner un pprocedimiento anidado. Quizá más bien querías poner:

Código:
procedure CargaListaAnimales;
begin
  with TIniFile.Create ('C:\archivo.ini') do
  try
    ReadSection ('ANIMALES', ListBox1.Items);
  finally
    Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  CargaListaAnimales;
end;
// Saludos
Responder Con Cita
  #10  
Antiguo 31-07-2003
migueilichenco migueilichenco is offline
Miembro
 
Registrado: may 2003
Ubicación: desconocido
Posts: 61
Poder: 21
migueilichenco Va por buen camino
Unhappy

bueno tras colocar el codigo sale una exepcion asie sta el codigo

var
Form1: TForm1;
ListaAnimales : TStringList;
implementation
function ObtieneNombreAnimal (Numero: Integer) : String;
begin
result := ListaAnimales.Values[IntToStr(Numero)];
end;
{$R *.dfm}

procedure TForm1.CargaListaAnimales;
begin
if ListaAnimales = nil then
ListaAnimales := TStringList.Create;
with TIniFile.Create ('C:\may.ini') do
try
ReadSection ('ANIMALES', ListaAnimales);
finally
Free;
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.lines.text:=(ObtieneNombreAnimal(1))
end;

En si lo que yo deseo hacer es llamar digamoslo asi con un numero un memo alojada en una cadena digamos si yo digo 1 bine la palabra hola

1 hola
2 como estas

y asi susesivamente, aunque no es nesesario que sean numero pero que ahiga forma de llamar a cada cadena
__________________
chenko----
Responder Con Cita
  #11  
Antiguo 31-07-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Veo algunos problemas:

1. Tu código no está indentado por lo que es difícil leerlo. Por favor utiliza la etiqueta [ code ] para que preserve los espacios:

[ code ]
Código:
Linea
  Linea indentada
[ /code ]

Aquí la etiqueta tiene espacios alrededor para que se vea pero debes ponerla sin espacios.

Usando la etiqueta, los debidos espacios y líneas en blanco tu código queda así:

Código:
var
  Form1: TForm1;
  ListaAnimales : TStringList;

implementation

function ObtieneNombreAnimal (Numero: Integer) : String;
begin
  result := ListaAnimales.Values[IntToStr(Numero)];
end;

{$R *.dfm}

procedure TForm1.CargaListaAnimales;
begin
  if ListaAnimales = nil then
    ListaAnimales := TStringList.Create;

  with TIniFile.Create ('C:\may.ini') do
    try
      ReadSection ('ANIMALES', ListaAnimales);
    finally
      Free;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  memo1.lines.text:=(ObtieneNombreAnimal(1))
end;
2. No indicas en qué momento sale la excepción ni cuál es ésta. El problema podría ser que llamas a Button1Click antes de CargaListaAnimales lo que implicaría que ListaAnimales aún no ha sido creada.

3. En Button1Click asignas una cadena a la propiedad Text del memo. La propiedad Text reune en conjunto todas las líneas del memo y no estoy seguro de que eso es lo que desees. Quizá prefieras algo como

memo1.lines.add(ObtieneNombreAnimal(1));

4. En general no entiendo muy bien qué es lo que pretendes pero pareciera que deseas asignar una clave (número u otra cosa) a cada cadena para luego poder desplegar la cadena refiriéndote a ella mediante dicha clave. Esto podría hacerse mejor utilizando alguna base de datos. Puedes usar ClientDataSets sin conectarlos a ninguna base "real" y te funciona bien.

// Saludos

pd: Por favor no me tomes a mal lo del código. Es sólo que cuesta trabajo leer código que no está indentado.
Responder Con Cita
  #12  
Antiguo 31-07-2003
migueilichenco migueilichenco is offline
Miembro
 
Registrado: may 2003
Ubicación: desconocido
Posts: 61
Poder: 21
migueilichenco Va por buen camino
y para saber cuantas lineas tiene una memo
__________________
chenko----
Responder Con Cita
  #13  
Antiguo 31-07-2003
migueilichenco migueilichenco is offline
Miembro
 
Registrado: may 2003
Ubicación: desconocido
Posts: 61
Poder: 21
migueilichenco Va por buen camino
Smile

bueno en si lo que estoy haciendo es una especie de Iabot mejor dicho un bot para charlar pero todo lo que les pido es pra que se le pueda enseñar al bot y que este lo almacene en un ini o un txt es decir si tu escribes hola y en su inio txt la cdana hola tiene hola que tal entonces esa cadena se carga al memo entienden?
__________________
chenko----
Responder Con Cita
  #14  
Antiguo 01-08-2003
migueilichenco migueilichenco is offline
Miembro
 
Registrado: may 2003
Ubicación: desconocido
Posts: 61
Poder: 21
migueilichenco Va por buen camino
Question

hasta ahora creo que esta bien pero ahora se me presenta la siguiente dificultad

digamos que tengo un memo asi
----------------
1=niño
2=perro
3=casa
9=malo
4=avion
8=amigo
----------------

y quiero que si yo pongo el numero 9 en un edit y de clic a un button entonces aparesca en otro memo la linea "malo" o "9=malo" espero averme dejado entender gracias
__________________
chenko----
Responder Con Cita
  #15  
Antiguo 01-08-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Hola:

Supongamos que en el Edit1 alguien escribe el número 9. Para añadir al segundo Memo la línea del Memo original relacionada, bastaría con el siguiente código:

MemoDestino.Lines.Add (MemoOrigen.Lines.Values[Edit1.Text]);

¿Hay algo que no entiendas de este código?. La clave está en la propiedad vectorial VALUES, a la que le pasas el primer miembro de la igualdad y busca en la lista alguna cadena donde aparezca, y te devuelve el segundo miembro de la igualdad. Si tenemos 9=malo, entonces Values['9'] devuelve malo, que es lo que añadimos al segundo Memo.
__________________
Guía de Estilo
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 15:14:43.


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