Copiar arrays de strings

Started by FreeYourMind, December 08, 2010, 07:43:10 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

FreeYourMind

Hola, intento copiar un array de strings a otro nuevo, pero este se queda null, no se como copiarlo, os pongo el código que pongo (caso 1 y 2)

Caso 1: El clon sigue vacio, el say dice '0'

PRIVATE
mis_frases[2] = "ola", "tonto", "doom!";
clon[2];

BEGIN

clon[2] = mis_frases[2];
say(clon[1]);


Caso 2: El clon sigue vacio, el say dice '0'

PRIVATE
string mis_frases[2] = "ola", "tonto", "doom!";
string clon[2];

BEGIN

clon[2] = mis_frases[2];
say(clon[1]);


Otra cosas,

1 - Imaginad, que tengo otro array llamado tus_frases[5], y segun un parametro de entrada (mio_o_tuyo) quiero que el clon sea una copia de uno
o de otro, pero claro, partiendo del principio que no se la dimension del array que quiero copiar (o sea, quiero que la dimensión del clon sea dinamica,
y se quede con la dimensión del array origen cuando creo el clon).

2 - Me gustaria tambien saber como referenciarlo usando un puntero en lugar de crear una copia nueva.

Gracias  ;)

Noivern

mmm en el says pones que muestre la posicion [1], pero lo que estas copiando es la posicion [2]. (No estoy muy seguro si con los string copias la data o solo referencias la data).
y para el resto:
1. Usar punteros para el tamaño de array dinamico.
2. Ni idea, tengo que leer sobre esto, Splinter hace tiempo puso un link muy bueno acerca de punteros (en ingles). Buscalo como manejo de punteros en bennu o algo asi, ojala el se pronuncie ya que no me acuerdo el nombre del hilo :P

FreeYourMind

Gracias.
Si me he fijado que estoy copiando el valor de la posición, pero queria copiar todo el array.

SplinterGU

como ya te respondieron, estas copiando el elemento 2 e imprimiendo el 1, no es logico.
si lo que queres es copiar el array entero, solo tenes que hacer lo siguiente (ambos arrays deben tener las mismas dimensiones, y el mismo tipo)

clon = mis_frases;

con respecto a los punteros, podes usar punteros a cualquier cosa, menos a strings... si queres punteros a datos de tipo cadena, usa char[] para guardar las strings.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

No funciona Splinter

PRIVATE
mis_frases[2] = "ola", "tonto", "doom!";
clon[2];

BEGIN

clon = mis_frases;


--> clon sigue null

SplinterGU

#5
parece que algo se rompio, porque estos test los habia hecho hace tiempo y funcionaban.

ahora vamos a ver que se rompe cuando arregle esto.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Solución temporal:

clon[0]=mis_frases[0];
clon[1]=mis_frases[1];
clon[2]=mis_frases[2];

O usar un bucle for ;D

Splinter: ¿habría algún problema en crear una lista enlazada usando nodos de este tipo?

type nodo
string texto;
nodo pointer ptr;
end
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

ya tengo localizado el tema, me suena que nunca funciono correctamente eso, por lo menos no con tipos basicos, deberia funcionar con structuras...

la cosa es que tengo que arreglar el tema de que una variable array referenciada sin [] apunta al primer elemento, tengo que quitar eso, salvo para asignarlos a punteros.

va a ser un lindo problema resolverlo, pero lo resolvere, no se cuando, porque se me acabo el feriado y hoy tuve un dia de salud patetico.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Quote from: Drumpi on December 09, 2010, 01:01:32 AM
Solución temporal:

clon[0]=mis_frases[0];
clon[1]=mis_frases[1];
clon[2]=mis_frases[2];

O usar un bucle for ;D

Splinter: ¿habría algún problema en crear una lista enlazada usando nodos de este tipo?

type nodo
string texto;
nodo pointer ptr;
end

Jjajjjajajaja, si soluciones o caminos hay muchos, precisamente si así lo quisiera hacer ni preguntaba xDDD

Windgate

type nodo
string texto;
nodo pointer ptr;
end


Probado por mí a lo bestia en el visor 3D y la memoria dinámica funciona 100% perfecta.

clon = mis_frases;

Hubiese apostado a que podía hacerse, pero la opción de copiar una a una tampoco cuesta demasiado :P
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

FreeYourMind

Si al final ni siquiera voy a copiar, porque no quiero crear tantos vectores en memoria, le pasare distintos valores al mismo array segundo if's y listo. Pero esto es un tema pendiente, y la copia no funciona, me imagino que usas una version antigua.

SplinterGU

Quote from: Windgate on December 09, 2010, 11:00:57 AM
type nodo
string texto;
nodo pointer ptr;
end


Probado por mí a lo bestia en el visor 3D y la memoria dinámica funciona 100% perfecta.

clon = mis_frases;

Hubiese apostado a que podía hacerse, pero la opción de copiar una a una tampoco cuesta demasiado :P

yo tambien, pero parece que no, creo que deberia funcionar con structs.

Quote from: FreeYourMind on December 09, 2010, 02:25:24 PM
Si al final ni siquiera voy a copiar, porque no quiero crear tantos vectores en memoria, le pasare distintos valores al mismo array segundo if's y listo. Pero esto es un tema pendiente, y la copia no funciona, me imagino que usas una version antigua.

no importa, igual tengo que darle soporte a eso, por lo que veo mas que un bug (algo que anda mal) parece ser una funcionalidad no implementada.

estoy en ello.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Cierto, las structs sin corchetes apuntan al primer elemento, eso es una feature existente desde DIV. Creo recordar que me sorprendión que Fenix fuera capaz de distinguir cuándo se quería copiar el primer elemento o el array completo perfectamente.

Si las strings se pueden usar con nodos en lugar de con punteros, problema resuelto, ya puedo seguir pensando en el editor de texto :D
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

creo que ya tengo la solucion, he tenido que tocar mucho, agregar una nueva funcion interna a nivel sysproc (dcb), con lo cual los nuevos dcb no seran ya compatibles con los viejos, sin embargo los viejos pueden correr en el nuevo runtime.

necesito gente que se ofrezca para hacer pruebas, asignaciones de arrays de todo tipo, asignar datos no array, probar con punteros a elementos, variables array de diferentes tipos, etc. tambien operaciones de incremento, operaciones +=, -=, /=, *=, etc.
hay que probarlo bien para darlo por bueno.

demas esta que debo decir que ya no se podra acceder al primer elemento de un array con solo poner su nombre, se tiene que hacer elemento[0] y a su address &elemento o &elemento[0], estaba mal realmente que se acceda sin el indice, sin embargo los dcb ya compilados con el viejo compilador funcionaran sin poner
  • .

    bueno, si alguien se ofrece me avisa, me dice que plataforma y le genero los ejecutables.

    gracias.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2