Dealing with list created by STRSPLIT? [message #76194] |
Thu, 19 May 2011 19:44  |
BLesht
Messages: 89 Registered: March 2007
|
Member |
|
|
I have an array of full-path filenames from which I need to extract
some substrings. The array consists of a large number of strings of
the form
diskname/maindir/subdir1/subdir2/subdir3/filename
diskname/maindir/subidr1/subdir2/subdir3/filename etc.
The lengths of the subdirXs can be different. What I wanted to do was
create some arrays the elements of which would be the subdirXs. I
thought this would be simple now that STRSPLIT allows arrays as
input. I had the array of n filenames in a string array and I used
splitnames = STRSPLIT(filenames, '/', /EXTRACT).
The result 'splitnames' is a list with n elements and each element is
of the form
diskname maindir subdir1 subdir2 subdir3 filename as it should be.
Each element is a string array.
What I can't seem to figure out is how to now extract one of these
terms from the list element. That is, I'd like to end up with arrays
that have the n subdir2s (for example). I've tried using the
LIST::TOARRAY () feature but this fails for some mysterious reason
with the message
IDL> namearray=splitnames.ToArray()
% LIST::TOARRAY: Unable to convert to type STRING: Element 798
% Error occurred at: LIST::TOARRAY
% $MAIN$
% Execution halted at: $MAIN$
Element 798 is no different from any of the elements in the list, by
the way, but this is not the real problem (at least I don't think it
is)
There must be an easy way to do this; I'm not seeing it. Any help
would be much appreciated.
|
|
|
|
|
|
Re: Dealing with list created by STRSPLIT? [message #76240 is a reply to message #76194] |
Mon, 23 May 2011 14:00   |
penteado
Messages: 866 Registered: February 2018
|
Senior Member Administrator |
|
|
On May 23, 5:54 pm, Chris Torrence <gorth...@gmail.com> wrote:
>> On May 20, 2:46 pm, Barry Lesht <ble...@gmail.com> wrote:
>
>>> Thanks, David. I'll see if Chris replies again and in the meantime
>>> install 8.1.
>
>>> Regards, Barry
>
> Okay, in IDL 8.0.1, the List::ToArray() only worked if your List
> contained scalars. In IDL 8.1 it now works for lists that contain
> array elements, as long each array has the same number of elements.
>
> So, once you upgrade to IDL 8.1 you should be fine.
Yes, I forgot about that, which is a very nice addition.
|
|
|
Re: Dealing with list created by STRSPLIT? [message #76241 is a reply to message #76194] |
Mon, 23 May 2011 13:54   |
chris_torrence@NOSPAM
Messages: 528 Registered: March 2007
|
Senior Member |
|
|
> On May 20, 2:46 pm, Barry Lesht <ble...@gmail.com> wrote:
>
>> Thanks, David. I'll see if Chris replies again and in the meantime
>> install 8.1.
>
>> Regards, Barry
Okay, in IDL 8.0.1, the List::ToArray() only worked if your List
contained scalars. In IDL 8.1 it now works for lists that contain
array elements, as long each array has the same number of elements.
So, once you upgrade to IDL 8.1 you should be fine.
Cheers,
Chris
|
|
|
|
Re: Dealing with list created by STRSPLIT? [message #76355 is a reply to message #76241] |
Tue, 24 May 2011 11:39   |
BLesht
Messages: 89 Registered: March 2007
|
Member |
|
|
On May 23, 3:54 pm, Chris Torrence <gorth...@gmail.com> wrote:
>> On May 20, 2:46 pm, Barry Lesht <ble...@gmail.com> wrote:
>
>>> Thanks, David. I'll see if Chris replies again and in the meantime
>>> install 8.1.
>
>>> Regards, Barry
>
> Okay, in IDL 8.0.1, the List::ToArray() only worked if your List
> contained scalars. In IDL 8.1 it now works for lists that contain
> array elements, as long each array has the same number of elements.
>
> So, once you upgrade to IDL 8.1 you should be fine.
>
> Cheers,
> Chris
Thanks very much, all. I did install 8.1 a few days ago, but got
distracted from this problem by another project. Here is what happens
now (success!).
IDL> help, splitname
SPLITNAME LIST <ID=22 NELEMENTS=804>
IDL> help, splitname[0]
<Expression> STRING = Array[7]
IDL> newarray=splitname.ToArray()
IDL> help, newarray
NEWARRAY STRING = Array[804, 7]
Which is what I was originally hoping for. I really appreciate your
suggestions and help.
Barry
|
|
|
|
Re: Dealing with list created by STRSPLIT? [message #92852 is a reply to message #76355] |
Sun, 13 March 2016 14:43  |
Adam Erickson
Messages: 8 Registered: July 2015
|
Junior Member |
|
|
On Tuesday, May 24, 2011 at 8:39:30 PM UTC+2, Barry Lesht wrote:
> On May 23, 3:54 pm, Chris Torrence <gorth...@gmail.com> wrote:
>>> On May 20, 2:46 pm, Barry Lesht <ble...@gmail.com> wrote:
>>
>>>> Thanks, David. I'll see if Chris replies again and in the meantime
>>>> install 8.1.
>>
>>>> Regards, Barry
>>
>> Okay, in IDL 8.0.1, the List::ToArray() only worked if your List
>> contained scalars. In IDL 8.1 it now works for lists that contain
>> array elements, as long each array has the same number of elements.
>>
>> So, once you upgrade to IDL 8.1 you should be fine.
>>
>> Cheers,
>> Chris
>
> Thanks very much, all. I did install 8.1 a few days ago, but got
> distracted from this problem by another project. Here is what happens
> now (success!).
>
> IDL> help, splitname
> SPLITNAME LIST <ID=22 NELEMENTS=804>
> IDL> help, splitname[0]
> <Expression> STRING = Array[7]
> IDL> newarray=splitname.ToArray()
> IDL> help, newarray
> NEWARRAY STRING = Array[804, 7]
>
> Which is what I was originally hoping for. I really appreciate your
> suggestions and help.
>
> Barry
Yes, thank you for this! I hope the issue has been addressed. Efficient indexing is a very important feature to have.
Adam
|
|
|