CSubFileExport使用マニュアル


HPのTOPに戻る
NSBで使えるライブラリのTOPに戻る

CSubFileExportとサンプルプログラムのダウンロード

CSubFileExportの特徴(と注意点)

簡単な記述でテキストをメモリーカードへ出力可能
 CSubFileExportはNS Basicから非常に簡単なコードの記述のみでメモリーカードへテキストデータを出力出来ます。
 簡単なパラメータ設定により、

 テキストファイルの新規作成(上書き作成)
 テキストファイルへの追記作成(存在するテキストファイルの末尾にテキストデータを追加)

 が可能です。

CSubFileExportはPOSEでテストが出来ない
 現在はCSubFileExportはPOSEでは動作しません。
 テストは必ず実機で行う事になります。
 出来ればテスト用にメモリーカードを用意してテストを行う事をお勧めします。

テキストを書き出すメモリーカードのフォルダは固定
 CSubFileExportを利用したメモリーカードへのテキストデータの書き込みは
 メモリーカードのルートフォルダ/Texts固定になっています。
 これ以外のフォルダには書き込み出来ません。

改行コードについて
 CSubFileExportではテキストの改行コードの変換は行いません。

 WindowsではCR+LF、MacではCRが通常使われる改行コードとなっている為、
 PCでテキストファイルを扱うことを前提にしている場合には、NS Basicアプリ内で改行コードを変換する等してください。
 ※あるいは、PC上の変換ツールなどを使って変換すると良いでしょう。

 Windows、Mac共にこういったツールは幾つかあるようです。
 また、テキストエディタの中にも改行コードの変換を行なってくれるものもあります。

既に存在しているファイルへの上書き、追記
 メモリーカードに同一名のファイルが存在した場合には、そのまま上書きまたは追記されてしまうので注意が必要です。

メモリーカードへ書き出す時のファイル名について
 書き出すファイル名についてはNS Basic側で自由につける事が出来ます。
 ただし以下の点に気をつけて下さい。

 ・VFSマネージャーでのファイル命名規約があるのでそれに準ずる必要があります。
  VFS側で許されていないファイル名を使った場合には予測しない不具合が発生する事があります。

  ※命名規約等についてはSDK付属のドキュメント等をを参照して下さい。
   このページでドキュメントの内容を書いてしまって良いのか判らない為、載せていません。
   SonyのClieデベロッパーページで入手可能なSDK付属のドキュメントには日本語でわかり易く書かれています。

    ※Programmer's Companion for Sony CLIE
     CLIE Software Development Kit Release 3.0 For Palm OS 4.0
     メモリースティックファイルシステム(P251)の章でファイル名の命名規約について書かれています。

 ・英語OSのデバイスでは、殆どの場合2バイト文字のファイル名での書き込みが出来ません。

 ・日本語OSの場合でも、OS4.xでは特定の2バイト文字を含んだファイル名で
  メモリーカードに書き込んだ場合、ファイルが消せなくなる等の不具合があります。


 ・ファイル名のスペースの位置やピリオドの数等によっても問題が発生する事があるようです。

 その為、メモリーカードへの書き込み時にはファイル名に十分注意してご使用下さい。
 特にユーザーが自由にファイル名を指定するようなアプリの場合には、注意が必要だと思います。
 #NS Basic側でファイル名のチェック等を行なう必要があると思います。

 以上のことから、メモリーカードへ書き出すファイル名についてはこういったトラブルを避ける為、
 ・全角文字は極力使わない
 ・ファイル名にスペースを入れたり、ピリオドを入れたりしない(拡張子前のピリオドは別)
 という事で多くのトラブルを未然に防ぐ事が可能です。

 ※ファイル名の問題はCSubFileExportだけの問題では無くVFSマネージャーを使った全ての環境で起こりうる問題です。

CSubFileExportの使用メモリ
 CSubFileExportはメモリーカードにテキストデータを書き出す際に、書き出すデータの量に比例してメモリを消費します。
 その為CSubFileExportの書き込み限界に近いサイズのテキストデータを書き出そうとするとメモリ不足でエラーが発生する可能性があります。
 ※CSubFileExport自身は64KBまでのデータを一括で書き込み事が可能です。

 この作業用のメモリ領域はClie等のハイレゾデバイスならば比較的大きいのですが、
 通常のスクリーン解像度のデバイスでは、比べるとかなり小さくなっています。

 その為、通常解像度のデバイスの方がメモリ不足の問題が発生しやすいと思います。

 また、Hackアプリや機能拡張アプリを沢山利用している環境ですと、さらにメモリ不足問題が起きやすくなると思います。

 回避策としては、一気に沢山のデータを書き出さずに、少しずつ追記モードを使って書き出す事でメモリ不足を回避出来ると思います。
 ※ただしデータを少しずつ書き出すとメモリーカードへのアクセスが増える為、書き出し速度が低下するかも知れません。

 日記帳アプリのえるでは、約32KBまでのデータを一度に書き出すようにしています。
 それ以上のデータの場合には分割して何度かに分けて書き出しています。
 のえる+PEG-S300で幾つかHackが動作している状態でテストしていましたが、エラーが発生した事はありませんでした。


CSubFileExportの使用方法
CSubFileExportが利用可能か調べる
初めに必ずこの方法でデバイスがVFSマネージャーをサポートしているかをチェックして下さい。
使用出来ないデバイスで無理にCSubFileExportを使用するとエラーが発生します。

Res = AppLaunch(0,"CSubFileExport",32768+3,0)
コマンド:32768+3
データ:0

