ファイル操作 - stuncloud/UWSCR GitHub Wiki

FOPEN

対応バージョン: 0.6.0

戻り値 = fopen(ファイルパス, モード = F_READ, 追記文字列 = EMPTY)
変数名 種別 説明
ファイルパス 文字列 必須 テキストファイルのパス
書き込みモードでファイルが存在しない場合は新規作成される
モード 定数 省略可 ファイルモード定数、orによる組み合わせあり
追記文字列 文字列 省略可(条件付きで必須) F_APPENDで書き込む文字列 (それ以外では無視)
戻り値 ファイルID 戻り値 ファイルを識別するための特殊な値
真偽値 F_EXISTSの場合指定パスが存在すればTRUE
数値 F_APPENDで書き込んだバイト数
  • ファイルモード定数

    定数名 役割
    F_EXISTS 1 パスの存在確認 (ディレクトリの場合は末尾に\を付ける)
    ファイルオープン定数 ファイルオープン方法を指定する
    F_READ 2 ファイルを読む (SJIS、UTF8、UTF16対応)
    F_WRITE 4 単一指定ではファイルを上書きする (UTF-8)
    F_READと併記した場合(F_READ or F_WRITE)は元のファイルのエンコーディングを維持
    F_WRITE1 8 SJISで書き込む
    F_WRITE8 16 UTF-8で書き込む
    F_WRITE8B 32 BOM付きUTF-8で書き込む
    F_WRITE16 64 UTF-16LEで書き込む
    いずれもF_READと併記した場合はエンコーディングを変更する
    F_APPEND 1024 文末追記モード、F_WRITE系と併記でエンコーディング指定
    F_WRITEF_WRITE8B はUTF-8になります
    オプション定数 適用する場合はファイルオープン定数にor連結する
    F_NOCR 128 文末に改行を入れない
    F_TAB 256 CSVセパレータをカンマではなくタブ文字にする
    F_EXCLUSIVE 512 排他モードでファイルを開く
// 読み取り
fid = fopen(path) // fopen(path, F_READ) と同等
print fget(fid, 1)
fclose(fid)

// 書き込み
fid = fopen(path, F_WRITE)
fput(fid, text)
fclose(fid) // 上書きされる

// 読み書き
fid = fopen(path, F_READ or F_WRITE)
print fget(fid, 1)
fput(fid, text)
fclose(fid) // 編集して保存

// エンコーディングを変更して保存
fid = fopen(path, F_WRITE1) // SJISでファイルを書き込み
fput(fid, text1)
fclose(fid)

fid = fopen(path, F_READ or F_WRITE16)
fput(fid, text2)
fclose(fid) // 編集してUTF-16で保存

// 追記
fopen(path, F_APPEND or F_WRITE16, text) // UTF-16で末尾に追記
fopen(path, F_APPEND) // エラー; F_APPEND指定時は第三引数が必須

// 自動ファイルクローズ
print fget(fopen(path, F_READ), F_ALLTEXT)
// ファイル識別子を変数に代入しなかった場合は読み書き関数実行後に自動でファイルが閉じられます

FGET

対応バージョン: 0.6.0

fopenで開いたファイルの内容を読み取ります
fopenの際にF_READをモードに指定する必要があります

文字列 = fget(ファイルID, 行, 列=0, ダブルクォート無視=FALSE)
変数名 種別 説明
ファイルID ファイルID 必須 fopenが返したファイルID
数値 必須 読み取る行番号
数値 省略可 読み取るcsv列
0で行全体を読み取る (デフォルト)
ダブルクォート無視 真偽値 省略可 csv列読み取り時(列が1以上の場合)のみ有効
TRUEならダブルクォートを無視する
FALSEならダブルクォート内を値と見なす
FALSE時 " は エスケープが必要 ""
"fo""o","bar","baz"fo"o,bar,baz と同じ
fid = fopen("test.csv", F_READ)

