Ayuda con codigo delfis a java

Yusnier Acosta Fdez
27 de Enero del 2011
Comenzare por el principio…. Tengo la necesidad de leer un fichero binario con extensión “.oam”. Mi tarea consiste en importar ese fichero (que crea un software realizado en delfis para controlar observaciones meteorológicas), leerlo y pasar toda esa información a una base de datos para utilizarlo en otro sistema.

Yo cuento con todo el código delfis del programa que crea el fichero. Necesito que me ayuden a entender cómo funciona para poder pasarlo a java. Mando algunos trozos de códigos de lo que he entendido yo y posteriormente te mandare el código completo si es que pueden ayudarme.

Este es el código que escribe el fichero:

function Save_Data(dat_path: string): boolean;

var

F: file;

begin

try

AssignFile(F, dat_path);

Rewrite(F, 1);

BlockWrite(F, measur, SizeOf(measur));

BlockWrite(F, fix, SizeOf(fix));

BlockWrite(F, dat_a, SizeOf(dat_a));

CloseFile(F);

except

on EInOutError do

begin

case IOResult of

2: MessageDlg('El fichero de correcciones de datos no existe.', mtError, [mbOk], 0);

3: MessageDlg('No se encuentra el directorio del fichero de datos.', mtError, [mbOk], 0);

5: MessageDlg('Acceso denegado para abrir el fichero de datos.', mtError, [mbOk], 0);

32: MessageDlg('Error al abrir el fichero de datos.', mtError, [mbOk], 0);

end;

result := FALSE;

end;

end;

result := TRUE;

end;



Y este el que lo lee:



function Read_Data(dat_path: string): boolean;

var

F: file;

begin

try

AssignFile(F, dat_path);

Reset(F, 1);

BlockRead(F, measur, SizeOf(measur));

BlockRead(F, fix, SizeOf(fix));

BlockRead(F, dat_a, SizeOf(dat_a));

CloseFile(F);

except

on EInOutError do

begin

case IOResult of

2: MessageDlg('El fichero de datos no existe.', mtError, [mbOk], 0);

3: MessageDlg('No se encuentra el directorio del fichero de datos.', mtError, [mbOk], 0);

5: MessageDlg('Acceso denegado para abrir el fichero de datos.', mtError, [mbOk], 0);

32: MessageDlg('Error al abrir el fichero de datos.', mtError, [mbOk], 0);

end;

result := FALSE;

end;

end;

result := TRUE;

end;





las variables measure, fix y dat_a son:



measur: array[0..12, 0..3] of byte;

Arreglo bidimencional para controlar las mediciones realizadas. Cada subíndice del arreglo corresponde a una hora desde las 05 hasta las 19.

Valores que puede tomar la variable: measur

|----------- Estado de la observación:

| 0 - medición sin realizar por la hora

| 1 - medición no realizada por fenómeno atmosférico (Fenómenos)

| 2 - medición no realizada por otras causas (Nota)

| 3 - medición realizada

| |-------- Actinometro: 0 No Activo (FALSE)

| | 1 Activo (TRUE)

| | |----- Piranometro: 0 No Activo (FALSE)

| | | 1 Activo (TRUE)

| | | | ---- Balanzometro: 0 No Activo (FALSE)

| | | | 1 Activo (TRUE)

0 --> #, #, #, # Los subindices

| . corresponden a

< . los horarios

| . desde las 05

15 --> #, #, #, # hasta las 19





fix: fix_rec;

Factores de conversión de los instrumentos

fix_rec = record // Datos fijos para un día de observación

est_code: word; // Código de la estación INCLUIR PARA EL NUEVO REPROCESAMIENTO

mdate, // Fecha de la medición

fc_acti, // Factor de conversion del Actinometro

fc_pira, // Factor de conversion del Piranómetro

fc_balan: single; // Factor de conversion del Balanzómetro

end;





dat_a: act_array; // Arreglo con los datos de la medición (Iniciales, Lecturas y Resultados)

act_array = array[0..12] of act_rec;

act_rec = record // Estructura de los datos de una medición

hini, // Hora de inicio de la medición

hfin, // Hora final de la medición

ho, // Altura del sol

seno_ho, // Seno de la altura del sol

delta_tau, // Delta TAU

declina, // Declinación

solar_time: double; // Tiempo solar o tiempo real

tnubes, // Total de nubes

nbajas, // Total de nubes bajas

cu, // Tipo de nube - Cumulos

cb, // Tipo de nube - Cumulos Nimbos

sc, // Tipo de nube - Estratos Cumulos

st, // Tipo de nube - Estratos

ac, // Tipo de nube - Altos Cumulos

ae, // Tipo de nube - Altos Estratos

ns, // Tipo de nube - Nimbo Estratos

ci, // Tipo de nube - Cirros

cs, // Tipo de nube - Cirros Estratos

cc, // Tipo de nube - Cirros Cumulos

ccielo, // Color del cielo

// 0 - No se reporta

// 1 - Azul

// 2 - Azul Claro

// 3 - Blanquecino

dsolar, // Estado del disco solar

