• Publicidad

Llenando un Vector de Perl en C

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Llenando un Vector de Perl en C

Notapor merovingo » 2007-01-22 17:26 @768

Hola, estoy usando una expresión como:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
@vecfile = <FD>;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Para leer un archivo y ponérselo a un vector, pero quiero hacer que esto sea más óptimo, quiero leer el archivo desde C y pasarle los datos a un vector Perl.
Mi pregunta es: ¿Como gestiono un vector Perl desde C?
Si conocen una forma de hacer estos guardados eficientemente (lo mas rápido posible) estoy abierto a nuevas ideas.
Agradezco de antemano su colaboración.
merovingo
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2007-01-22 17:09 @756

Publicidad

Notapor Perl user » 2007-01-22 17:43 @779

Mira... al igual que mi post anterior...

Esto te llevará a leer guías sobre la interfaz que quieras utilizar. Desde XS, Inline y otros.

El aspecto es sencillo, tienes estructuras internamente que representan cada tipo (incluso jerarquías) que utilizas en Perl. Lo único que haces alojar un objeto del tipo que requieres, e implementar las operaciones de tu estructura, en tu caso es un simple array (un apuntador que podrá crecer con calloc cada que lo requieres).

Sin embargo... no creo que necesites implementar eso nuevamente... si lo que quieres es leer un archivo grande mediante un array por qué no hacerlo con Tie::File? O en su defecto, leer línea a línea y procesarla y no tener todo en memoria.

Saludos,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Notapor explorer » 2007-01-22 17:55 @788

Como estamos en el foro de Experto, te diré que se puede usar C desde Perl con Inline::C o escribiendo una librería con XS. Desde luego es muchísimo más cómodo usar Inline::C. Aquí tienes un ejemplo de cómo pasar un hash a una función en C.

Otra opción es usar PDL, que tiene rutinas compiladas para guardar y leer datos numéricos.

Por ejemplo, ya que muestras que los datos los lees de un fichero, una función como rcols() del módulo PDL::IO::Misc permite leer ficheros de datos encolumnados y guardarlos en piddles.

Si los datos los tienes, en lugar de en ASCII, en binario, lo mejor es usar mapfraw y compañía, del módulo PDL::IO::FastRaw. En este foro tienes un tutorial que los usa. Igual que antes, el resultado es un piddle, pero en una línea los pasa luego a un array normal y corriente.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor merovingo » 2007-01-22 18:01 @792

Nuevamente gracias; el problema no es de memoria, cuento con un grid de servidores de alto desempenyo, estoy luchando a bajar milisegundo como sea posible por que la lectura esta dentro de un ciclo grande y que se llama varias veces.
Donde podria aprender a implementar las operaciones con la estructura que tengo usando C dentro de Perl
merovingo
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2007-01-22 17:09 @756

Notapor merovingo » 2007-01-22 18:04 @794

Gracias explorer, me das buenas ideas... me pondre a probar y medir
merovingo
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2007-01-22 17:09 @756


Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado