ファイル入出力 †
初心者にとってファイル入出力はプログラミングの一つの関門となっているようです。
そこでファイル入出力の基本的な操作をここでレポートしようと思いました。
各命令の書式はHSP HELPから引用しています。 -- kz3
- 書式
bsave "filename",p1,p2,p3
"filename" : セーブするファイル名
p1=変数 : 変数名
p2=64〜 : セーブするサイズ(Byte単位)
p3=0〜(-1): ファイルのオフセット
- 新規作成(サイズ無調整)
1
2
3
|
| path="C:\\test.txt"
bsave path,path
|
これはファイルの新規作成でテキストの内容は自身のフルパスを書き込んでいます。
が、このファイルを開くと「ヌル」がどうたらとWindowsから言われます。
p2を省略するとバッファのサイズ分書き込まれます。
- 新規作成(サイズ調整)
1
2
3
4
|
| path="C:\\test.txt"
strlen size,path
bsave path,path,size
|
HSP3.2
1
2
3
4
|
| path="C:\\test.txt"
size=strlen(path)
bsave path,path,size
|
バッファのサイズを指定して書込むと、そのサイズだけ書き込まれます。
- 上書き
1
2
3
4
|
| path="C:\\test.txt"
strlen size,path
bsave path,path,size,0
|
HSP3.2
1
2
3
4
|
| path="C:\\test.txt"
size=strlen(path)
bsave path,path,size,0
|
2番目のコードと何が違うのかと言うと、bsaveのp4パラメータを使用しています。
p4は書込み開始位置のオフセットを指定するという事なので、
「初心者の中にはパラメータの省略はあまりしないほうがいい」と思ってファイル先頭位置(ゼロオフセット)から書込む・・・
と思ってp4=0と指定する人もいると思います。
しかしこれはファイルが無かった時にエラーになります。
新規作成にp4パラメータを指定するときは-1を指定します。
このp4パラメータの新規作成/上書きモードの説明がヘルプに文章として書かれていないので起こしやすいミスになります。
※実際私もこのレポートを書くまで分かっておらず、ヌルファイルの作成にnotesaveを使うなどしていました。
1
|
| bsave "C:\\test.txt",null,0,-1
|
と書込みサイズに0を指定するとバッファのサイズだけ書き出されてしまい、ヌルファイルにはなりませんでした・・・。
仕様があやふやだな・・・って思ってしまった。
- HSP3からサイズ0の-1(新規作成)でヌルファイルを作成できるようになりました。 -- kz3
- まとめ
1
2
3
4
5
6
|
| path="C:\\test.txt"
txt="初めてのHSP"
size=strlen(txt)
bsave path,txt,size,-1
txt="2回目"
bsave path,txt,size,0
|
HSP3.2
1
2
3
4
5
6
7
|
| path="C:\\test.txt"
txt="初めてのHSP"
size=strlen(txt)
bsave path,txt,size,-1
txt="2回目"
size=strlen(txt)
bsave path,txt,size,0
|
新規作成/上書きモードの違いが分かるようになるとこのようにスマートにかけます。
最初のbsaveで「初めてのHSP」と書き込んでいますが2つ目のbsaveでファイル先頭から「2回目」と上書きしているので、
「初めて」が「2回目」に書き換えられているのが分かると思います。
- 新規作成限定
1
2
3
4
|
| path="C:\\test.txt"
txt="HSP is fantastic!"
notesel txt
notesave path
|
notesaveは常に新規作成です。
notesave命令を実行する前に対象となる文字列バッファをnotesel命令を使って設定する必要があります。
- 書式
bload "filename",p1,p2,p3
"filename" : ロードするファイル名
p1=変数 : 変数名
p2=64〜 : ロードされるサイズ(Byte単位)
p3=0〜(-1): ファイルのオフセット