print fget(fid, 1) // foo,bar,baz
print fget(fid, 1, 1) // foo
// 前後のホワイトスペースはトリムされる
print fget(fid, 2, 1) // 「    foo   」にはならず「foo」が返る
// ダブルクォートで括られたカラム
print fget(fid, 3, 1, FALSE) // ダブルクォートありのカラム
print fget(fid, 3, 1, TRUE)  // "ダブルクォートありのカラム"
// 第4引数FALSEはUWSCにおける 2 の動作が標準になりました
print fget(fid, 3, 2, FALSE) // ダブルクォートの"エスケープ"
print fget(fid, 3, 2, TRUE)  // "ダブルクォートの""エスケープ"""
// 改行を含むカラムのサポート
// 第4引数がFALSEかつ改行を含む文字列がダブルクォートで括られている場合のみ
print fget(fid, 4, 1, FALSE) // 改行を
                             // 含む
print fget(fid, 4, 2, FALSE) // ここはまだ4行目

fclose(fid)
  • test.csv

    foo,bar,baz
        foo   ,    bar   ,  baz 
    "ダブルクォートありのカラム","ダブルクォートの""エスケープ""",""
    "改行を
    含む","ここはまだ4行目"
    

FPUT

対応バージョン: 0.6.0

fopenで開いたファイルに書き込みを行います fopenの際にF_WRITE系をモードに指定する必要があります

fput(ファイルID, 値, 行=0, 列=0)
変数名 種別 説明
ファイルID ファイルID 必須 fopenが返したファイルID
文字列 必須 書き込む値
数値 省略可 0の場合文末に追記
1以上の場合は指定行に書き込み
F_ALLTEXTの場合ファイル全体に上書き
数値 省略可 0の場合行全体に書き込み
1以上の場合はcsvカラムとして書き込み
F_INSERT の場合指定行に挿入
(F_READがない場合F_INSERTは無視される)

FDELLINE

対応バージョン: 0.6.0

ファイルの指定行を削除します
fopenの際にF_READおよびF_WRITE系をモードに指定する必要があります

fdelline(ファイルID, 行)
変数名 種別 説明
ファイルID ファイルID 必須 fopenが返したファイルID
数値 必須 削除する行の番号 (1から)
存在しない行を指定した場合なにもしない

FCLOSE

ファイルを閉じます
fputfdellineによる書き込みはfclose()を呼ぶまで反映されません

成否 = fclose(ファイルID, エラー抑止=FALSE)
変数名 種別 説明
ファイルID ファイルID 必須 fopenが返したファイルID
エラー抑止 真偽値 省略可 TRUEでエラーを無視する
成否 真偽値 戻り値 ファイルが閉じられればTRUE
エラー抑止がTRUEでエラーが発生した場合は必ずFALSEが返ります

READINI

対応バージョン: 0.6.0

iniファイルから値を読み出します

値 = readini(セクション=EMPTY, キー=EMPTY, ファイル=EMPTY)
変数名 種別 説明
セクション 文字列 省略可 iniファイルのセクション名
EMPTY セクション一覧を取得する場合
キー 文字列 省略可 セクション内のキー名
EMPTY キー一覧を取得する場合
ファイル 文字列 iniファイルのパス
EMPTY "<#GET_UWSC_NAME>.ini"から読み出し
ファイルID fopenが返したファイルID (要F_READ)
文字列 戻り値 該当キーの値
EMPTY 該当キーがない、またはファイルがない・開けないなど
配列 セクションを省略した場合はセクションのリスト
配列 キー一覧を省略した場合はセクション内のキーのリスト
ini = 'test.ini'
print readini('foo', 'name', ini) // foo

// セクションを省略(またはEMPTY指定)するとセクション一覧を取得
print readini( , , ini) // [ section, foo, bar, baz ]
print readini( , 'name', ini) // ↑と同じ結果 (キーを渡しても無視される)

// セクションを指定してキーを省略(またはEMPTY指定)するとキー一覧を収録
print readini('section', , ini) // [ key1, key2, key3 ]
  • test.ini

    [section]
    key1=""
    key2=""
    key3=""
    [foo]
    name="foo"
    [bar]
    name="bar"
    [baz]
    name="baz"

