テクニカルノート03: シンプル ファイル アクセス

March 12, 2003

© NSB Corporation. All rights reserved.

Go to English page.
マイクロソフト社のドキュメントも参考にして下さい。

Simple File I/O は、 Fileオブジェクトを使用しながらNS Basic/CEを通してコントロール可能です。Fileオブジェクトを始動するには、以下のステートメントを実行して下さい。

このオブジェクトに関する追加資料は、MicrosoftのWebサイトにて入手可能です。

addObject "file"

本ドキュメントの最後に、このオブジェクトを使ったサンプルコードがあります。

File Properties

プロパティ

説明

Attr

Openステートメントで使用されるファイルモードを返す。

Eof

ファイルの最後に到達したかを示すTrue/Falseを返す。

Loc

開いているファイルの現在のRead/Writeポジションを返す。

Lof

開いているファイルのサイズをバイト値で返す。

Seek

開いているファイルの次のRead/Writeポジションを設定または返す。

 

File Methods

タイプ

メソッド

説明

開く

Open pathname,mode [,access][,lock][,reclen]

ファイルへの入力/出力 (I/O) を可能にする。

Mode: ファイルモードを指定
0: 閉じた状態
1: 入力
2: 出力
4: ランダム
8: 付け加え
32: バイナリ(二進)

Access: ファイル上で可能なオペレーション
1: 読み込み
2: 書き込み
3: 読み込み及び書き込み(デフォルト)

Lock: ファイル上で他のプロセスにより可能にされるオペレーション
1: 共有
2: 読み込みのロック
3: 書き込みのロック(デフォルト)
5: 読み込み及び書き込みのロック

reclenは最高で32767まで

閉じる

Close

Openステートメント使用して、開いているファイルへの入力/出力を終了する。

読む

Get data[,recNumber]

開いているディスクファイルから変数へデータを読み込む。

InputFields(n)

開いているシークエンスファイルから n 個のデータフィールドを読み込み、変数にそのデータを割り当てる。WriteField参照。

Input (number)

InputまたはBinaryモードの開いているファイルから、numberで示された文字数の文字列を返す。Put参照。

InputB (number)

InputまたはBinaryモードの開いているファイルから、numberで示されたバイト数の文字列を返す。

LineInputString()

開いているシークエンスファイルから1ライン読み込み、文字列変数に割り当てる。LinePrint参照。

書く

LinePrint()

テキスト文字列をファイルに書き込む。

Put data[,recNumber]

変数からディスクファイルへデータを書き込む。

WriteFields

シークエンスファイルへデータを書き込む。アイテム毎にカンマを入れ、文字列は引用符で囲み、各WriteFieldリストの最後にnewline文字を入れる。

 

サンプルコード 

 

REM This program demonstrates the use of the File and Filesystem Controls

Option Explicit
Dim selection
addObject "filesystem"
addObject "file"

selection=0

while selection<>9
  selection=inputbox("Choose test number:" & chr(13) & "1. Attr" & chr(13) & "2. Dir" & chr(13) & "3. Get/Put" & chr(13) & "4. Line Write" & chr(13) & "5. Write/Read" & chr(13) &  "9. End Program", "File System Demo")
select case selection
  case 1
    cmdAttr_click
  case 2
    cmdDir_click
  case 3
    cmdGetPut_click
  case 4
    cmdLineWrite_click
  case 5
    cmdWrite_click
  case else
    selection=9
  end select
wEnd

Private Sub cmdAttr_Click()
  On Error Resume Next
  Dim sTheFile
   
  sTheFile = inputBox("Enter file name:","ATTR Command")
   
  msgbox "GetAttr:" & fileSystem.GetAttr(sTheFile) & chr(13) & "FileDateTime:" & fileSystem.FileDateTime(sTheFile) & chr(13) & "FileLen:" & fileSystem.fileLen(sTheFile),0,"File Attributes for " & sTheFile
  If Err <> 0 Then
    MsgBox "Error in GetAttr: " & Err.Description
    Err.Clear
  End If
   
