Какой самый удобный способ разделить имя пути на его компоненты в Lua - PullRequest
16 голосов
/ 09 марта 2011

У меня есть стандартное имя файла Windows с путем. Мне нужно выделить из строки имя файла, расширение и путь.

В настоящее время я просто читаю строку в обратном направлении от конца в поисках. обрезать расширение и первым \ получить путь.

Я уверен, что смогу сделать это, используя шаблон Lua, но я продолжаю терпеть неудачу, когда речь идет о работе справа от строки.

например. C: \ Temp \ тест \ myfile.txt должен вернуть

  • c: \ temp \ test \
  • myfile.txt
  • .txt

Заранее извиняюсь, если это дубликат, но я мог бы найти много примеров для других языков, но не для Lua.

Ответы [ 3 ]

32 голосов
/ 30 августа 2012

Вот улучшенная версия, которая работает для путей Windows и Unix, а также обрабатывает файлы без точек (или файлы с несколькими точками):

= string.match([[/mnt/tmp/myfile.txt]], "(.-)([^\\/]-%.?([^%.\\/]*))$")
"/mnt/tmp/" "myfile.txt"    "txt"

= string.match([[/mnt/tmp/myfile.txt.1]], "(.-)([^\\/]-%.?([^%.\\/]*))$")
"/mnt/tmp/" "myfile.txt.1"  "1"

= string.match([[c:\temp\test\myfile.txt]], "(.-)([^\\/]-%.?([^%.\\/]*))$")
"c:\\temp\\test\\"  "myfile.txt"    "txt"

= string.match([[/test.i/directory.here/filename]], "(.-)([^\\/]-%.?([^%.\\/]*))$")
"/test.i/directory.here/"   "filename"  "filename"
17 голосов
/ 09 марта 2011
> return string.match([[c:\temp\test\myfile.txt]], "(.-)([^\\]-([^%.]+))$")
c:\temp\test\   myfile.txt  txt

Кажется, это именно то, что вы хотите.

0 голосов
/ 30 августа 2012

Разделить строку в Lua?

Там есть несколько строковых табличных функций, разделенных "\", так как \ не может быть в имени папки, так что в итоге вы получите таблицу с индексом один, являющимся диском, а последний индекс - файлом.

...