「■バイナリファイル」の編集履歴(バックアップ)一覧はこちら
「■バイナリファイル」(2009/05/31 (日) 17:26:38) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*情報
作者名:五十六
引用元:なし
*概要
ファイルストリームをもっと気軽に扱えるように。
具体的にはストリーム開く、閉じるの自動化。あとモードの自動変更、ファイルストリーム削除を無理やり実装など。
母艦の閉じた時は~を使ってるから複数あると誤作動するかも・・・
参考
ファイルの分割ツールを作ってみよう!(第75回):クジラ飛行机「文系サラリーマンのための仕事に役立つプログラミング入門」
http://pc.nikkeibp.co.jp/article/column/20080522/1003240/?P=2
*解説
[読書メンバ]
・ファイル
・現在位置
・次位置
・バッファサイズ
・ファイルサイズ
[命令メンバ]
※↓4つのA(開始バイト位置)は0起点
・ストリーム読む(AからCNTを)
・ストリーム書く(AからBを|AにBを)
・ストリーム挿入書く(AからBを|AにBを)
・ストリーム削除(AからCNTを)
・ストリーム同位置読む(CNTを)
・ストリーム同位置書く(Aを)
・ストリーム同位置挿入書く(Aを)
・ストリーム続き読む(CNTを)
・ストリーム続き書く(Aを)
・ストリーム続き挿入書く(Aを)
・ストリーム右端読む(CNTを)
・ストリーム右端書く(Aを)
・ストリーム右端削除(CNTを)
・ストリーム初期化
・ストリームファイル削除
・ストリームファイル完全削除
↑説明省略 ノリで
●バイナリアドレス変換
「00000040x0A」とか「0000004A」とかを10進数に直す。
バイナリエディタ風。
*本体
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
母艦の閉じた時は~
バイナリ終了時実行処理。
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
■バイナリファイル
・現在位置{=0}
・次位置{=0}
・バッファサイズ{=524288}/*512KB*/
・{非公開}元ファイル名
・{非公開}一時ファイル名
・{非公開}保持バイト数
・{非公開}経過バイト数
・{非公開}FILE
・ファイル存在
・モード
・ハンドル
・ファイルサイズ
・ファイル ←ファイル設定 →ファイル取得
・ファイル設定(Vに|Vを)~
自身→FILE=V。
自身→現在位置=0。//リセットされます
自身→次位置=0。
もし、Vの存在=はいならば
自身→ファイル存在=はい。
自身→モード=「読」。自身→ハンドル=Vを「読」でファイルストリーム開く。
自身→ファイルサイズ=(自身→ハンドル)のファイルストリームサイズ。
自身→モード=空。(自身→ハンドル)をファイルストリーム閉じる。自身→ハンドル=空。
違えば
自身→ハンドル=空。自身→ファイル存在=いいえ。
自身→ファイルサイズ=空。自身→モード=空。
・ファイル取得(Vを)~それ=V。
・ストリーム初期化~
もし、自身→FILE=空ならば、「ファイルが指定されていません」で戻る。
自身→モード=「作」。自身→ハンドル=(自身→FILE)を「作」でファイルストリーム開く。
自身→モード=空。(自身→ハンドル)をファイルストリーム閉じる。自身→ハンドル=空。
自身→ファイルサイズ=0。自身→ファイル存在=はい。自身→現在位置=0。自身→次位置=0。
・ストリーム読む(AからCNTを)~
もし、自身→FILE=空ならば、「ファイルが指定されていません」で戻る。
もし、(自身→ファイル存在)=いいえならば、「ファイルがありません」で戻る。
もし、(自身→モード=「書」)または(自身→モード=「作」)ならば
自身→モード=空。(自身→ハンドル)をファイルストリーム閉じる。自身→ハンドル=空。
もし、自身→ハンドル=空ならば
自身→モード=「読」。自身→ハンドル=(自身→FILE)を「読」でファイルストリーム開く。
自身→モード=「読」。
自身→現在位置=A。自身→次位置=A+CNT。
(自身→ハンドル)で(自身→現在位置)にファイルストリーム位置設定。
(自身→ハンドル)でCNTをファイルストリーム読む。
それで戻る。
・ストリーム書く(AからBを|AにBを)~
もし、自身→FILE=空ならば、「ファイルが指定されていません」で戻る。
もし、(自身→ファイル存在)=いいえならば、自身→ストリーム初期化。
もし、(自身→モード=「読」)または(自身→モード=「作」)ならば
自身→モード=空。(自身→ハンドル)をファイルストリーム閉じる。自身→ハンドル=空。
もし、自身→ハンドル=空ならば
自身→モード=「書」。自身→ハンドル=(自身→FILE)を「書」でファイルストリーム開く。
自身→モード=「書」。
自身→現在位置=A。自身→次位置=A+(Bのバイト数)。
(自身→ハンドル)で(自身→現在位置)にファイルストリーム位置設定。
(自身→ハンドル)でBをファイルストリーム書く。
自身→ファイルサイズ=(自身→ハンドル)のファイルストリームサイズ。
「1」で戻る。
・ストリーム削除(AからCNTを)~
もし、自身→FILE=空ならば、「ファイルが指定されていません」で戻る。
もし、(自身→ファイル存在)=いいえならば、「ファイルがありません」で戻る。
もし、(自身→モード=「読」)または(自身→モード=「書」)ならば
自身→モード=空。(自身→ハンドル)をファイルストリーム閉じる。自身→ハンドル=空。
自身→元ファイル名=自身→FILE。
自身→一時ファイル名=((自身→元ファイル名)からパス抽出)で((自身→元ファイル名)からファイル名抽出)のユニークファイル名生成。
(自身→元ファイル名)から(自身→一時ファイル名)へファイル名変更。
自身→保持バイト数=A。
H1=(自身→一時ファイル名)を「読」でファイルストリーム開く。
H2=(自身→元ファイル名)を「書」でファイルストリーム開く。
H1で0にファイルストリーム位置設定。
H2で0にファイルストリーム位置設定。
CNT2 =INT((自身→保持バイト数)÷(自身→バッファサイズ))。
もし、((自身→保持バイト数)%(自身→バッファサイズ))<>0ならば、CNT2=CNT2+1。
Jを0からCNT2まで繰り返す
SZ=(自身→バッファサイズ)。
NEXT=(J+1)*(自身→バッファサイズ)
もし、NEXT>(自身→保持バイト数)ならば、SZ=(自身→保持バイト数)-J*(自身→バッファサイズ)
S=H1でSZをファイルストリーム読む。
H2でSをファイルストリーム書く。
自身→保持バイト数=(自身→ファイルサイズ)-CNT-A。
H1で(A+CNT)にファイルストリーム位置設定。
CNT2 =INT((自身→保持バイト数)÷(自身→バッファサイズ))。
もし、((自身→保持バイト数)%(自身→バッファサイズ))<>0ならば、CNT2=CNT2+1。
Jを0からCNT2まで繰り返す
SZ=(自身→バッファサイズ)。
NEXT=(J+1)*(自身→バッファサイズ)
もし、NEXT>(自身→保持バイト数)ならば、SZ=(自身→保持バイト数)-J*(自身→バッファサイズ)
S=H1でSZをファイルストリーム読む。
H2でSをファイルストリーム書く。
H1をファイルストリーム閉じる。
H2をファイルストリーム閉じる。
(自身→一時ファイル名)をファイル完全削除。
自身→ファイル=自身→元ファイル名。
自身→現在位置=A。
自身→次位置=A。
・ストリーム挿入書く(AからBを|AにBを)~
もし、自身→FILE=空ならば、「ファイルが指定されていません」で戻る。
もし、(自身→ファイル存在)=いいえならば、自身→ストリーム初期化。
もし、(自身→モード=「読」)または(自身→モード=「書」)ならば
自身→モード=空。(自身→ハンドル)をファイルストリーム閉じる。自身→ハンドル=空。
自身→元ファイル名=自身→FILE。
自身→一時ファイル名=((自身→元ファイル名)からパス抽出)で((自身→元ファイル名)からファイル名抽出)のユニークファイル名生成。
(自身→元ファイル名)から(自身→一時ファイル名)へファイル名変更。
自身→保持バイト数=A。
H1=(自身→一時ファイル名)を「読」でファイルストリーム開く。
H2=(自身→元ファイル名)を「書」でファイルストリーム開く。
H1で0にファイルストリーム位置設定。
H2で0にファイルストリーム位置設定。
CNT2 =INT((自身→保持バイト数)÷(自身→バッファサイズ))。
もし、((自身→保持バイト数)%(自身→バッファサイズ))<>0ならば、CNT2=CNT2+1。
Jを0からCNT2まで繰り返す
SZ=(自身→バッファサイズ)。
NEXT=(J+1)*(自身→バッファサイズ)
もし、NEXT>(自身→保持バイト数)ならば、SZ=(自身→保持バイト数)-J*(自身→バッファサイズ)
S=H1でSZをファイルストリーム読む。
H2でSをファイルストリーム書く。
//挿入
H2でBをファイルストリーム書く。
自身→保持バイト数=(自身→ファイルサイズ)-A。
CNT2 =INT((自身→保持バイト数)÷(自身→バッファサイズ))。
もし、((自身→保持バイト数)%(自身→バッファサイズ))<>0ならば、CNT2=CNT2+1。
Jを0からCNT2まで繰り返す
SZ=(自身→バッファサイズ)。
NEXT=(J+1)*(自身→バッファサイズ)
もし、NEXT>(自身→保持バイト数)ならば、SZ=(自身→保持バイト数)-J*(自身→バッファサイズ)
S=H1でSZをファイルストリーム読む。
H2でSをファイルストリーム書く。
H1をファイルストリーム閉じる。
H2をファイルストリーム閉じる。
(自身→一時ファイル名)をファイル完全削除。
自身→ファイル=自身→元ファイル名。
自身→現在位置=A。
自身→次位置=A+(Bのバイト数)。
・ストリーム同位置読む(CNTを)~
自身→ストリーム読む((自身→現在位置)から(CNT)を)。
・ストリーム同位置書く(Aを)~
自身→ストリーム書く((自身→現在位置)から(A)を)。
・ストリーム同位置挿入書く(Aを)~
自身→ストリーム挿入書く((自身→現在位置)から(A)を)。
・ストリーム続き読む(CNTを)~
自身→ストリーム読む((自身→次位置)から(CNT)を)。
・ストリーム続き書く(Aを)~
自身→ストリーム書く((自身→次位置)から(A)を)。
・ストリーム続き挿入書く(Aを)~
自身→ストリーム挿入書く((自身→次位置)から(A)を)。
・ストリーム右端読む(CNTを)~
自身→ストリーム読む(((自身→ファイルサイズ)-CNT)からCNTを)。
・ストリーム右端書く(Aを)~
自身→ストリーム書く((自身→ファイルサイズ)から(A)を)。
・ストリーム右端削除(CNTを)~
自身→ストリーム削除(((自身→ファイルサイズ)-CNT)からCNTを)。
・ストリーム閉じる~
もし、自身→ハンドル≠空ならば、(自身→ハンドル)をファイルストリーム閉じる。
自身→FILE=空。自身→ファイルサイズ=空。自身→モード=空。自身→現在位置=0。自身→次位置=0。
自身→ファイル存在=いいえ。自身→ハンドル=空。
・ストリームファイル削除~
もし、自身→FILE=空ならば、「ファイルが指定されていません」で戻る。
もし、(自身→ファイル存在)=いいえならば、「ファイルがありません」で戻る。
もし、自身→ハンドル≠空ならば、(自身→ハンドル)をファイルストリーム閉じる。
(自身→FILE)をファイル削除。
・ストリームファイル完全削除~
もし、自身→FILE=空ならば、「ファイルが指定されていません」で戻る。
もし、(自身→ファイル存在)=いいえならば、「ファイルがありません」で戻る。
もし、自身→ハンドル≠空ならば、(自身→ハンドル)をファイルストリーム閉じる。
(自身→FILE)をファイル完全削除。
・作る~
バイナリ終了時実行処理内容に「{名前}のストリーム閉じる。」を配列追加。
バイナリ終了時実行処理内容=空。
●バイナリ終了時実行処理
バイナリ終了時実行処理内容をナデシコする。
●バイナリアドレス変換(Sを|Sの)
もし、Sの1から「x」を文字検索>0ならば
S=Sを「x」で区切る。S[0]から1バイト右端削除。S[1]の1から1バイト削除。S=S[0]&S[1]。
Sを16で十進数して戻る。
#-----------------------------------------------------------------------
!進数英語リスト=「ABCDEFGHIJKLMNOPQRSTUVWXYZ」を文字列分解。
!進数数値リスト=「10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35」を「,」で区切る。
●十進数(SをVで)
合計値とは数値。S=Sを文字列分解して配列逆順。
進数英語リストで反復、S=Sの対象を進数数値リスト[回数-1]に単置換。
Sで反復、合計値=合計値+(対象×(V^(回数-1)))。
合計値で戻る。
●進数(SをV|SのV|SでV)
結果配列とは配列。
1の間
もし、S<Vならば
進数数値リストで反復、S=Sの対象を進数英語リスト[回数-1]に単置換。
結果配列にSを配列追加。抜ける。
C=S%V。進数数値リストで反復、C=Cの対象を進数英語リスト[回数-1]に単置換。
結果配列にCを配列追加。S=(S/V)の整数部分。
結果配列を配列逆順して空で配列結合して戻る。
●進数変換(SをAからBに)
S=SをAで十進数。Sの(B)進数で戻る。
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
*//サンプルプログラム
テストとはバイナリファイル。
テストのファイル=ファイル選択。
テストのファイルサイズを言う。
テストの74から10/*バイト*/をストリーム読む。
それをバイナリダンプして言う。
テストの(「00000040x0A」をバイナリアドレス変換)から10をストリーム読む。
それをバイナリダンプして言う。
テストの(「0000004A」をバイナリアドレス変換)から10をストリーム読む。
それをバイナリダンプして言う。
テストの10をストリーム同位置読む。
それをバイナリダンプして言う。
●ストリームファイルコピー(BAFAでSからVへ|BAFAでSからVに)
もし、S=空ならば、「0」で戻る。
もし、V=空ならば、「0」で戻る。
AAストリをバイナリファイルとして作成。AAストリ→ファイル=S。
BBストリをバイナリファイルとして作成。BBストリ→ファイル=V。
AAストリ→バッファサイズ=BAFA。
BBストリ→ストリーム初期化。
CNT2=INT((AAストリ→ファイルサイズ)÷(AAストリ→バッファサイズ))。
もし、((AAストリ→ファイルサイズ)%(AAストリ→バッファサイズ))<>0ならば、CNT2=CNT2+1。
Jを0からCNT2まで繰り返す
SZ=(AAストリ→バッファサイズ)。
NEXT=(J+1)*(AAストリ→バッファサイズ)。
もし、NEXT>(AAストリ→ファイルサイズ)ならば、SZ=(AAストリ→ファイルサイズ)-J*(AAストリ→バッファサイズ)
S=AAストリ→ストリーム続き読む(SZを)。
BBストリ→ストリーム続き書く(Sを)。
AAストリ→ストリーム閉じる。BBストリ→ストリーム閉じる。
「1」で戻る。
----
- グループのメンバ関数内でメンバ変数を扱う場合、「自身→」は不要です。 -- SWinX (2009-01-05 12:12:37)
- な、なんだってー!Ω -- 管理人 (2009-01-07 00:18:15)
#comment()
----
*情報
作者名:五十六
引用元:なし
*概要
ファイルストリームをもっと気軽に扱えるように。
具体的にはストリーム開く、閉じるの自動化。あとモードの自動変更、ファイルストリーム削除を無理やり実装など。
母艦の閉じた時は~を使ってるから複数あると誤作動するかも・・・
参考
ファイルの分割ツールを作ってみよう!(第75回):クジラ飛行机「文系サラリーマンのための仕事に役立つプログラミング入門」
http://pc.nikkeibp.co.jp/article/column/20080522/1003240/?P=2
*解説
[読書メンバ]
・ファイル
・現在位置
・次位置
・バッファサイズ
・ファイルサイズ
[命令メンバ]
※↓4つのA(開始バイト位置)は0起点
・ストリーム読む(AからCNTを)
・ストリーム書く(AからBを|AにBを)
・ストリーム挿入書く(AからBを|AにBを)
・ストリーム削除(AからCNTを)
・ストリーム同位置読む(CNTを)
・ストリーム同位置書く(Aを)
・ストリーム同位置挿入書く(Aを)
・ストリーム続き読む(CNTを)
・ストリーム続き書く(Aを)
・ストリーム続き挿入書く(Aを)
・ストリーム右端読む(CNTを)
・ストリーム右端書く(Aを)
・ストリーム右端削除(CNTを)
・ストリーム初期化
・ストリームファイル削除
・ストリームファイル完全削除
↑説明省略 ノリで
●バイナリアドレス変換
「00000040x0A」とか「0000004A」とかを10進数に直す。
バイナリエディタ風。
*本体
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
母艦の閉じた時は~
バイナリ終了時実行処理。
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
■バイナリファイル
・現在位置{=0}
・次位置{=0}
・バッファサイズ{=524288}/*512KB*/
・{非公開}元ファイル名
・{非公開}一時ファイル名
・{非公開}保持バイト数
・{非公開}経過バイト数
・{非公開}FILE
・ファイル存在
・モード
・ハンドル
・ファイルサイズ
・ファイル ←ファイル設定 →ファイル取得
・ファイル設定(Vに|Vを)~
自身→FILE=V。
自身→現在位置=0。//リセットされます
自身→次位置=0。
もし、Vの存在=はいならば
自身→ファイル存在=はい。
自身→モード=「読」。自身→ハンドル=Vを「読」でファイルストリーム開く。
自身→ファイルサイズ=(自身→ハンドル)のファイルストリームサイズ。
自身→モード=空。(自身→ハンドル)をファイルストリーム閉じる。自身→ハンドル=空。
違えば
自身→ハンドル=空。自身→ファイル存在=いいえ。
自身→ファイルサイズ=空。自身→モード=空。
・ファイル取得(Vを)~それ=V。
・ストリーム初期化~
もし、自身→FILE=空ならば、「ファイルが指定されていません」で戻る。
自身→モード=「作」。自身→ハンドル=(自身→FILE)を「作」でファイルストリーム開く。
自身→モード=空。(自身→ハンドル)をファイルストリーム閉じる。自身→ハンドル=空。
自身→ファイルサイズ=0。自身→ファイル存在=はい。自身→現在位置=0。自身→次位置=0。
・ストリーム読む(AからCNTを)~
もし、自身→FILE=空ならば、「ファイルが指定されていません」で戻る。
もし、(自身→ファイル存在)=いいえならば、「ファイルがありません」で戻る。
もし、(自身→モード=「書」)または(自身→モード=「作」)ならば
自身→モード=空。(自身→ハンドル)をファイルストリーム閉じる。自身→ハンドル=空。
もし、自身→ハンドル=空ならば
自身→モード=「読」。自身→ハンドル=(自身→FILE)を「読」でファイルストリーム開く。
自身→モード=「読」。
自身→現在位置=A。自身→次位置=A+CNT。
(自身→ハンドル)で(自身→現在位置)にファイルストリーム位置設定。
(自身→ハンドル)でCNTをファイルストリーム読む。
それで戻る。
・ストリーム書く(AからBを|AにBを)~
もし、自身→FILE=空ならば、「ファイルが指定されていません」で戻る。
もし、(自身→ファイル存在)=いいえならば、自身→ストリーム初期化。
もし、(自身→モード=「読」)または(自身→モード=「作」)ならば
自身→モード=空。(自身→ハンドル)をファイルストリーム閉じる。自身→ハンドル=空。
もし、自身→ハンドル=空ならば
自身→モード=「書」。自身→ハンドル=(自身→FILE)を「書」でファイルストリーム開く。
自身→モード=「書」。
自身→現在位置=A。自身→次位置=A+(Bのバイト数)。
(自身→ハンドル)で(自身→現在位置)にファイルストリーム位置設定。
(自身→ハンドル)でBをファイルストリーム書く。
自身→ファイルサイズ=(自身→ハンドル)のファイルストリームサイズ。
「1」で戻る。
・ストリーム削除(AからCNTを)~
もし、自身→FILE=空ならば、「ファイルが指定されていません」で戻る。
もし、(自身→ファイル存在)=いいえならば、「ファイルがありません」で戻る。
もし、(自身→モード=「読」)または(自身→モード=「書」)ならば
自身→モード=空。(自身→ハンドル)をファイルストリーム閉じる。自身→ハンドル=空。
自身→元ファイル名=自身→FILE。
自身→一時ファイル名=((自身→元ファイル名)からパス抽出)で((自身→元ファイル名)からファイル名抽出)のユニークファイル名生成。
(自身→元ファイル名)から(自身→一時ファイル名)へファイル名変更。
自身→保持バイト数=A。
H1=(自身→一時ファイル名)を「読」でファイルストリーム開く。
H2=(自身→元ファイル名)を「書」でファイルストリーム開く。
H1で0にファイルストリーム位置設定。
H2で0にファイルストリーム位置設定。
CNT2 =INT((自身→保持バイト数)÷(自身→バッファサイズ))。
もし、((自身→保持バイト数)%(自身→バッファサイズ))<>0ならば、CNT2=CNT2+1。
Jを0からCNT2まで繰り返す
SZ=(自身→バッファサイズ)。
NEXT=(J+1)*(自身→バッファサイズ)
もし、NEXT>(自身→保持バイト数)ならば、SZ=(自身→保持バイト数)-J*(自身→バッファサイズ)
S=H1でSZをファイルストリーム読む。
H2でSをファイルストリーム書く。
自身→保持バイト数=(自身→ファイルサイズ)-CNT-A。
H1で(A+CNT)にファイルストリーム位置設定。
CNT2 =INT((自身→保持バイト数)÷(自身→バッファサイズ))。
もし、((自身→保持バイト数)%(自身→バッファサイズ))<>0ならば、CNT2=CNT2+1。
Jを0からCNT2まで繰り返す
SZ=(自身→バッファサイズ)。
NEXT=(J+1)*(自身→バッファサイズ)
もし、NEXT>(自身→保持バイト数)ならば、SZ=(自身→保持バイト数)-J*(自身→バッファサイズ)
S=H1でSZをファイルストリーム読む。
H2でSをファイルストリーム書く。
H1をファイルストリーム閉じる。
H2をファイルストリーム閉じる。
(自身→一時ファイル名)をファイル完全削除。
自身→ファイル=自身→元ファイル名。
自身→現在位置=A。
自身→次位置=A。
・ストリーム挿入書く(AからBを|AにBを)~
もし、自身→FILE=空ならば、「ファイルが指定されていません」で戻る。
もし、(自身→ファイル存在)=いいえならば、自身→ストリーム初期化。
もし、(自身→モード=「読」)または(自身→モード=「書」)ならば
自身→モード=空。(自身→ハンドル)をファイルストリーム閉じる。自身→ハンドル=空。
自身→元ファイル名=自身→FILE。
自身→一時ファイル名=((自身→元ファイル名)からパス抽出)で((自身→元ファイル名)からファイル名抽出)のユニークファイル名生成。
(自身→元ファイル名)から(自身→一時ファイル名)へファイル名変更。
自身→保持バイト数=A。
H1=(自身→一時ファイル名)を「読」でファイルストリーム開く。
H2=(自身→元ファイル名)を「書」でファイルストリーム開く。
H1で0にファイルストリーム位置設定。
H2で0にファイルストリーム位置設定。
CNT2 =INT((自身→保持バイト数)÷(自身→バッファサイズ))。
もし、((自身→保持バイト数)%(自身→バッファサイズ))<>0ならば、CNT2=CNT2+1。
Jを0からCNT2まで繰り返す
SZ=(自身→バッファサイズ)。
NEXT=(J+1)*(自身→バッファサイズ)
もし、NEXT>(自身→保持バイト数)ならば、SZ=(自身→保持バイト数)-J*(自身→バッファサイズ)
S=H1でSZをファイルストリーム読む。
H2でSをファイルストリーム書く。
//挿入
H2でBをファイルストリーム書く。
自身→保持バイト数=(自身→ファイルサイズ)-A。
CNT2 =INT((自身→保持バイト数)÷(自身→バッファサイズ))。
もし、((自身→保持バイト数)%(自身→バッファサイズ))<>0ならば、CNT2=CNT2+1。
Jを0からCNT2まで繰り返す
SZ=(自身→バッファサイズ)。
NEXT=(J+1)*(自身→バッファサイズ)
もし、NEXT>(自身→保持バイト数)ならば、SZ=(自身→保持バイト数)-J*(自身→バッファサイズ)
S=H1でSZをファイルストリーム読む。
H2でSをファイルストリーム書く。
H1をファイルストリーム閉じる。
H2をファイルストリーム閉じる。
(自身→一時ファイル名)をファイル完全削除。
自身→ファイル=自身→元ファイル名。
自身→現在位置=A。
自身→次位置=A+(Bのバイト数)。
・ストリーム同位置読む(CNTを)~
自身→ストリーム読む((自身→現在位置)から(CNT)を)。
・ストリーム同位置書く(Aを)~
自身→ストリーム書く((自身→現在位置)から(A)を)。
・ストリーム同位置挿入書く(Aを)~
自身→ストリーム挿入書く((自身→現在位置)から(A)を)。
・ストリーム続き読む(CNTを)~
自身→ストリーム読む((自身→次位置)から(CNT)を)。
・ストリーム続き書く(Aを)~
自身→ストリーム書く((自身→次位置)から(A)を)。
・ストリーム続き挿入書く(Aを)~
自身→ストリーム挿入書く((自身→次位置)から(A)を)。
・ストリーム右端読む(CNTを)~
自身→ストリーム読む(((自身→ファイルサイズ)-CNT)からCNTを)。
・ストリーム右端書く(Aを)~
自身→ストリーム書く((自身→ファイルサイズ)から(A)を)。
・ストリーム右端削除(CNTを)~
自身→ストリーム削除(((自身→ファイルサイズ)-CNT)からCNTを)。
・ストリーム閉じる~
もし、自身→ハンドル≠空ならば、(自身→ハンドル)をファイルストリーム閉じる。
自身→FILE=空。自身→ファイルサイズ=空。自身→モード=空。自身→現在位置=0。自身→次位置=0。
自身→ファイル存在=いいえ。自身→ハンドル=空。
・ストリームファイル削除~
もし、自身→FILE=空ならば、「ファイルが指定されていません」で戻る。
もし、(自身→ファイル存在)=いいえならば、「ファイルがありません」で戻る。
もし、自身→ハンドル≠空ならば、(自身→ハンドル)をファイルストリーム閉じる。
(自身→FILE)をファイル削除。
・ストリームファイル完全削除~
もし、自身→FILE=空ならば、「ファイルが指定されていません」で戻る。
もし、(自身→ファイル存在)=いいえならば、「ファイルがありません」で戻る。
もし、自身→ハンドル≠空ならば、(自身→ハンドル)をファイルストリーム閉じる。
(自身→FILE)をファイル完全削除。
・作る~
バイナリ終了時実行処理内容に「{名前}のストリーム閉じる。」を配列追加。
バイナリ終了時実行処理内容=空。
●バイナリ終了時実行処理
バイナリ終了時実行処理内容をナデシコする。
●バイナリアドレス変換(Sを|Sの)
もし、Sの1から「x」を文字検索>0ならば
S=Sを「x」で区切る。S[0]から1バイト右端削除。S[1]の1から1バイト削除。S=S[0]&S[1]。
Sを16で十進数して戻る。
#-----------------------------------------------------------------------
!進数英語リスト=「ABCDEFGHIJKLMNOPQRSTUVWXYZ」を文字列分解。
!進数数値リスト=「10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35」を「,」で区切る。
●十進数(SをVで)
合計値とは数値。S=Sを文字列分解して配列逆順。
進数英語リストで反復、S=Sの対象を進数数値リスト[回数-1]に単置換。
Sで反復、合計値=合計値+(対象×(V^(回数-1)))。
合計値で戻る。
●進数(SをV|SのV|SでV)
結果配列とは配列。
1の間
もし、S<Vならば
進数数値リストで反復、S=Sの対象を進数英語リスト[回数-1]に単置換。
結果配列にSを配列追加。抜ける。
C=S%V。進数数値リストで反復、C=Cの対象を進数英語リスト[回数-1]に単置換。
結果配列にCを配列追加。S=(S/V)の整数部分。
結果配列を配列逆順して空で配列結合して戻る。
●進数変換(SをAからBに)
S=SをAで十進数。Sの(B)進数で戻る。
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
*//サンプルプログラム
テストとはバイナリファイル。
テストのファイル=ファイル選択。
テストのファイルサイズを言う。
テストの74から10/*バイト*/をストリーム読む。
それをバイナリダンプして言う。
テストの(「00000040x0A」をバイナリアドレス変換)から10をストリーム読む。
それをバイナリダンプして言う。
テストの(「0000004A」をバイナリアドレス変換)から10をストリーム読む。
それをバイナリダンプして言う。
テストの10をストリーム同位置読む。
それをバイナリダンプして言う。
●ストリームファイルコピー(BAFAでSからVへ|BAFAでSからVに)
もし、S=空ならば、「0」で戻る。
もし、V=空ならば、「0」で戻る。
AAストリをバイナリファイルとして作成。AAストリ→ファイル=S。
BBストリをバイナリファイルとして作成。BBストリ→ファイル=V。
AAストリ→バッファサイズ=BAFA。
BBストリ→ストリーム初期化。
CNT2=INT((AAストリ→ファイルサイズ)÷(AAストリ→バッファサイズ))。
もし、((AAストリ→ファイルサイズ)%(AAストリ→バッファサイズ))<>0ならば、CNT2=CNT2+1。
Jを0からCNT2まで繰り返す
SZ=(AAストリ→バッファサイズ)。
NEXT=(J+1)*(AAストリ→バッファサイズ)。
もし、NEXT>(AAストリ→ファイルサイズ)ならば、SZ=(AAストリ→ファイルサイズ)-J*(AAストリ→バッファサイズ)
S=AAストリ→ストリーム続き読む(SZを)。
BBストリ→ストリーム続き書く(Sを)。
AAストリ→ストリーム閉じる。BBストリ→ストリーム閉じる。
「1」で戻る。
----
- グループのメンバ関数内でメンバ変数を扱う場合、「自身→」は不要です。 -- SWinX (2009-01-05 12:12:37)
- な、なんだってー!Ω -- 管理人 (2009-01-07 00:18:15)
#comment()
----