Germany | Finland | Saint Petersburg | Drive

Разбор имени файла

Опубликовано в QLua

 

-- Разбор имени файла
-- Возвращает 3 значения
-- c:\path\
-- filename
-- ext

function io.splitpath(filename)
   filename = filename or ""

   local path,file,ext
   local file_name

   path,file_name = filename:match("^%s*(.-)([^\\/]*)$")
   if file_name then
      file,ext = file_name:match("([^%.]*)%.?(.*)$")
   end
   return path,file,ext
   end
 
 
print(io.splitpath("c:\\path.0\\file.ext"))
print(io.splitpath("C:\\Users\\8FEE~1\\AppData\\Local\\Temp\\srq0.3\\12"))
print(io.splitpath("C:\\Users\\8FEE~1\\AppData\\Local\\Temp\\srq0.3\\12"))
print(io.splitpath("C:\\Users\\8FEE~1\\AppData\\Local\\Temp\\srq0.3\\.bmp"))
print(io.splitpath("..\\Users\\8FEE~1\\App.Data\\Local\\Temp\\srq03\\.bmp"))
print(io.splitpath("srq0.3\\12"))
print(io.splitpath("srq0.3\\"))

Пробуем:

c:\path.0\ file ext
C:\Users\8FEE~1\AppData\Local\Temp\srq0.3\ 12
C:\Users\8FEE~1\AppData\Local\Temp\srq0.3\ 12
C:\Users\8FEE~1\AppData\Local\Temp\srq0.3\ bmp
..\Users\8FEE~1\App.Data\Local\Temp\srq03\ bmp
srq0.3\ 12
srq0.3\

 

 

 

Комментарии   
# kalikazandr 14.05.2019 22:27
Спасибо, но нет, похожий пример я нашел в интернете и в 1 ну строку.
Делаю так:
function parsedir(dir)
local res= {}
for p, w in dir:gmatch"(%p? )(%w*)" do
if p == ":" then
res[1] = res[1]..p
elseif p ==[[.]] then
res[#res] = res[#res]..p..w
else
res[#res+1] = w
end
end
local c = #res
if res[c] == "" then table.remove(re s, c) end
return res
--message(table.concat(res,"\\"))
end
local path = "C:\Creator\PetrovSergey\Pyramid\65.50\bot.lua"
local tab_path = parsedir(path)
print(tab_path[#tab_path]) --> 65.50
print(tab_path[#tab_path-1]) --> Pyramid
print(tab_path[1]) --> C:
Фишка в том, что я не могу назвать папку так:
Petrov_Sergey, либо писать отдельное условие в цикле.
Идея фикс: у меня все боты привязаны к страйку, и писать в каждом боте страйк - лень, он уже есть в названии папки: 65.50 или 125000. Копировать ботов становится легко - папку страйка переименовал и все. И зная каталоги верхнего уровня бот может пройти в нужные каталог и дернуть оттуда любой файлик, будь то общие настройки или еще чего.
Ответить | Ответить с цитатой | Цитировать
# kalikazandr 15.05.2019 11:41
Приветствую.
функция с++ _splitpath() мне знакома и делает то же, что и ваш пример, за исключением - диск отдельно строкой.
Ладно, магии не получилось, буду пользоваться своей топорной функцией, работает же :)
Спасибо.
Ответить | Ответить с цитатой | Цитировать
Добавить комментарий


Архив QLua