Scilabでファイルの検索を再帰的に行う関数
はじめに
Scilabにはファイルの検索を行う関数findfiles
が標準ライブラリの中に存在しますが、再帰的な検索を行うことができません。パッと見た限り、再帰的に探す方法が出てこなかったので、自分で書いてみました。
実装
ただのファイル検索ですし、ファイル名と一致するかどうかは関数findfiles
に任せることができますから、仕組みとしては簡単です。関数の再帰呼び出しは好きではないので、列ベクトルを用いて実装しました。
function [files] = findfilesRecursively(path, filespec)
// [files] = findfilesRecursively([path, [filespec]])
//
// 説明:
// 関数 findfilesRecursively はファイルを再帰的に検索します。
//
// 出力:
// - files: 合致するファイルのフルパスが格納された行列
//
// 入力:
// - path: 検索を行うパス
// - filespec: 検索を行うファイル名
[lhs, rhs] = argn(0);
if rhs < 1 then
path = pwd();
end
if rhs < 2 then
filespec = "*.*";
end
files = [];
dirs = [path];
while size(dirs, 'r') > 0 do
maskedFiles = findfiles(dirs(1), filespec);
if size(maskedFiles, 'r') > 0 then
files = [files; dirs(1) + '\' + maskedFiles];
end
allFiles = findfiles(dirs(1));
if size(allFiles, 'r') then
for allFile = (dirs(1) + '\' + allFiles)' do
if isdir(allFile) then
dirs = [dirs; allFile];
end
end
end
dirs = dirs(2:$);
end
endfunction
さいごに
Scilabにまだまだ慣れていないため、関数length
を使いそうになったり、行ベクトルと列ベクトルを間違えそうになったりして、いい勉強になりました。
この記事で示したコードはパブリックドメイン、つまりご自由に使っていただいて大丈夫です。ただし、一切の責任を取りかねますのでご了承ください。
Author And Source
この問題について(Scilabでファイルの検索を再帰的に行う関数), 我々は、より多くの情報をここで見つけました https://qiita.com/leak4mk0/items/c27accdfde58c0ee6157著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .