Re: index arrays of structures [message #59222] |
Sat, 15 March 2008 21:04  |
raghuram
Messages: 32 Registered: February 2008
|
Member |
|
|
On Mar 15, 7:31 pm, Vince Hradil <hrad...@yahoo.com> wrote:
> On Mar 15, 4:07 pm, Vince Hradil <hrad...@yahoo.com> wrote:
>
>
>
>
>
>> On Mar 15, 3:53 pm, Raghu <raghuram.narasim...@gmail.com> wrote:
>
>>> Hi,
>
>>> With reference to my recent posting (IDL batch indexing), i understood
>>> that i could structures. However, i haven't been able to figure out
>>> one step.
>
>>> Here is my code as of now:
>>> ; I want to search for all the images(files) in the directory trials,
>>> read them into the structure named data, and access each file within
>>> the structure.
>
>>> pro strcutres
>>> dir1='D:\trials'
>>> cd,dir1
>>> files=FILE_SEARCH('*[^\.{hdr}]', /QUOTE,count=numfiles)
>>> i=0
>>> while i lt numfiles do begin
>>> named=files(i)
>>> print,named
>>> data={ID:'a',sizes:fltarr(2179,761)}
>>> data=replicate(data,numfiles)
>>> data.sizes=findgen(numfiles)
>>> openr,1,named
>>> readu,1,data[i].sizes
>>> close,1
>>> i=i+1
>>> endwhile
>>> end
>
>>> ERROR message- READU: Expression must be named variable in this
>>> context: <FLOAT Array[2179, 761]>.
>
>>> I am getting the error here because it seems like i am not able to
>>> read in the LUN 1 or named, into data[i].sizes.
>
>>> Where am i going wrong ?
>
>>> Raghu
>
>> Hoo boy - here you go.
>
>> 1-Yes, you need to use a named variable to readu
>> 2-You already defined "sizes" (weird name, by the way, how about
>> "values"), when you made the structure.
>
>> How about this:
>
>> pro strcutres
>> dir1='D:\trials'
>> cd,dir1
>> files=FILE_SEARCH('*[^\.{hdr}]', /QUOTE,count=numfiles)
>
>> data={ID:'a',values:fltarr(2179,761)}
>> data=replicate(data,numfiles)
>> tempval = fltarr(2179,761)
>
>> for i=0L, numfiles-1 do begin
>> named=files(i)
>> print,named
>
>> openr,1,named
>> readu,1,tempval
>> free_lun,1
>> data[i].values = tempval
>
>> endfor
>
>> return
>> end
>
> BTW - why do you want to use a structure again? The above code makes
> all the data.id's = 'a'.
>
> Why can't you just read the data into a matrix? If you want the
> structure to contain the filename then add data[i].id = named inside
> the loop.- Hide quoted text -
>
> - Show quoted text -
Hi,
Are you asking why i'm using structures in the first place ?
If yes, my initial idea (from python lessons) was to create something
like an empty array and then read in each file into this empty array
by concatenation. That way each element would have a unique ID which i
could use to access them.
But it seems like i can't create an empty 2-d array of a certain size
and number of files to be read ('numfiles' in my case).
When you say create a matrix, is this what you meant ?
I got the idea of using structures only from responses in my previous
emails on 'batch indexing'.
-R
|
|
|
Re: index arrays of structures [message #59227 is a reply to message #59222] |
Sat, 15 March 2008 19:31   |
Vince Hradil
Messages: 574 Registered: December 1999
|
Senior Member |
|
|
On Mar 15, 4:07 pm, Vince Hradil <hrad...@yahoo.com> wrote:
> On Mar 15, 3:53 pm, Raghu <raghuram.narasim...@gmail.com> wrote:
>
>> Hi,
>
>> With reference to my recent posting (IDL batch indexing), i understood
>> that i could structures. However, i haven't been able to figure out
>> one step.
>
>> Here is my code as of now:
>> ; I want to search for all the images(files) in the directory trials,
>> read them into the structure named data, and access each file within
>> the structure.
>
>> pro strcutres
>> dir1='D:\trials'
>> cd,dir1
>> files=FILE_SEARCH('*[^\.{hdr}]', /QUOTE,count=numfiles)
>> i=0
>> while i lt numfiles do begin
>> named=files(i)
>> print,named
>> data={ID:'a',sizes:fltarr(2179,761)}
>> data=replicate(data,numfiles)
>> data.sizes=findgen(numfiles)
>> openr,1,named
>> readu,1,data[i].sizes
>> close,1
>> i=i+1
>> endwhile
>> end
>
>> ERROR message- READU: Expression must be named variable in this
>> context: <FLOAT Array[2179, 761]>.
>
>> I am getting the error here because it seems like i am not able to
>> read in the LUN 1 or named, into data[i].sizes.
>
>> Where am i going wrong ?
>
>> Raghu
>
> Hoo boy - here you go.
>
> 1-Yes, you need to use a named variable to readu
> 2-You already defined "sizes" (weird name, by the way, how about
> "values"), when you made the structure.
>
> How about this:
>
> pro strcutres
> dir1='D:\trials'
> cd,dir1
> files=FILE_SEARCH('*[^\.{hdr}]', /QUOTE,count=numfiles)
>
> data={ID:'a',values:fltarr(2179,761)}
> data=replicate(data,numfiles)
> tempval = fltarr(2179,761)
>
> for i=0L, numfiles-1 do begin
> named=files(i)
> print,named
>
> openr,1,named
> readu,1,tempval
> free_lun,1
> data[i].values = tempval
>
> endfor
>
> return
> end
BTW - why do you want to use a structure again? The above code makes
all the data.id's = 'a'.
Why can't you just read the data into a matrix? If you want the
structure to contain the filename then add data[i].id = named inside
the loop.
|
|
|
Re: index arrays of structures [message #59228 is a reply to message #59227] |
Sat, 15 March 2008 14:07   |
Vince Hradil
Messages: 574 Registered: December 1999
|
Senior Member |
|
|
On Mar 15, 3:53 pm, Raghu <raghuram.narasim...@gmail.com> wrote:
> Hi,
>
> With reference to my recent posting (IDL batch indexing), i understood
> that i could structures. However, i haven't been able to figure out
> one step.
>
> Here is my code as of now:
> ; I want to search for all the images(files) in the directory trials,
> read them into the structure named data, and access each file within
> the structure.
>
> pro strcutres
> dir1='D:\trials'
> cd,dir1
> files=FILE_SEARCH('*[^\.{hdr}]', /QUOTE,count=numfiles)
> i=0
> while i lt numfiles do begin
> named=files(i)
> print,named
> data={ID:'a',sizes:fltarr(2179,761)}
> data=replicate(data,numfiles)
> data.sizes=findgen(numfiles)
> openr,1,named
> readu,1,data[i].sizes
> close,1
> i=i+1
> endwhile
> end
>
> ERROR message- READU: Expression must be named variable in this
> context: <FLOAT Array[2179, 761]>.
>
> I am getting the error here because it seems like i am not able to
> read in the LUN 1 or named, into data[i].sizes.
>
> Where am i going wrong ?
>
> Raghu
Hoo boy - here you go.
1-Yes, you need to use a named variable to readu
2-You already defined "sizes" (weird name, by the way, how about
"values"), when you made the structure.
How about this:
pro strcutres
dir1='D:\trials'
cd,dir1
files=FILE_SEARCH('*[^\.{hdr}]', /QUOTE,count=numfiles)
data={ID:'a',values:fltarr(2179,761)}
data=replicate(data,numfiles)
tempval = fltarr(2179,761)
for i=0L, numfiles-1 do begin
named=files(i)
print,named
openr,1,named
readu,1,tempval
free_lun,1
data[i].values = tempval
endfor
return
end
|
|
|
Re: index arrays of structures [message #59318 is a reply to message #59222] |
Sun, 16 March 2008 05:49  |
Vince Hradil
Messages: 574 Registered: December 1999
|
Senior Member |
|
|
Raghu wrote:
> On Mar 15, 7:31�pm, Vince Hradil <hrad...@yahoo.com> wrote:
>> On Mar 15, 4:07 pm, Vince Hradil <hrad...@yahoo.com> wrote:
>>
>>
>>
>>
>>
>>> On Mar 15, 3:53 pm, Raghu <raghuram.narasim...@gmail.com> wrote:
>>
>>>> Hi,
>>
>>>> With reference to my recent posting (IDL batch indexing), i understood
>>>> that i could structures. However, i haven't been able to figure out
>>>> one step.
>>
>>>> Here is my code as of now:
>>>> ; I want to search for all the images(files) in the directory trials,
>>>> read them into the structure named data, and access each file within
>>>> the structure.
>>
>>>> pro strcutres
>>>> dir1='D:\trials'
>>>> cd,dir1
>>>> files=FILE_SEARCH('*[^\.{hdr}]', /QUOTE,count=numfiles)
>>>> i=0
>>>> while i lt numfiles do begin
>>>> named=files(i)
>>>> print,named
>>>> data={ID:'a',sizes:fltarr(2179,761)}
>>>> data=replicate(data,numfiles)
>>>> data.sizes=findgen(numfiles)
>>>> openr,1,named
>>>> readu,1,data[i].sizes
>>>> close,1
>>>> i=i+1
>>>> endwhile
>>>> end
>>
>>>> ERROR message- READU: Expression must be named variable in this
>>>> context: <FLOAT � � Array[2179, 761]>.
>>
>>>> I am getting the error here because it seems like i am not able to
>>>> read in the LUN 1 or named, into data[i].sizes.
>>
>>>> Where am i going wrong ?
>>
>>>> Raghu
>>
>>> Hoo boy - here you go.
>>
>>> 1-Yes, you need to use a named variable to readu
>>> 2-You already defined "sizes" (weird name, by the way, how about
>>> "values"), when you made the structure.
>>
>>> How about this:
>>
>>> pro strcutres
>>> dir1='D:\trials'
>>> cd,dir1
>>> files=FILE_SEARCH('*[^\.{hdr}]', /QUOTE,count=numfiles)
>>
>>> data={ID:'a',values:fltarr(2179,761)}
>>> data=replicate(data,numfiles)
>>> tempval = fltarr(2179,761)
>>
>>> for i=0L, numfiles-1 do begin
>>> named=files(i)
>>> print,named
>>
>>> openr,1,named
>>> readu,1,tempval
>>> free_lun,1
>>> data[i].values = tempval
>>
>>> endfor
>>
>>> return
>>> end
>>
>> BTW - why do you want to use a structure again? �The above code makes
>> all the data.id's = 'a'.
>>
>> Why can't you just read the data into a matrix? �If you want the
>> structure to contain the filename then add data[i].id = named inside
>> the loop.- Hide quoted text -
>>
>> - Show quoted text -
>
> Hi,
>
> Are you asking why i'm using structures in the first place ?
> If yes, my initial idea (from python lessons) was to create something
> like an empty array and then read in each file into this empty array
> by concatenation. That way each element would have a unique ID which i
> could use to access them.
> But it seems like i can't create an empty 2-d array of a certain size
> and number of files to be read ('numfiles' in my case).
> When you say create a matrix, is this what you meant ?
>
> I got the idea of using structures only from responses in my previous
> emails on 'batch indexing'.
>
> -R
I guess I'm still confused. I was suggesting just doing:
data = fltarr(nx,ny,numfiles)
then for each files[i] the image is data[*,*,i]
It's unique simply by the index.
|
|
|