FCLOSEエフクローズ関数

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

ファイルを閉じます。第一引数にはFOPEN関数で返すファイルのIDを指定します。

構文
  1. Boolean = FCLOSE( ファイルID, エラー処理 )
引数
ファイルID (Integer)必須
オープン時に返されたID
エラー処理 (Boolean = False)省略可
FALSE
エラー時はエラーダイアログを出す(デフォルト)
TRUE
エラーダイアログを出さない
戻り値
TRUE
正常終了
FALSE
エラー有り

使い方

書き込み処理中にエラーが発生した場合もファイルを閉じる。

UWSC
DIM FOPEN(filename, F_READ OR F_WRITE)

TRY
	// エラーが発生する可能性のある処理
FINALLY
	FCLOSE(FID)
ENDTRY

プログラム実行例

システム起動時間を取得

システムの起動時間を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
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

関連記事

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