directory tree -> array
Richard Gaskin
ambassador at fourthworld.com
Tue Mar 3 10:49:56 EST 2020
Support has restored the thread - you can find it in the "Talking
LiveCode" section of the forums:
https://forums.livecode.com/viewtopic.php?f=135&t=33565
--
Richard Gaskin
Fourth World Systems
Dick Kriesel wrote:
>> On Jan 22, 2020, at 10:17 AM, Richard Gaskin via use-livecode <use-livecode at lists.runrev.com> wrote:
>>
>> I stumbled across a code challenge for y'all, one that seems seductively simple but I don't think it is:
>>
>> What is the simplest way to build an array that reflects the files and folders within a given folder?
>>
>> There's a discussion about this here:
>>
>> https://forums.livecode.com/viewtopic.php?f=7&t=33565
>>
>>
>> On Jan 22, 2020, at 10:26 AM, Richard Gaskin via use-livecode <use-livecode at lists.runrev.com> wrote:
>
>>
>> We have many handlers that deliver directory trees as lists, but arrays are a different beast. Because the depth is both unknowable and varied, I can't think of a way to do this without resorting to "do".
>
>
>
> Since that thread vanished last week, and hasn’t returned, I'm offering help here instead.
>
> The list of full paths contains enough information to build an array representation of the directory tree.
>
> <code>
> /**
>
> Summary: Given a list of full paths, and given the partial path they share, build an array representing the directory structure
>
> pPaths: a return-delimited list of full paths
>
> pPath: the path that was used to generate the list of full paths
>
> Returns (array): A array with a branch node for each folder and a leaf node for each file
>
> Description: Eliminate pPath from every line of pPaths. Then insert each line into an array.
>
> email subject "directory tree -> array"
>
> forum topic "f=7&t=33565"
>
> */
>
>
> function arrayFromPaths pPaths, pPath -- a list of full paths, and the path that was used to generate the list
>
> local tPaths, tFile, tArray
>
> set the itemDelimiter to "/"
>
>
> put char 2 to -1 of replaceText( cr & pPaths, cr & pPath & slash, cr ) into tPaths -- eliminate pPath from every full path
>
> repeat for each line tPath in tPaths -- insert each file name into the array
>
> put the last item of tPath into tFile
>
> delete the last item of tPath
>
> if tPath is empty then -- the file is in folder pPath
>
> put "true" into tArray[ tFile ]
>
> else -- the file is in a folder in folder pPath
>
> split tPath by slash
>
> put "true" into tArray[ tPath ][ tFile ]
>
> end if
>
> end repeat
>
>
> return tArray
>
> end arrayFromPaths
>
>
> on mouseUp
>
> local tPaths = "a/b/c,a/b/d/e,a/b/d/f" -- folder a/b contains file c and folder d, which contains files e and f
>
> local tPath = "a/b" -- the shared partial path
>
> replace comma with cr in tPaths
>
>
> get arrayFromPaths( tPaths, tPath )
>
>
> breakpoint
>
> end mouseUp
>
>
> </code>
>
> If the topic reappears soon, I’ll repost there because reading code is easier there.
>
> By, the way, thanks to RG for the bug report on my earlier posting in the now-vanished thread.
>
> — Dick
>
More information about the use-livecode
mailing list