「拡張子の違うファイルを開く」の版間の差分
ナビゲーションに移動
検索に移動
編集の要約なし |
r2: 拡張子を限定せず何でも開くように |
||
| 1行目: | 1行目: | ||
同じフォルダにある拡張子以前が共通のファイルを順ぐりに開きます。たとえば現在Cファイルを開いていれば同じフォルダにあるHファイルを、Hファイルを開いていればCファイルを開きます。 | |||
== 更新履歴 == | |||
* r1: 失念 | |||
* r2 (2014-08-07): 拡張子を限定せず何でも開くように | |||
( | <source lang="javascript"> | ||
// 拡張子の違うファイルを開く.js r2 (2014-08-07) | |||
// 同じフォルダにある拡張子以前が共通のファイルを順に開きます | |||
var FS = new ActiveXObject("Scripting.FileSystemObject") | |||
function main() | function main() | ||
{ | { | ||
var next = calc_next_file( | var path = document.Path | ||
var name = document.Name | |||
var next = calc_next_file(path, name) | |||
if (next) | if (next) | ||
{ | { | ||
| 24行目: | 23行目: | ||
} | } | ||
} | } | ||
function calc_next_file(name) | function calc_next_file(path, name) | ||
{ | { | ||
var name_dot_ext = | name = name.toLocaleLowerCase() | ||
var name_dot_ext = split_at_dot(name) | |||
if (!name_dot_ext) { return } | if (!name_dot_ext) { return } | ||
var name_dot = name_dot_ext[0] | var name_dot = name_dot_ext[0] | ||
var ext = name_dot_ext[1] | var ext = name_dot_ext[1] | ||
var | var files = [] | ||
each_file(path, function(filename) | |||
{ | { | ||
var lower = filename.toLocaleLowerCase() | |||
if (lower.length >= name_dot.length && lower.substr(0, name_dot.length) === name_dot) | |||
{ | |||
if ( | files.push(lower) | ||
} | |||
}) | |||
if (files.length === 0) { return } | |||
files.sort() | |||
var curr = index_of(name, files) | |||
if (curr < 0) { return files[0] } | |||
return path + files[(curr + 1) % files.length] | |||
} | } | ||
function | function split_at_dot(str) | ||
{ | { | ||
var i = str.lastIndexOf( | var i = str.lastIndexOf('.') | ||
return i >= 0 && [str.substr(0, i + 1), str.substr(i + 1)] | return i >= 0 && [str.substr(0, i + 1), str.substr(i + 1)] | ||
} | } | ||
function | function index_of(x, array) | ||
{ | |||
for (var i=0; i<array.length; i++) | |||
{ | |||
if (array[i] === x) { return i } | |||
} | |||
return -1 | |||
} | |||
function each_file(path, callback) | |||
{ | { | ||
return | return enumerate(FS.GetFolder(path).Files, function (e) | ||
{ | |||
return callback(e.Name) | |||
}) | |||
} | } | ||
function | function enumerate(collection, callback) | ||
{ | { | ||
for (var e = new Enumerator(collection); !e.atEnd(); e.moveNext()) | |||
{ | |||
var result = callback(e.item()) | |||
if (result) | |||
{ | { | ||
return result | |||
} | } | ||
} | |||
} | } | ||
main() | main() | ||
</source> | </source> | ||
2014年8月7日 (木) 17:34時点における版
同じフォルダにある拡張子以前が共通のファイルを順ぐりに開きます。たとえば現在Cファイルを開いていれば同じフォルダにあるHファイルを、Hファイルを開いていればCファイルを開きます。
更新履歴
- r1: 失念
- r2 (2014-08-07): 拡張子を限定せず何でも開くように
// 拡張子の違うファイルを開く.js r2 (2014-08-07)
// 同じフォルダにある拡張子以前が共通のファイルを順に開きます
var FS = new ActiveXObject("Scripting.FileSystemObject")
function main()
{
var path = document.Path
var name = document.Name
var next = calc_next_file(path, name)
if (next)
{
editor.OpenFile(next, 0, meOpenAllowNewWindow)
}
}
function calc_next_file(path, name)
{
name = name.toLocaleLowerCase()
var name_dot_ext = split_at_dot(name)
if (!name_dot_ext) { return }
var name_dot = name_dot_ext[0]
var ext = name_dot_ext[1]
var files = []
each_file(path, function(filename)
{
var lower = filename.toLocaleLowerCase()
if (lower.length >= name_dot.length && lower.substr(0, name_dot.length) === name_dot)
{
files.push(lower)
}
})
if (files.length === 0) { return }
files.sort()
var curr = index_of(name, files)
if (curr < 0) { return files[0] }
return path + files[(curr + 1) % files.length]
}
function split_at_dot(str)
{
var i = str.lastIndexOf('.')
return i >= 0 && [str.substr(0, i + 1), str.substr(i + 1)]
}
function index_of(x, array)
{
for (var i=0; i<array.length; i++)
{
if (array[i] === x) { return i }
}
return -1
}
function each_file(path, callback)
{
return enumerate(FS.GetFolder(path).Files, function (e)
{
return callback(e.Name)
})
}
function enumerate(collection, callback)
{
for (var e = new Enumerator(collection); !e.atEnd(); e.moveNext())
{
var result = callback(e.item())
if (result)
{
return result
}
}
}
main()スポンサーリンク