Lua filename

前回 Lua スクリプトで mpv でのディレクトリ内巡回機能を作った。
まだ気に入っていない、拡張子 mp4 のファイルしか抜き出していない。
LUMIX で動画を撮影したものは mp4 だけど iPhone の動画は mov だ。

2022 年となった今ではこの二つだけでいいかもだけど他の形式も沢山ある。
Lua の正規表現を調べまくっているが複数の拡張子にマッチさせる手段が見つからない。
だからといって複数の拡張子全部の if 文を書くなんてまるで初心者だし。
後で簡単に書き加えなんかもできるようにしたいのでソレは絶対に避けたい。

しかたがない、別の方法でも考えよう。
配列に入れて if-in は、そんなの Python くらいしか出来ない。
Javascript の includes みたいなメソッドも無い、だめだ。

だったら文字列だ、ある文字列が長い文字列の中に含まれているかどうか。
おっとこれならできるみたいだぞ、よしまず拡張子を抜き出す手段を。

#!/usr/bin/lua

fullpath = '/home/testuser/動画/日本語 スペース.mp4'

dir = fullpath:match('.*/')
print(dir)
--> /home/testuser/動画/

file = fullpath:match('.*/(.*)')
print(file)
--> 日本語 スペース.mp4'

ext = fullpath:match('.*%.(.*)')
print(ext)
--> mp4

none = fullpath:match('.*%](.*)')
print(none)
--> nil

拡張子やファイル名を抜き出すにはコレでいいようだ。
どうでもいいけど Gedit では Lua でもシバンには色が付くんだね。

lua_gedit

Lua の # はコメントじゃないのに、Python の len() 相当です。

#!/usr/bin/lua

extstr = 'mp4,m4v,mov'

bool = extstr:match('mov')
print(bool)
--> mov

bool = extstr:match('wmv')
print(bool)
--> nil

とにかく存在しないなら nil になる、コレを利用しよう。

extstr = 'mp4,m4v,mov'

function on_nextfile()
    -- 略
    for filename in pfile:lines() do
        -- 拡張子を抜きだして小文字化して
        ext = filename:match('.*%.(.*)'):lower()
        -- 含まれていなければ nil になる
        if not(extstr:match(ext) == nil) then

ということで書き換え、上手くいったので前回の投稿も書き換えしました。