banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Fri 16 May 2008 08:39

Arthy
Participant actif
Date d'inscription: 27 Mar 2007
Messages: 61

lecture fichier à accès direct avec IDL

Bonjour,

Je souhaiterai pouvoir lire des fichiers à accès direct

Pour ce faire je procède comme suit

Code:

;file = fichier binaire codé sur 1 octet
;n_col=nombdre de colonnes de l'image
;n_lin=nombdre de colonnes de l'image
clay=bytarr(n_col,n_lin)
val=bytarr(n_col)
openr,unit,'file', /get_lun, /f77_unformatted

for i=0,n_lin-1 do begin
   for j=0,n_col-1 do begin
     readu,unit,val
     free_lun,unit
   endfor
   clay(*,i)=val
endfor

free_lun,unit

Le message que j'obtiens est e suivant:

'readu corrupted f77 unformatted file detected'


Merci

Hors ligne

 

#2 Fri 16 May 2008 12:20

Cla1r3
Juste Inscrit !
Date d'inscription: 7 Sep 2007
Messages: 7

Re: lecture fichier à accès direct avec IDL

Bonjour Arthy,
Est-ce que tu as essayé de faire simplement:
clay=bytarr(n_col,n_lin)
openr,unit,'file', /get_lun, /f77_unformatted
readu,unit,clay
free_lun, unit

Hors ligne

 

#3 Fri 16 May 2008 21:01

Arthy
Participant actif
Date d'inscription: 27 Mar 2007
Messages: 61

Re: lecture fichier à accès direct avec IDL

bonjour Cla1r3,

Merci pour ta réponse

D'habitude, je procède tel que tu as écrit en élimant juste l'option '/f77_unformatted'.

En fait le code que j'ai envoyé est très simpliste. Je vais travailler sur une série de plusieurs images (environ 1200) et je voudrai savoir comment faire pour accéder directement à une ligne sans obligatoirement parcourir celles qui la précèdent.

Par exemple après l'exécution de ce bout de code en fortran

Code:

open(10,file='file',form='unformatted',recl=n_col)
read(10,rec=i) val1
read(10,rec=j)val2
close(10)

les vecteurs val1 et val2 contiendront respectivement les valeurs de la ième ligne et celles de la jème ligne

C'est cette façon de lire que je n'arrive pas à effectuer avec IDL

Merci et bon week end

Hors ligne

 

#4 Mon 19 May 2008 10:45

Cla1r3
Juste Inscrit !
Date d'inscription: 7 Sep 2007
Messages: 7

Re: lecture fichier à accès direct avec IDL

Il faut deplacer le pointeur de lecture au debut de la ligne qui t'interesse. Il faut pour cela calculer, en octets, un offset (saut de lecture).
Par exemple, pour acceder a la 3eme ligne (en supposant que ton fichier stocke ses donnees ligne par ligne de facon continue)

offset = n_col*2*1 ;le '1' etant pour bien noter le type de donnees du fichier en octets, '2' represente les 2 lignes d'avant
val = BYTARR(n_col)
OPENR, lun, 'fichier', /GET_LUN, /F77_UNFORMATTED
POINT_LUN, lun, offset
READU, lun, val ;lecture de la 3eme ligne
FREE_LUN, lun

J'avais pense a ASSOC, mais je viens de lire une note dans l'aide qui indique que ca ne peut pas etre utilise avec les fichiers F77.
Pour info, voici quand meme la syntaxe:

OPENR, lun, 'fichier', /GET_LUN
a = ASSOC(lun, BYTARR(n_col))
;Pour afficher la 3eme ligne, faire simplement:
PRINT, a[2] ;attention la 1ere ligne etant a[0]
FREE_LUN, lun

Hors ligne

 

#5 Tue 22 July 2008 01:30

Arthy
Participant actif
Date d'inscription: 27 Mar 2007
Messages: 61

Re: lecture fichier à accès direct avec IDL

Bonjour

J'ai un problème de taille avec offset lorsque j'utilise point_lun

offset ici est un entier et  la valeur maximale qu' il peut  est 32767. Je l'ai décalré omme un entier long mais au moment de la lecture, il ya toujours problème à cause de sa valeur

Comment procéder?

Merci

Hors ligne

 

Pied de page des forums

Powered by FluxBB