ファイル

■概要

ファイルの読み書きの流れは、基本的に他の言語と同様です。
ファイルを開き、開いている間に、読み込み、書き込みを行って、
最後にファイルを閉じます。

	tool_0026

■開く

ファイルを開くためには「Openステートメント」を使用します。

●書式
	・書式例
		Open ファイル名(フルパス) For アクセスモード As ファイル番号

	・具体例
		Open "Test.txt" For Output As #fileno

		ファイル名:
			ファイル名は開く予定のファイルのファイル名を
			ファイルパス込みで指定します。
			パス無しで指定した場合は開いているxlsのフォルダの
			ファイルパスが使われます。

		アクセスモード:
			アクセスモードはどのような形式でファイルを開くかということです。
			アクセスモードの種類は以下の表の通りです。

			tool_0027

			Inputは読み込み専用、OutputとAppendは書き込み専用で、
			Outputだと新規ファイルとして書き込みされますが、
			Appendでは既存ファイルに追記という形で書き込まれます。
			RandomはDBアクセスの際に使用するモードで、
			Binaryはバイナリデータとして読み書きをする際に使用します。
		
		ファイル番号:
			VBAでは管理するファイル番号は自分で決めることができ、
			それを開く際にVBAに伝えることで関連付けが行われます。
			ですが、ファイル番号はユニークな番号でなければならないので、
			「FreeFileステートメント」を使用してファイル番号を取得するのが基本です。

			FreeFile:
				現在使用可能なファイル番号を返してくれる

				書式:
					FreeFile

				具体例:
					Dim fileno As Integer

					fileno = FreeFile

■読み込み

●EOF判定
	ファイル読み込みの場合、EOF判定が不可欠です。
	EOFを知るためには「EOF関数」を使用します。

	boolean EOF(ファイル番号):
		引数:
			EOFかどうかを調べるためのファイル番号
		
		戻り値:
			true => EOF
			false => EOFではない
		
		内容:
			ファイル番号のファイルの位置がEOFかどうかを調べる

●ファイル読み込み
	ファイルの読み込みモードがInputで読み込まれたファイル情報の取得には
	「Line Inputステートメント」を使用します。
	Line Inputは読み込まれたファイルから1行単位で読み込んでくれます。

	・書式
		書式例:
			Line Input ファイル番号, 読込先の文字列変数

		具体例:
			Line Input #fileno, str

●EOFまで繰り返し処理の例:
	Dim count As Integer : count = 1

	' EOFじゃなかったら処理を繰り返す
	Do While Not EOF(fileno)
		Dim str As String
		Line Input #fileno, str
		Cells(count, 1).Value = str
	Loop

■書き込み

Outputモードで開かれたファイルへの書き込みには
「Printステートメント」を使用します。
Printステートメントは指定されたファイルに対してデータを書き込みます。
書き込まれたデータには改行コードが自動的に挿入されます。

●書式
	・書式例
		Print ファイル番号, 書き込むデータ

	・具体例
		Print #fineno, "テスト"

■ファイルを閉じる

ファイルを閉じる場合は「Closeステートメント」を使用します。

●書式
	・書式
		Close 閉じるファイル番号

	・具体例
		Close #fileno

	もし、Closeの後ろにファイル番号の指定を行わなければ
	開いてあるファイルが全て閉じます。

■サンプルコード(書き込み)

Sub FileWrite()
	Dim fileno As Integer

	fileno = FreeFile

	Open "Test.txt" For Output As #fileno

	Print #fileno, "テスト"

	Close #fileno
End Sub

実行結果:
	xlsファイルを作ったフォルダにTest.txtが作成される

■サンプルコード(読み込み)

Sub FileRead()
	Dim fileno As Integer

	fileno = FreeFile

	Open "Test.txt" For Input As #fileno

	Dim count As Integer : count = 1
	Do Until EOF(fileno)
		Dim str As String
		Line Input #fileno, str
		Cells(count, 1).Value = str
		count = count + 1
	Loop
	Close #fileno
End Sub

実行結果:
	Test.txtを読み込んだ内容をセルに表示していく

■バイナリファイルへの書き込み

バイナリファイルへの書き込みはPrintではなく、「Putステートメント」を使用します。
それ以外はモード指定でBinaryにするだけで、動作可能です。

●書式
	書式例:
		Put ファイル番号, レコード位置(省略可), 書き出しの内容

	具体例:
		Put #fineno, , data

●コード
	Private Type Param
		m_Hp As Integer
		m_Mp As Integer
		m_At As Integer
		m_Def As Integer
	End Type

	Sub FileWriteB()
		Dim prm As Param

		prm.m_Hp = 10
		prm.m_Mp = 100
		prm.m_At = 1000
		prm.m_Def = 1000

		Dim fileno As Integer
		fileno = FreeFile
		Open "Test.prm" For Binary As #fileno

		Put #fileno, , prm

		Close #fileno
	End Sub

	実行結果:
		Test.prmにParamの情報が書き込まれる