戻り値が0ならばCSubFileExportを使ってメモリーカードへの出力が可能です。
戻り値が0以外ならばメモリーカードへの出力が出来ません。


テキストファイルを新規(上書き)作成する
指定したファイル名でテキストデータを作成します。
もし同一の名前のファイルがメモリーカードの/textsに存在していた場合、そのまま上書きされてしまいます。

vcs="test.txt/"+"Test"+Chr(10)+"Data"+Chr(10)
Res=AppLaunch(0,"CSubFileExport",32768+1,vcs)
コマンド:32768+1
データ:ファイル名/データ

戻り値が0ならば正常にメモリーカードに書き出しました。
戻り値が0以外ならばメモリーカードへの書き出しに失敗しました。

書き出すデータはファイル名とデータを合わせたテキストデータになります。
/(スラッシュ)でファイル名とテキストデータを区切ります。


テキストファイルを追記作成する
同一の名前のファイルがメモリーカードの/textsに存在しなかった場合、エラーとなります。
指定したファイルが存在した場合、そのテキストの最後にデータを追記します。

vcs="test.txt/"+"Test"+Chr(10)+"Data"+Chr(10)
Res=AppLaunch(0,"CSubFileExport",32768+2,vcs)
コマンド:32768+2
データ:ファイル名/データ

戻り値が0ならば正常にメモリーカードに書き出しました。
戻り値が0以外ならばメモリーカードへの書き出しに失敗しました。

書き出すデータはファイル名とデータを合わせたテキストデータになります。
/(スラッシュ)でファイル名とテキストデータを区切ります。


サンプルプログラムの解説
サンプルプログラム
FormのAfterイベントコード
    '---- CSubFileExportの戻り値を格納する変数
    Dim Res as Integer
    
    '---- CSubFileExportが使用可能かを調べる
    Res=AppLaunch(0,"CSubFileExport",32768+3,0)
    If Res=0 Then
        '---- 戻り値が0なら利用可能
        MsgBox "CSubFileExportが利用可能です"
    Else
        '---- 戻り値が0以外なら利用不可
        MsgBox "CSubFileExportは利用不可です"
        Stop
    End If

初めにCSubFileExportが利用出来るデバイスかどうかを必ずチェックして下さい。
このサンプルではフォームAfterイベント内でCSubFileExportが利用可能かをチェックしていますが
どこのイベントで判定するかは自由です。
実際にCSubFileExportが使われる前にチェックしておけばオッケーだと思います。

新規、上書き処理 '---- CSubFileExportからの戻り値を格納する変数 Dim Res as Integer '---- CSubFileExportに渡すパラメータを格納する変数 Dim vcs as String '---- ファイル名を格納する変数 Dim FileName as String '---- Exportするテキストを格納する変数 Dim strData as String '---- Exportする文字列があるかをチェック If Field1004.Text="" Then Exit Sub '---- Exportするファイル名をセット FileName="CSFE_Test.txt" '---- Exportするテキスト内容をセット strData=Field1004.Text '---- CSubFileExprotに渡すデータをセット(ファイル名/テキスト内容) vcs=FileName+"/"+strData '---- CSubFileExprotを実行(新規(上書き)モード) Res=AppLaunch(0,"CSubFileExport",32768+1,vcs) If Res=0 Then '---- 戻り値が0ならば書き込み成功 MsgBox "MCへの新規(上書)書き込みが成功しました。" Else '---- 戻り値が0以外ならば書き込み失敗 MsgBox "MCへの新規(上書)書き込みが失敗しました。" End If ここで実際に書き込みの処理を行います。 まず、空っぽのデータを書き出しても仕方が無いので、データがあるかどうかを判定しています。 次にメモリーカードへ書き出すファイル名を指定します。 ファイル名とデータを区切り文字'/'を間に入れてCSubFileExportに渡すデータを作ります。 今回は新規、上書き処理なのでCSubFileExportへのコマンドが32768+1になります。
追記処理 '---- CSubFileExportからの戻り値を格納する変数 Dim Res as Integer '---- CSubFileExportに渡すパラメータを格納する変数 Dim vcs as String '---- ファイル名を格納する変数 Dim FileName as String '---- Exportするテキストを格納する変数 Dim strData as String '---- Exportする文字列があるかをチェック If Field1004.Text="" Then Exit Sub '---- Exportするファイル名をセット FileName="CSFE_Test.txt" '---- Exportするテキスト内容をセット strData=Field1004.Text '---- CSubFileExprotに渡すデータをセット(ファイル名/テキスト内容) vcs=FileName+"/"+strData '---- CSubFileExprotを実行(追記モード) Res=AppLaunch(0,"CSubFileExport",32768+2,vcs) If Res=0 Then '---- 戻り値が0ならば書き込み成功 MsgBox "MCへの追記書き込みが成功しました。" Else '---- 戻り値が0以外ならば書き込み失敗 MsgBox "MCへの追記書き込みが失敗しました。" End If 追記書き込みの処理もほとんど、新規、上書き処理と変わりません。 変わるところといえば、CSubFileExportへのコマンドが32768+2となる事ぐらいです。

あとがき

CSubLocalSendに引き続き、今関さんが作られたNS Basic用のライブラリの第二段です。
今回のCSubFileExportはメモリーカードへのテキストデータの出力という素晴らしいものです。

そのCSubFileExportの素晴らしさを損なう事無く伝える事が出来たのか心配ですが、
このドキュメントがNS Basicユーザー皆さんに少しでもお役に立てば幸いです。


- Page End -