#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