End Sub

Private Sub cmdDir_Click()
  Dim sDir, sMsg, input

  input = inputBox("Enter file name (wildcards OK)","DIR Command")
  sDir = filesystem.dir(input)
  sMsg = "Directory contents of " & input & ": " & vbCrLf & sDir
  While (sDir <> "")
    sDir = fileSystem.Dir()
    If sDir <> "" Then
      sMsg = sMsg & ", " & sDir
    End If
  Wend
   
  msgbox  sMsg
End Sub

Private Sub cmdGetPut_Click()
  WriteUsingPut
  ReadUsingGet
End Sub

Private Sub cmdLineWrite_Click()
  Writeline
  Readline
End Sub

Private Sub cmdWrite_Click()
  WriteUsingControl
  ReadUsingControl
End Sub

Sub WriteUsingPut()
  On Error Resume Next
  Dim myArray
  ReDim myArray(6)
  file.Open "ceGetPut.txt", 4, 2, 3, 500 'fsAccessWrite

  myArray(1) = 1
  myArray(2) = "This is a string"
  myArray(3) = True
  myArray(4) = Date
  myArray(5) = 63.12

  file.Put myArray
  If Err <> 0 Then
    MsgBox "Error in WriteUsingPut: " & Err.Description
    err.clear
  End If

  myArray(1) = 2
  myArray(2) = "This is a string2"
  myArray(3) = True
  myArray(4) = Date + 1
  myArray(5) = 63.12
  file.Put myArray

  myArray(1) = 3
  myArray(2) = "This is a string3"
  myArray(3) = True
  myArray(4) = #11/16/34#
  myArray(5) = 63.12
  file.Put myArray

  msgbox "done with Put", 0, "Put"
  file.Close
End Sub

Sub ReadUsingGet()
  Dim myArray,i,msgString
  On Error Resume Next
  file.Open "ceGetPut.txt", 4, 1, 3, 500
  file.Get myArray, 2

  msgString = myArray(1)
  For i = 2 To UBound(myArray)
    msgString = msgString & ", " & myArray(i)
  Next

  msgBox msgString,0,"Contents of ceGetPut.txt"
  file.Close
End Sub

Sub WriteUsingControl()
  Dim myArray
  ReDim myArray(10)

  myArray(1) = Date
  myArray(2) = "This is a string with a "" (quote)."
  myArray(3) = True
  myArray(4) = #11/16/34#
  myArray(5) = 63.12
  myArray(6) = "Text"
  myArray(7) = Null
  myArray(8) = ""

  file.Open "ceWrite.txt", 2 'fsModeOutput
  file.WriteFields myArray
  file.Close
End Sub

Sub ReadUsingControl()
  Dim myArray, msgString, i
  file.Open "ceWrite.txt", 1 'fsModeInput
  myArray = file.InputFields(10)
    
  msgString = myArray(1)
  For i = 2 To UBound(myArray, 1)
    msgString = msgString & ", " & myArray(i)
  Next
    
  msgbox msgString,0,"Contents of ceWrite.txt"
  file.Close
End Sub

Sub Writeline()
  On Error Resume Next
  file.Open "ceLine.txt", 2 'fsModeOutput
  If Err <> 0 Then
    MsgBox "Error in writeline: " & Err.Description
    Err.Clear
  End If
  file.LinePrint "Hier ist unser erste Linie."
  file.LinePrint "Hier ist unser zweite Linie."
  file.Close
End Sub

Sub Readline()
  file.Open "ceLine.txt", 1 'fsModeInput
  dim sOut
  sOut = file.LineInputString()
  sOut =sOut & Chr(13) & file.LineInputString()
  msgBox sOut,0,"Contents of ceLine.txt"

  file.Close
End Sub