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
|
En vez de un TXT, ¿no te iria bien utilizar un INI para cargar una linea determinada del archivo de texto?
|
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. |
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
|
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; 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; Código:
procedure CargaListaAnimales; |
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
|
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. |
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 |
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); Código:
procedure CargaListaAnimales; |
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 |
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 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 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. |
y para saber cuantas lineas tiene una memo
|
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?
|
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 |
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. |
La franja horaria es GMT +2. Ahora son las 00:46:13. |
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