Ver Mensaje Individual
  #12 (permalink)  
Antiguo 28/04/2010, 05:28
Avatar de erbuson
erbuson
 
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: Ayuda por favor

Intentare sobre el mismo código ir comentando por partes:

Lo primero que me llama la atención es que empiezas por el final, aunque supongo que realmente lo que así consigues es que el último que habrás leido es es primero que entraste, cuando en mi sistema lo que hago es que cuando ya tengo un registro de esta semana, me olvido de los demás.

Utilizas el With Horas cuando realmente vas a usar sólo un campo entonces no tienes por que complicarte ya que la posterior lectura es mas facil.

* * Get #Numero, RegUltimo, Horas
* * Nsemana = Horas.semana

e incluso como ves en mi código usarlo directamente sin pasar por otra variable aunque sea poco seguro que algo lentifica el proceso

Defines Semanas con el número máximo de registros que tiene el fichero con lo cual cuando pasas de 53 estás desperdiciando memoria.

En la siguiente instrucción comparas innecesariamente si i > 0 porque si miras el For Next puedes comprobar que i nunca valdrá cero.

If i > 0 Then 'Aqui pretendo comparar el ultimo registro guardado _

La intención de guardar en Semanas(i) cuando i valdra de 1 a UltimoRegistro no la veo nada clara puesto que entonces tendrás registros intermedios sin datos, distinto sería que cuando encuentras una semana diferente aumentaras un contador aparte. Sin embargo piensa que estas comparando i con i-1 lo cual da por supuesto que los registros del fichero están ordenados por semanas no se si ello es cierto o no.

Respecto al tema de ORDENADOS piensa que si los registros del fichero pueden estar desordenados por semanas aunque no es lógico si siempre los vas añadiendo al final y son movimientos que se producen automáticos, si los grabas a partir de unos o documentos auxiliares entonces la cosa cambia porque podrían estar desordenados.

Si tu lo que quieres realmente es crear un Indice en memoria para posterior lectura entonces deberías actuar de otra manera que a la vez es muy sencilla.

Dimensionas como bien has hecho Semanas(D) con el número de Registros

Efectuas un Bucle

For i = 1 to D
Get #Numero, i, Horas
Semanas(i)=Horas.Semana
Next

De este modo consigues en la Matriz Semana tener en cada "Registro" su semana.

Si tu quieres después cargar los registros de una semana sin leer todo el fichero deberás:

For i = 1 To D
IF Semanas(i) = LaSemanaQueBuscas THEN
Get #Numero, i, Horas
' Procesar como quieras
End if
Next

Perdona por el rollo, hablamos ...
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...