FOPENエフオープン関数

本ページには広告が含まれています。

テキストファイルを開きファイルIDを返します。ファイルが存在しない場合は自動で生成されますが、親フォルダーが存在しない場合はエラーが発生します。

構文
  1. return = FOPEN( ファイル名, オープンモード )
引数
ファイル名 (String)必須
テキストファイル名
オープンモード (#fopen = F_READ)省略可
以下の方法で指定
F_READ
読み専用モード(デフォルト)SJISUTF8UTF16に対応
F_WRITE
書き専用モード(既にファイルがあれば前の情報は消去)
UNICODEがある場合に UTF8、無い場合にはSJISになる)
F_READ or F_WRITE
読み書き両用指定
F_EXISTS
ファイル存在チェック(ファイルオープンせずにファイルが存在するかを返す)
(ディレクトリをチェックしたい場合は最後に\を付加)
追加指定
F_EXCLUSIVE
排他制御(排他制御の読み書き:F_READ or F_WRITE or F_EXCLUSIVE
F_TAB
CSV処理に対しカンマではなくタブを使用
F_NOCR
書き込みにてファイルの最後の改行は付加しない
F_WRITE or F_NOCR
※文字コードを指定したい場合は、F_WRITEの代わりに以下を指定する
F_WRITE8:UTF8、F_WRITE8B:BOM付きUTF8、 F_WRITE16:UTF16、F_WRITE1:SJIS
戻り値

ファイルID(Integer型)

オープンできなかった場合は-1(Char型)を返す

F_EXISTS指定時はTRUE(在り)/FALSE(無し)を返す

ファイルを開くのに失敗したとき

以下のようなダイアログが表示されます。存在しないフォルダを指定していないか確認してください。

UWSC
path: Can't be written in
中断しますか?

使い方

読み専用で開く

ファイルの内容を取得するときに使用します。書き込みはできません。

UWSC
DIM FID = FOPEN(filename, F_READ)

書き専用で開く

ファイルに書き込むときに使用します。読み取りはできません。

UWSC
DIM FID = FOPEN(filename, F_WRITE)

読み書きで開く

ファイルの読み書きを行うときに使用します。

UWSC
DIM FID = FOPEN(filename, F_READ OR F_WRITE)

ファイルが存在するかチェック

UWSC
DIM bool = FOPEN(filename, F_EXISTS)

フォルダーが存在するかチェック

フォルダーの最後には「\」をつけます。

UWSC
DIM bool = FOPEN(folderspec, F_EXISTS)

CSVファイルをタブを区切り文字として開く

UWSC
DIM FID = FOPEN(filename, F_WRITE OR F_TAB)

ファイルの最後で改行しない

UWSC
DIM FID = FOPEN(filename, F_WRITE OR F_NOCR)

文字コードUTF8で書き込み

UWSC
DIM FID = FOPEN(filename, F_WRITE8)

文字コードBOMつきUTF8で書き込み

UWSC
DIM FID = FOPEN(filename, F_WRITE8B)

文字コードUTF16で書き込み

UWSC
DIM FID = FOPEN(filename, F_WRITE16)

文字コードSJISで書き込み

UWSC
DIM FID = FOPEN(filename, F_WRITE1)

一時ファイル(テンポラリファイル)で開く

UWSC
DIM FID = FOPEN("", F_READ OR F_WRITE)

プログラム実行例

フォルダの存在チェック

UWSC
PRINT FOPEN("D:\Desktop\sample\", F_EXISTS)
結果
プレーンテキスト
True
使用関数

システム起動時間を取得

システムの起動時間をyyyy/mm/dd, hh:nn:ssの形式で取得します。

UWSC
HASHTBL INFO

DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")

DIM filename = uniqueFilename(FSO.BuildPath(GET_CUR_DIR, "SYSTEMINFO.csv"))
FID = FOPEN(filename, F_READ OR F_WRITE)
FPUT(FID, DOSCMD("systeminfo /FO CSV"))
FCLOSE(FID)

FID = FOPEN(filename, F_READ OR F_WRITE)
FOR col = 0 TO 33
	INFO[FGET(FID, 1, col)] = FGET(FID, 2, col)
NEXT
FCLOSE(FID)

FSO.DeleteFile(filename)

PRINT INFO["システム起動時間"]
結果
プレーンテキスト
2019/12/21, 15:53:56
使用関数
解説

Windowsの稼働時間を取得

Windowsシステムの起動時間から稼働時間を求めます。

結果はd:hh:nn:ssの形式で出力されます。

UWSC
HASHTBL INFO

DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")

DIM filename = uniqueFilename(FSO.BuildPath(GET_CUR_DIR, "SYSTEMINFO.csv"))
DIM FID = FOPEN(filename, F_READ OR F_WRITE)
FPUT(FID, DOSCMD("systeminfo /FO CSV"))
FCLOSE(FID)

FID = FOPEN(filename, F_READ OR F_WRITE)
DIM col = 1

WHILE FGET(FID, 1, col) <> ""
	INFO[FGET(FID, 1, col)] = FGET(FID, 2, col)
	col = col + 1
WEND

FCLOSE(FID)

FSO.DeleteFile(filename)

DIM startupTime = INFO["システム起動時間"]
DIM date1 = dateValue(startupTime) + timeValue(startupTime)
DIM date2 = uwscToSerial(GETTIME())
PRINT INT(date2 - date1) + ":" + text(date2 - date1, "hh:mm:ss")
結果
プレーンテキスト
0:08:16:46
使用関数
解説

テキストファイルの内容を行毎にソートして出力する

UWSC
DIM FID = FOPEN("D:\Documents\sample.txt", F_READ)
DIM array[-1]

FOR i = 1 TO FGET(FID, F_LINECOUNT)
	arrayPush(array, FGET(FiD, i))
NEXT

FCLOSE(FID)

QSORT(array, QSRT_A)

FOR i = 0 TO UBound(array)
	PRINT array[i]
NEXT
使用関数

テキストファイルの内容を行毎にソートして書き換える

UWSC
DIM FID = FOPEN("D:\Documents\sample.txt", F_READ OR F_WRITE)
DIM array[-1]

FOR i = 1 TO FGET(FID, F_LINECOUNT)
	arrayPush(array, FGET(FiD, i))
NEXT

QSORT(array, QSRT_A)

FPUT(FID, "", F_ALLTEXT)

FOR i = 0 TO UBound(array)
	FPUT(FID, array[i], i + 1)
NEXT

FCLOSE(FID)
使用関数

テキストファイルを行毎に読み上げる

UWSC
DIM FID = FOPEN("D:\Documents\sample.txt", F_READ)

FOR i = 1 TO FGET(FID, F_LINECOUNT)
	FUKIDASI(i)
	SPEAK(FGET(FID, i))
	SLEEP(1.000)
NEXT

FCLOSE(FID)

ファイルが存在するかをチェック

UWSC
PRINT FOPEN("D:\Desktop\sample.txt", F_EXISTS)
結果
プレーンテキスト
True
使用関数

特定の文字列の行を削除

UWSC
DIM FID = FOPEN("D:\Documents\sample.txt", F_READ OR F_WRITE)

FOR i = FGET(FID, F_LINECOUNT) TO 1 STEP -1
	IF FGET(FID, i) = "aaa" THEN FDELLINE(FID, i)
NEXT

FCLOSE(FID)
使用関数

特定の文字列を含む行を削除

UWSC
DIM FID = FOPEN("D:\Documents\sample.txt", F_READ OR F_WRITE)

FOR i = FGET(FID, F_LINECOUNT) TO 1 STEP -1
	IFB POS("aaa", FGET(FID, i)) <> 0 THEN
		FDELLINE(FID, i)
	ENDIF
NEXT

FCLOSE(FID)

csvファイルをHTMLのテーブルデータにする(csvToHTML)

CSVのデータをHTML(テーブル)に変換します。

クリップボードにcsvファイルのパスをコピーして実行します。

UWSC
CONST TemporaryFolder = 2

DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM Folder = FSO.GetSpecialFolder(TemporaryFolder)
DIM folderspec = Folder.Path
DIM name = FSO.GetTempName
DIM TempPath = FSO.BuildPath(folderspec, name)

DIM path = GETSTR(0)
DIM FID = FOPEN(path, F_READ)
DIM FID2 = FOPEN(TempPath, F_READ OR F_WRITE)
FPUT(FID2, "<table>", F_ALLTEXT)

FOR row = 1 TO FGET(FID, F_LINECOUNT)
	DIM col = 1
	FPUT(FID2, "<#TAB><tr>", 0)
	WHILE FGET(FID, row, col) <> ""
		FPUT(FID2, "<#TAB><#TAB><td>" + (FGET(FID, row, col)) + "</td>", 0)
		col = col + 1
	WEND
	FPUT(FID2, "<#TAB></tr>", 0)
NEXT
FPUT(FID2,"</table>", 0)

FCLOSE(FID)
FCLOSE(FID2)

FID = FOPEN(TempPath, F_READ)
SENDSTR(0, FGET(FID, F_ALLTEXT))
PRINT FGET(FID, F_ALLTEXT)
FCLOSE(FID)
使用関数
解説

歌ネットから歌詞を取得してテキストファイルに保存

UWSC
CONST ssfDesktop = 0

DIM IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.Visible = TRUE
IE.Navigate("https://www.uta-net.com/song/280568/")
BusyWait(IE)

DIM element, elements, name, lyrics

element = IE.document.getElementById("view_kashi")
elements = element.getElementsByClassName("title")
name = TRIM(elements.Item(0).innerText)

element = IE.document.getElementById("kashi_area")
lyrics = element.innerText

IE.Quit

DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace(ssfDesktop)
DIM path = Folder.Self.Path
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
path = uniqueFilename(FSO.BuildPath(path, name + ".txt"))

DIM FID = FOPEN(path, F_READ OR F_WRITE)
FPUT(FID, lyrics)
FCLOSE(FID)
使用関数

ファイルを開いているプロセスを調べる

UWSC
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")

CONST TemporaryFolder = 2

DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")

WITH FSO
	DIM Folder = .GetSpecialFolder(TemporaryFolder)
	DIM folderspec = Folder.Path
	DIM filename = .GetTempName
	DIM path = .BuildPath(folderspec, filename)
ENDWITH

DIM Shell = CREATEOLEOBJ("Shell.Application")
Shell.FileRun()

DIM ID = GETID("ファイル名を指定して実行", "#32770")

SENDSTR(ID, "cmd /c openfiles /query /fo CSV > " + path)
CLKITEM(ID, "OK", CLK_BTN)
SLEEP(0.500)

REPEAT
	SLEEP(0.100)
UNTIL GETID("C:\WINDOWS\system32\cmd.exe", "ConsoleWindowClass") = -1

DIM FID = FOPEN(path, F_READ)

TRY
	DIM ID2 = GETID("使用中", "OperationStatusWindow")

	GETITEM(ID2, ITM_ACCTXT, 1)
	DIM str = ALL_ITEM_LIST[1]
	
	DIM sep = IIF(POS("フォルダー", STATUS(ID2, ST_TITLE)) <> 0, "\", "")
	DIM msg = "■" + str + "<#CR>"
	
	FOR r = 5 TO FGET(FID, F_LINECOUNT)
		IF POS("\" + str + sep,  FGET(FID, r, 3)) <> 0 THEN
			msg = msg + "ID:" + FGET(FID, r, 1) + ", プロセス名:" + FGET(FID, r, 2) + "<#CR>"
		ENDIF
	NEXT
	FCLOSE(FID)

	REPEAT
		FUKIDASI(TRIM(msg))
		SLEEP(0.100)
	UNTIL GETID("使用中", "OperationStatusWindow") = -1
FINALLY
	FSO.DeleteFile(path)
ENDTRY
使用関数
解説

一時ファイル

UWSC
DIM FID = FOPEN("", F_READ OR F_WRITE)
FPUT(FID, data, F_ALLTEXT)

FOR r = 1 TO FGET(FID, F_LINECOUNT)
	FOR c = 1 TO 4
		PRINT FGET(FID, r, c)
	NEXT
NEXT

FCLOSE(FID)

TEXTBLOCK data
12, 22, 45, 61
42, 53, 45, 98
ENDTEXTBLOCK

関連記事

FCLOSE関数 (スクリプト関数)
テキストファイルを閉じます。
FDELLINE関数 (スクリプト関数)
テキストファイルの指定行を削除します。
FGET関数 (スクリプト関数)
テキストファイルの読み込みを行います。
FPUT関数 (スクリプト関数)
テキストファイルの書き込みを行います。
DELETEFILE関数 (スクリプト関数)
テキストファイルを削除します。
GETDIR関数 (スクリプト関数)
Folder.CopyHere メソッド (Shell)
1つまたは複数のアイテムをフォルダにコピーします。
Folder.MoveHere メソッド (Shell)
1つまたは複数のアイテムをこのフォルダに移動します。
FileSystemObject オブジェクト
FSO.DeleteFile メソッド
指定したファイルを削除します。