// 0 - Sol cuadrado

// 1 - Sol

// 2 - Sol con grado

// 3 - Sol cubierto (P rusa)

// 4 - Sol Obstruido (no natural)

visib, // Visibilidad

mhierba, // Madurez de la hierba

// 0 - Verde

// 1 - Amarilla

// 2 - Seca

hhierba: byte; // Humedad de la hierba

// 0 - Seca

// 1 - Humeda

// 2 - Anegada

taires, // Temperatura del aire seca

taireh, // Temperatura del aire humeda

tsuelo: single; // Temperatura del la superficie activa

tactin: lec_array; // Temperatura para ajuste del actinómetro

humed: byte; // Humedad Relativa del aire

ajacti, // Ajuste del cero - actinómetro

ajbalan, // Ajuste del cero - Balanzómetro

ajpira, // Ajuste del cero - Piranómetro

fc_temp: single; // Factor de conversion por temperatura del Actinómetro

fenom: byte; // Fenómenos atmosféricos

// 0: No hay

// 1: Rocio

// 2: Bruma

// 3: Niebla

// 4: Neblina

// 5: Humo

// 6: Chubascos

// 7: Lluvia

// 8: Tormenta con Precipitacion

// 9: Tormenta sin precipitacion

//note, // Notas

note: ShortString; // Notas

observ: obs_array; // Nombre del observador

num_obs: word; // Numero del Observador

// LECTURAS DE LOS INSTRUMENTOS

P_D1, // Piranómetro (D1)

B_B, // Balanzómetro (B)

B_BS, // Balanzómetro (B-S')

P_Q, // Piranómetro (Q)

P_RC, // Piranómetro (Rc)

P_D2, // Piranómetro (D2)

BV_B, // Velocidad del viento (B)

BV_BS: lec_array; // Velocidad del viento (B-S')

A_D1, // Actinómetro (D1)

A_B, // Actinómetro (B)

A_BS, // Actinómetro (B-S')

A_Q, // Actinómetro (Q)

A_RC, // Actinómetro (Rc)

A_D2: single; // Actinómetro (D2)

dn: dn_rec; // Correciones de los instrumentos

nr: nr_rec; // Resultados intermedios

opv: opv_rec; // Resultados del procesamiento

end;



Si me pudieran ayudar estaría muy agradecido….

Gracias de antemano.

Este es mi correo [email protected]


(default: none). Type: java.lang.String beauty_body. Value:

Comenzare por el principio…. Tengo la necesidad de leer un fichero binario con extensión “.oam”. Mi tarea consiste en importar ese fichero (que crea un software realizado en delfis para controlar observaciones meteorológicas), leerlo y pasar toda esa información a una base de datos para utilizarlo en otro sistema.

Yo cuento con todo el código delfis del programa que crea el fichero. Necesito que me ayuden a entender cómo funciona para poder pasarlo a java. Mando algunos trozos de códigos de lo que he entendido yo y posteriormente te mandare el código completo si es que pueden ayudarme.

Este es el código que escribe el fichero:

function Save_Data(dat_path: string): boolean;

var

F: file;

begin

try

AssignFile(F, dat_path);

Rewrite(F, 1);

BlockWrite(F, measur, SizeOf(measur));

BlockWrite(F, fix, SizeOf(fix));

BlockWrite(F, dat_a, SizeOf(dat_a));

CloseFile(F);

except

on EInOutError do

begin

case IOResult of

2: MessageDlg('El fichero de correcciones de datos no existe.', mtError, [mbOk], 0);

3: MessageDlg('No se encuentra el directorio del fichero de datos.', mtError, [mbOk], 0);

5: MessageDlg('Acceso denegado para abrir el fichero de datos.', mtError, [mbOk], 0);

32: MessageDlg('Error al abrir el fichero de datos.', mtError, [mbOk], 0);

end;

result := FALSE;

end;

end;

result := TRUE;

end;



Y este el que lo lee:



function Read_Data(dat_path: string): boolean;

var

F: file;

begin

try

AssignFile(F, dat_path);

Reset(F, 1);

BlockRead(F, measur, SizeOf(measur));

BlockRead(F, fix, SizeOf(fix));

BlockRead(F, dat_a, SizeOf(dat_a));

CloseFile(F);

except

on EInOutError do

begin

case IOResult of

2: MessageDlg('El fichero de datos no existe.', mtError, [mbOk], 0);

3: MessageDlg('No se encuentra el directorio del fichero de datos.', mtError, [mbOk], 0);

5: MessageDlg('Acceso denegado para abrir el fichero de datos.', mtError, [mbOk], 0);

32: MessageDlg('Error al abrir el fichero de datos.', mtError, [mbOk], 0);

end;

result := FALSE;

end;

end;

result := TRUE;

end;





las variables measure, fix y dat_a son:



measur: array[0..12, 0..3] of byte;

Arreglo bidimencional para controlar las mediciones realizadas. Cada subíndice del arreglo corresponde a una hora desde las 05 hasta las 19.

Valores que puede tomar la variable: measur

|----------- Estado de la observación:

| 0 - medición sin realizar por la hora

| 1 - medición no realizada por fenómeno atmosférico (Fenómenos)

| 2 - medición no realizada por otras causas (Nota)

| 3 - medición realizada

| |-------- Actinometro: 0 No Activo (FALSE)

| | 1 Activo (TRUE)

| | |----- Piranometro: 0 No Activo (FALSE)

| | | 1 Activo (TRUE)

| | | | ---- Balanzometro: 0 No Activo (FALSE)

| | | | 1 Activo (TRUE)

0 --> #, #, #, # Los subindices

| . corresponden a

< . los horarios

| . desde las 05

15 --> #, #, #, # hasta las 19





fix: fix_rec;

Factores de conversión de los instrumentos

fix_rec = record // Datos fijos para un día de observación

est_code: word; // Código de la estación INCLUIR PARA EL NUEVO REPROCESAMIENTO

mdate, // Fecha de la medición

fc_acti, // Factor de conversion del Actinometro

fc_pira, // Factor de conversion del Piranómetro

fc_balan: single; // Factor de conversion del Balanzómetro

end;





dat_a: act_array; // Arreglo con los datos de la medición (Iniciales, Lecturas y Resultados)

act_array = array[0..12] of act_rec;

act_rec = record // Estructura de los datos de una medición

hini, // Hora de inicio de la medición

hfin, // Hora final de la medición

ho, // Altura del sol

seno_ho, // Seno de la altura del sol

delta_tau, // Delta TAU

declina, // Declinación

solar_time: double; // Tiempo solar o tiempo real

tnubes, // Total de nubes

nbajas, // Total de nubes bajas

cu, // Tipo de nube - Cumulos

cb, // Tipo de nube - Cumulos Nimbos

sc, // Tipo de nube - Estratos Cumulos

st, // Tipo de nube - Estratos

ac, // Tipo de nube - Altos Cumulos

ae, // Tipo de nube - Altos Estratos

ns, // Tipo de nube - Nimbo Estratos

ci, // Tipo de nube - Cirros

cs, // Tipo de nube - Cirros Estratos

cc, // Tipo de nube - Cirros Cumulos

ccielo, // Color del cielo

// 0 - No se reporta

// 1 - Azul

// 2 - Azul Claro

// 3 - Blanquecino

dsolar, // Estado del disco solar

// 0 - Sol cuadrado

// 1 - Sol

// 2 - Sol con grado

// 3 - Sol cubierto (P rusa)

// 4 - Sol Obstruido (no natural)

visib, // Visibilidad

mhierba, // Madurez de la hierba

// 0 - Verde

// 1 - Amarilla

// 2 - Seca

hhierba: byte; // Humedad de la hierba

// 0 - Seca

// 1 - Humeda

// 2 - Anegada

taires, // Temperatura del aire seca

taireh, // Temperatura del aire humeda

tsuelo: single; // Temperatura del la superficie activa

tactin: lec_array; // Temperatura para ajuste del actinómetro

humed: byte; // Humedad Relativa del aire

ajacti, // Ajuste del cero - actinómetro

ajbalan, // Ajuste del cero - Balanzómetro

ajpira, // Ajuste del cero - Piranómetro

fc_temp: single; // Factor de conversion por temperatura del Actinómetro

fenom: byte; // Fenómenos atmosféricos

// 0: No hay

// 1: Rocio

// 2: Bruma

// 3: Niebla

// 4: Neblina

// 5: Humo

// 6: Chubascos

// 7: Lluvia

// 8: Tormenta con Precipitacion

// 9: Tormenta sin precipitacion

//note, // Notas

note: ShortString; // Notas

observ: obs_array; // Nombre del observador

num_obs: word; // Numero del Observador

// LECTURAS DE LOS INSTRUMENTOS

P_D1, // Piranómetro (D1)

B_B, // Balanzómetro (B)

B_BS, // Balanzómetro (B-S')

P_Q, // Piranómetro (Q)

P_RC, // Piranómetro (Rc)

P_D2, // Piranómetro (D2)

BV_B, // Velocidad del viento (B)

BV_BS: lec_array; // Velocidad del viento (B-S')

A_D1, // Actinómetro (D1)

A_B, // Actinómetro (B)

A_BS, // Actinómetro (B-S')

A_Q, // Actinómetro (Q)

A_RC, // Actinómetro (Rc)

A_D2: single; // Actinómetro (D2)

dn: dn_rec; // Correciones de los instrumentos

nr: nr_rec; // Resultados intermedios

opv: opv_rec; // Resultados del procesamiento

end;



Si me pudieran ayudar estaría muy agradecido….

Gracias de antemano.

Este es mi correo [email protected]

damián matteucci
27 de Enero del 2011
Che man, estas un poco confundido... tendrías que publicar el código en el foro correspondiente al lenguaje en el que esta.

Yusnier Acosta Fdez
28 de Enero del 2011
Ok, lo publicare donde va…pero en realidad lo que visco es una persona se sepa de java que me ayude a realizarlo en el mismo….
Saludos y gracias por tu consejo..