Delphi - Arrays dinamicos en delphi

 
Vista:

Arrays dinamicos en delphi

Publicado por mingo (4 intervenciones) el 07/05/2003 12:54:54
Sabe alguien si hay alguna forma de crear arrays dinamicos en delphi.

Me podria decir alguien como comparar el caracter 'ñ'.

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Arrays dinamicos en delphi

Publicado por beosman (163 intervenciones) el 07/05/2003 18:30:25
Para crear arrays dinámicos en Delphi hay una función que es SetLength(). En principio es para hacer cadenas más grandes (de caracteres) pero también vale para los arrays. Un ejemplo sería así:

var a: array of Integer; // no le pones el rango porque es dinámico

SetLength(a,25); // el array ahora tiene un tamaño de 25 enteros
a[15] := 32; // asignación como un array normal
b := a[12]; // lectura como un array normal (b de tipo entero)

El array puede ser del tipo que quieras sin poner el rango. Luego con la función SetLength le asignas el tamaño. Para quitarle memoria sólo tienes que poner SetLength con un tamaño de array menor que el que ya tiene. Tienes que tener cuidado con el error de fuera de rango (cuando te pasas del rango del array) que ahora no te da error el compilador, sólo cuando lo ejecutas ya que es dinámico.

Lo de la ñ no te entiendo ¿comparar como?.

Bueno, espero que esto te sirva de ayuda.

Un saludo. Diego -> chairman
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Comparacion con la letra ñ

Publicado por mingo (1 intervención) el 07/05/2003 19:35:06
Tengo un TEdit (entrada) el cual toma una cadena de entrada, luego comparo cada caracter de dicha cadena con los elementos del array letras, pero si mi cadena de entrada es 'Ñ' me dice que no esta en el array.

entrada: TEdit;
letras: array[0..2] of char = ('A','B','Ñ');
if (UpCase(entrada.Text[i]) = letras[j]) then
....

Ejemplo:
entrada = 'ña';
if (UpCase(entrada.Text[1]) = letras[2]) then

La respuesta que me da es que no son iguales, ¿porque al comparar y ser los dos elementos la 'Ñ' no me la toma?

Gracias beosman por tu respuesta y por el ejemplo siempre resulta mas facil ver las cosas con ellos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Comparacion con la letra ñ

Publicado por Diego Romero (636 intervenciones) el 07/05/2003 20:59:32
Bueno según tu ejemplo Letras[2] es igual a 'B' y no a 'Ñ'.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Comparacion con la letra ñ

Publicado por mingo (4 intervenciones) el 08/05/2003 10:47:16
Tengo un TEdit (entrada) el cual toma una cadena de entrada, luego comparo cada caracter de dicha cadena con los elementos del array letras, pero si mi cadena de entrada es 'Ñ' me dice
que no esta en el array.

entrada: TEdit;
letras: array[0..2] of char = ('A','B','Ñ');
if (UpCase(entrada.Text[i]) = letras[j]) then
....

Cuando ejecuto paso a paso y veo el valor que toma cada variable en ese momento, me da:
entrada.Text[i] = 'Ñ'
letras[j] = 'Ñ'
las dos son 'Ñ' ¿porque me dice que no son iguales?.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Comparacion con la letra ñ

Publicado por Diego Romero (636 intervenciones) el 08/05/2003 15:13:59
Si vuelves a mirar el ejemplo que escribiste en el mensaje anterior verás que pones
entrada = 'ña';
if (UpCase(entrada.Text[1]) = letras[2]) then
entrada.Text[1] es igual a 'ñ' y lestras[2] es igual a 'B' por tanto no son iguales entre sí.
De todas maneras he hecho una prueba solo para estar seguro y a mi siempre me da que 'Ñ' es igual a 'Ñ', tu problema debe de estar en otra parte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Comparacion con la letra ñ

Publicado por Ernesto De Spirito (706 intervenciones) el 09/05/2003 00:35:27
Diego:

letras[2] no es 'B', sino 'Ñ'. Fíjate que el arreglo tiene base cero:
letras: array[0..2] of char = ('A','B','Ñ');

Mingo:

El problema es que la función UpCase no es sensible a los caracteres internacionales, y sólo convierte los caracteres en el rango 'a'..'z' (ASCII 97 a 122), a 'A'..'Z' (ASCII 65 a 90). La ñ minúscula no está en el rango 'a'..'z' (caracter especial, ASCII 164) y por lo tanto UpCase('ñ') = 'ñ'. Usa la función AnsiUpperCase pasar un string a mayúsculas, teniendo en cuenta los caracteres internacionales:

const
letras: array[0..2] of char = ('A','B','Ñ');
var
s: string
.....
begin
.....
sEntrada = AnsiUpperCase(Entrada.Text);
.....
if (UpCase(sEntrada[i]) = letras[j]) then
.....

Espero que me hayas entendido.

Ernesto De Spirito
http://www.latiumsoftware.com/es/index.php
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Comparacion con la letra ñ

Publicado por mingo (4 intervenciones) el 12/05/2003 10:07:16
Gracias Diego ahora si me toma la Ñ bien.

Por cierto:
letras[2] si es 'Ñ', puesto que la 'A' es letras[0], ya que lo e probado como decia en el anterior mensaje paso a paso y viendo el valor que
tomaba la variable en cada momento y me lo tomaba asi.

Cuando dices que la función UpCase no es sensible a los caracteres internacionales, ¿eso quiere decir que no hay forma de comparar ni
mostrar por pantalla todos los caracteres hasta el 255?, lo digo porque estuve intentando mostrar el caracter 254 que es un cuadrado negro
pero no lo cogia asi que estuve mirando el simbolo o valor que salia para los distintos caracteres (>128) y ninguno coincidia con la tabla
extendida de los caracteres ASCII.

Gracias de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar