Lua ( GSL Shell ) / Penlight 学習:これは頂き

2017-06-16 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-06-14)の記事「Lua ( GSL Shell ) / Penlight 学習」では、

Lua 標準及び LFS で行っていること
に対応した処理を、Penlight を使って書いてみた。

ほぼ、1対1だった。

しかし、
LFS では機能が無い(?)ファイルのコピー:
  file.copy( src, dest [, flag ] ) -- flag==true 強制的 (default)
  dir.copyfile( src, dest [, flag ] )
を除いては、
Penlight の一部(少なくとも'path')は、LFS を使っているので、
LFS は不要に成らなかった。


その後、更に“file”、“dir”、“path”を学習した。

そして、“utils”モジュールには、面白いものがいろいろあった。
例えば、・・・・・

1.「printf」 ( fmt, ... )
   print an arbitrary number of arguments using a format.

2.「fprintf」( f, fmt, ... )
   write an arbitrary number of arguments to a file using a format.

3.「readfile」( filename [, is_bin ] )
   return the contents of a file as a string

4.「readlines」( filename )
   return the contents of a file as a list of lines


結果、
4月(2017-04-07)の記事「GSL Shell 学習:サブプログラムとしたいもの
で書いた、自前関数の幾つかは不要になる。

前回の (仮)k_SUBs.lua の一部抜粋:
----- ( k_SUBs.lua ) -----

--「GSL Shell 学習:split 関数(再)」で書いた関数
function split( str, sep )
if sep == nil then sep = '%s' end
local t={} ; i=1
for str in string.gmatch( str, "([^"..sep.."]+)") do
t[i] = str i=i+1
end
return t
end

--「GSL Shell 学習:フルパス名の分解」で書いた関数
function split_path( p )
return string.match( p, "(.-)([^\\]-([^%.]+))$" )
end

--「Lua 学習:fprintf 関数」で書いた関数の改訂版
function printf( f, s, ... ) --- 定義済み:stdin / stdout / stderr
f = f or io.stdout -- これを入れると、nil でもOK
f:write(s:format(...))
end

-- テキストファイル全体を一括で読み込む:
-- IN = io.open( IN_F ); wstr = IN:read('*a'); IN:close()

-- 上記を行毎の配列に分解 & 行数
-- w = split( wstr, '\n' ); nw = #w

-- 尚、1行分を要素毎の配列に分解 & 要素数( TAB 区切りの例 )
-- v = split( w[n], '\t' ); mv = #v

-------------------------------------
--[[ 入力 Dir 内ファイル一覧(リスト)
local lfs = require'lfs'
IN_Flist={}; zz=0
for f in lfs.dir(IN_Dir) do
-- f:sub(1,1) ~= '.' は特に必要無し
if f:find('.ext') then zz=zz+1; IN_Flist[zz]=f end
end
]]

----------
--[[ 出力 Dir クリア/作成
local lfs = require'lfs'
if lfs.chdir(OT_Dir) then
for f in lfs.dir('.') do
if f:sub(1,1) ~= '.' then os.remove(f) end
end
lfs.chdir('..'); lfs.rmdir(OT_Dir)
end
lfs.mkdir(OT_Dir)
]]
以上は、

以下に示す如く、非常にシンプルにできる:
--------------------------

-- split 関数
require'pl'
utils.split( str, sep, plain, n )


-- フルパス名の分解 ( 前記の split_path 関数は、戻り値3つ )
require'pl'
p1 , p2 = path.splitpath( path ) -- 例えば、Q:\\ と file.ext
p4 , p3 = path.splitext( p2 ) -- ------ file と、ext


-- printf 関数 ( C言語流 )
require'pl'
utils.printf( fmt, ... )

utils.fprintf( f, fmt, ... )


-- テキストファイル全体を一括で(文字列として)読み込む:
wstr = file.read( IN_F )


-- テキストファイル全体を行毎の文字列配列で読み込む:
w =utile.readlines( IN_F )

-------------------------------------
-- 入力 Dir 内ファイル一覧(リスト)
require'pl'
IN_Flist = dir.getfiles( IN_Dir [, mask ] ); zz=#IN_Flist
-- mask を省略するか、'*' で全てのファイル( Dir は除外)

----------
-- 出力 Dir クリア/作成
require'pl'
dir.rmtree( OT_Dir ) -- remove a whole directory tree
dir.makepath( OT_Dir ) -- will create subdirectories as necessary!
以上でOKかナ?


本日はここまで。


Lua ( GSL Shell ) / Penlight 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170508,12
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク