I created an extension to find common directory path from a list of paths.
When doing a search for such a tool, I came across this website:
https://rosettacode.org/wiki/Reports:Tasks_not_implemented_in_Xojo
I see that it is basically on the wish list, but I don’t know how to add this to there, so I am going to post the code here:
[code]Public Function Compare(extends txt1 as String, txt2 as String, FolderMode as Boolean = False, Sep1 as String = “”) as String
dim LongText as Text
dim ShortText as Text
if txt1.len > txt2.len then
LongText = txt1.ToText
ShortText = txt2.ToText
else
LongText = txt2.ToText
ShortText = txt1.ToText
end if
dim results as String = ShortText
Dim LongString as String = LongText
dim TempText as String
for each c as text in ShortText.Characters
if TempText = “” then
TempText = c
Else
TempText = TempText + c
end if
if not LongString.Contains(TempText) then
results = TempText.Left(TempText.Len - 1)
exit for c
end if
next c
if FolderMode then
if not results.EndsWith(Sep1) then
dim txt() as String = results.Split(Sep1)
if not txt(txt.Ubound).EndsWith(Sep1) then
txt.Remove(txt.Ubound)
end if
results = Join(txt(), Sep1)
end if
end if
Return results
End Function
[/code]
Public Function Contains(extends txt as String, st as String) as Boolean
dim results as Boolean = False
if txt.Lowercase.InStr(st.Lowercase) <> 0 then results = True
Return results
End Function
[code]Public Function GetCommonPath(extends FileList() as FolderItem, Sep1 as String = “”) as String
dim Results as String
for x as integer = 0 to FileList.Ubound
dim f as FolderItem = FileList(x)
if FolderExists(f) then
if not f.Directory then
f = f.Parent
end if
if Results = “” then
Results = f.NativePath
else
Results = Results.Compare(f.NativePath, True)
end if
end if
next x
Results = Results.LastCharacter(Sep1)
Return Results.Uppercase
End Function
[/code]
Public Function FolderExists(f as FolderItem) as Boolean
dim Results as Boolean = False
if f <> nil then
if f.Exists then
Results = True
end if
end if
Return Results
End Function
Public Function gf(txt as String, DeleteIfExists as Boolean = False) as FolderItem
dim Results as FolderItem = GetFolderItem(txt, FolderItem.PathTypeNative)
if DeleteIfExists then
if FolderExists(Results) then
Results.Delete
end if
end if
Return Results
End Function
As you can see there are several functions that go into this, but it does work. Additionally, someone may have a better way of doing this, I am open to feedback as well.