• Miércoles 20 de Noviembre de 2024, 18:43

Autor Tema:  Como Asignar Numeros A Cadenas De Texto¿?  (Leído 1448 veces)

jesusfd

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Como Asignar Numeros A Cadenas De Texto¿?
« en: Jueves 16 de Diciembre de 2004, 20:21 »
0
Necesito asignar un número a cada mensaje de un archivo los mensajes se separan por líneas en blanco, y no se como hacerlo.....
Luego a partir del numero dado podré mostrar el mensaje en pantalla, borrarlo,.... pero no tengo ni idea de como podría hacer eso

nota: no se puede escribir dicho numero en el archivo de mensajes!

Como lo puedo resolver??

GRACIAS!!

-SB-

  • Miembro activo
  • **
  • Mensajes: 60
    • Ver Perfil
Re: Como Asignar Numeros A Cadenas De Texto¿?
« Respuesta #1 en: Jueves 16 de Diciembre de 2004, 21:53 »
0
Hola!

Puedes leer todo el archivo en una tabla, guardando en cada posicion, la frase. Automaticamente cada frase estara asi asignada a una posicion, es decir un numero.. Solucion sencilla pero con inconvenientes como estos:

- Tienes que establecer un maximo de frases (la tabla es una estructura estatica).
- Podrias usar otra variable para saber cuantas hay en la tabla si no sabes de antemano de cuantas hay en el archivo.
- Podrias tambien primero contarlas y crear una tabla en funcion de la cantidad de frases...

O

Puedes crear una lista dinamica y en cada nodo guardar un identificador para la frase, la susodicha frase, y un puntero al siguiente nodo... Inconvenientes:

- Perdemos eficiencia respecto a la otra solucion, no podemos acceder directamente a la que queremos sin recorrer otros nodos.


Espero q te sirva,

Saludos!

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Como Asignar Numeros A Cadenas De Texto¿?
« Respuesta #2 en: Viernes 17 de Diciembre de 2004, 06:08 »
0
La idea de la lista simple es buena, claro que mejor si es programada orientada a objetos y mejor si usas algo que ya esté hecho, vamos que debe haber algún objeto que trabaje con listas de cadenas y las pueda leer de un archivo de texto plano  ;)

La idea es tener una lista estática de referencias a los objetos cadena. La lista tendría que tener un tamaño razonable, no exagerar pero que cubra un buen porcentaje de casos, cuando se necesite una lista más grande simplemente primero reservamos memoria para otra lista estática más grande y copiamos EN BLOQUE las referencias de memoria (no las cadena) a la lista extendida. Luego liberamos la memoria de la lista chica.

Los identificadores en realidad serían la posicion que ocupe la refenrencia a la cadena en la lista de referencias a cadenas. Así si quieres borrar de la 5 a la 9 simplemente primero liberas las cadenas referenciadas de las posiciones 5 a 9 y luego copias en bloque las referencias de la 10 para arriba sobreescribiendo las referencias de memoria a las cadenas. La 10 terminaría siendo la 5 y así sucesivamente. Para insertar primero creas tu objeto cadena y luego desplazas la lista de referencias a cadenas (copias en bloque la lista de referencias)  haciendo un lugar para la nueva referencia. Si necesitas más espacio: reservar una lista más grande de referencias, copiar y luego liberar la que quedo chica.

Para ordenar simplemente ordenamos las referencias a los objetos cadena, todo eso dentro de un objeto como "CMiListaCadenas".

Ventajas:

+ Es mucho más simple de implementar que listas.
+ El acceso al elemento "n" es directo.
+ La administración de memoria dinámica no es complicada.

Desventajas:

+ No aplicable a listas gigantes (millones de elementos), hasta 10000 líneas es razonable (y definitivamente, dependiendo de lo que estés haciendo, ya te darás cuenta si esto es suficiente o es poco) ya que al insertar una cadena o borrar otra sólo moverías en memoria un máximo 40KB de datos con 10000 líneas lo que no es nada considerando lo que se mueve al poner una imagen en pantalla.

+ Si el número mínimo aceptable de inserciones y eliminaciones de nodos va por cientos de miles por segundo no es recomendable, depende de lo que estés haciendo. Hay que ver si al hacer "click" el usuario causa que se inserten y borren elementos por millones, por miles o sólo algunos cuantos.