WRITEINI

対応バージョン: 0.6.0

iniファイルに値を書き出します

writeini(セクション, キー, 値, ファイル=EMPTY)
変数名 種別 説明
セクション 文字列 必須 iniファイルのセクション名
キー 文字列 必須 セクション内のキー名
文字列 必須 該当キーに書き込む値
ファイル 文字列 iniファイルのパス
EMPTY "<#GET_UWSC_NAME>.ini"へ書き込み
ファイルID fopenが返したファイルID (要F_WRITE)
値を書き換える場合はF_READも必要
ファイルIDを渡した場合fcloseするまで反映されません

DELETEINI

対応バージョン: 0.6.0

該当キーまたはセクションを削除します

deleteini(セクション, キー=EMPTY, ファイル=EMPTY)
変数名 種別 説明
セクション 文字列 必須 iniファイルのセクション名
キー 文字列 省略可 削除するキー
EMPTY キー省略時はセクション全体が削除される
ファイル 文字列 iniファイルのパス
EMPTY "<#GET_UWSC_NAME>.ini"へ書き込み
ファイルID fopenが返したファイルID (要F_READ or F_WRITE)
ファイルIDを渡した場合fcloseするまで反映されません

INI関数のfid利用

iniファイルをfopenで開いて各INI関数で読み書きができます
各INI関数にファイルパスの代わりにfidを渡します

ini = fopen("hoge.ini", F_READ or F_WRITE)
// ファイルパスの代わりにfidを指定
print readini("hoge", "fuga", ini)        // 読む場合はF_READが必要
writeini("hoge", "fuga", "fugafuga", ini) // 書き込みにはF_READ or F_WRITEが必要
deleteini("hoge", "fuga", ini)            // 削除にもF_READ or F_WRITEが必要

fclose(ini) // iniファイルへの書き込みが反映される

以下のような用途を想定しています

  • 一度に何度もINI系関数を呼ぶ場合にファイルを開いたままにしておきたい
  • iniファイルへのアクセス中も排他制御(F_EXCLUSIVE)したい

DELETEFILE

対応バージョン: 0.6.0

指定したファイルを削除します
* によるワイルドカード指定も可能

結果 = deletefile(パス)
変数名 種別 説明
パス 文字列 必須 削除したいファイルのパス
* を含めるとワイルドカードとなり該当する複数のファイルが削除される
結果 真偽値 戻り値 削除に成功したらTRUE
ファイルが存在しない、または削除時にエラーが生じた場合はFALSE

GETDIR

対応バージョン: 0.6.0

対象ディレクトリに含まれるファイルまたはディレクトリの一覧を取得します

リスト = getdir(ディレクトリ, フィルタ="*", 不可視フラグ=FALSE, 取得順=ORDERBY_NAME)
変数名 種別 説明
ディレクトリ 文字列 必須 対象ディレクトリのパス
フィルタ 文字列 省略可 ファイル名フィルタ、ワイルドカード(*,?)利用可
\ を入れるとファイル一覧ではなくディレクトリ一覧を返す
不可視フラグ 真偽値 省略可 非表示ファイルを含めるかどうか、デフォルトは含めない(FALSE)
取得順 定数 省略可 取得順を示す定数
ORDERBY_NAME (0) ファイル名
ORDERBY_SIZE (1) サイズ
ORDERBY_CREATED (2) 作成日時
ORDERBY_MODIFIED (3) 更新日時
ORDERBY_ACCESSED (4) 最終アクセス日時
リスト 配列 戻り値 該当するファイルまたはディレクトリの名前一覧
※ GETDIR_FILESは廃止
/*
    C:\test\
        foo1.txt
        foo2.txt
        bar.txt
        baz.txt
        hidden.txt (隠しファイル)
        dir1\
        dir2\
        folder1\
        folder2\
*/

// ファイル一覧の表示
print getdir('C:\test') // [foo1.txt, foo2.txt, bar.txt, baz.txt]
// ファイル名のフィルタ
print getdir('C:\test', 'foo*') // [foo1.txt, foo2.txt]
// 隠しファイルも表示
print getdir('C:\test', , TRUE) // [foo1.txt, foo2.txt, bar.txt, baz.txt, hidden.txt]
// フォルダ一覧の表示
print getdir('C:\test', '\') // [dir1, dir2, folder1, folder2]
// フォルダ一名のフィルタ
print getdir('C:\test', '\dir*') // [dir1, dir2]

DROPFILE

対応バージョン: 未実装

対象ウィンドウにファイルをドロップします

dropfile(ウィンドウID, ディレクトリパス, ファイル名, [ファイル名, ファイル名, ...])
dropfile(ウィンドウID, x, y, ディレクトリパス, ファイル名, [ファイル名, ファイル名, ...])
変数名 種別 説明
ウィンドウID 数値 必須 対象ウィンドウのID
x, y 数値 ドロップ位置の相対座標 (未指定時は中央)
ディレクトリパス 文字列 必須 ドロップしたいファイルのあるディレクトリのパス
ファイル名 文字列 必須 ドロップするファイル名、10個まで指定可能 (x,y指定時は8個まで)
配列 ファイル名を要素に持つ配列による指定も可能
id = getid( , "CabinetWClass") // Explorer

dropfile(id, "C:\test", "foo.txt") // C:\test\foo.txtをドロップ
dropfile(id, "C:\test", "foo.txt", "bar.txt", "baz.txt") // 10個まで指定可能

dropfile(id, "C:\test", ["foo.txt", "bar.txt", "baz.txt"]) // 配列指定も可能
bmps = getdir("C:\test", "*.bmp")
dropfile(id, "C:\test", bmps) // getdirで得たファイル名を渡す

// 第二第三引数が数値なら対象ウィンドウの相対座標として扱いその位置へドロップする
dropfile(id, 100, 100, "C:\test", "foo.txt")

ZIP

対応バージョン: 0.6.0

zipファイルを新規に作成します

結果 = zip(zipファイル, ファイル, [ファイル, ...])
変数名 種別 説明
zipファイル 文字列 必須 zipファイルのパス
ファイル 文字列 必須 zipファイルに含めたいファイルのパス
配列 ファイルパスの配列
指定できる引数は10個まで (それ以上の場合は配列指定してください)
結果 真偽値 戻り値 成功時TRUE
files = [
    'foo.uws',
    'bar.uws',
    'baz.uws',
    'modules\qux.uws',
    'modules\quux.uws'
]

zip("test.zip", files)

UNZIP

対応バージョン: 0.6.0

zipファイルを指定フォルダに展開します
(パスワード付きzipファイルは非対応)
展開先フォルダが存在しない場合は作成されます
既に同名ファイルが存在する場合は上書きされます

結果 = unzip(zipファイル, 展開先)
変数名 種別 説明
zipファイル 文字列 必須 zipファイルのパス
展開先 文字列 必須 展開先フォルダパス
結果 真偽値 戻り値 成功時はTRUE
失敗した場合でも一部のファイルが展開されることがあります
unzip("test.zip", "out")

for file in getdir("out")
    print file
next
for dir in getdir('out', '\')
    for file in getdir("out\<#dir>")
        print "<#dir>/<#file>"
    next
next
// foo.uws
// bar.uws
// baz.uws
// modules\qux.uws
// modules\quux.uws

ZIPITEMS

対応バージョン: 0.6.0

zipファイルに含まれるファイル一覧を取得します
(パスワード付きzipファイルでも取得可能)

ファイル一覧 = zipitems(zipファイル)
変数名 種別 説明
zipファイル 文字列 必須 zipファイルのパス
ファイル一覧 配列 戻り値 ファイル一覧
フォルダの区切りは/です
for item in zipitems("test.zip")
    print item
next
// foo.uws
// bar.uws
// baz.uws
// modules/qux.uws
// modules/quux.uws
⚠️ **GitHub.com Fallback** ⚠️