|
2010/06/21(Mon) 19:19:53 編集(投稿者)
■No50878 (VB533151 さん) に返信 > 同タイミングで256バイト倍数への加工処理(16進数でいうところの"0x00"を最後尾にセット)を実施する場合には > どのようにすれば宜しいでしょうか? 何バイト分の 0x00 を追加すべきか、その算出方法は既に回答がついていますね。
で、その長さを paddingLength という変数に入れていたとすれば、そのサイズ分の 0x00 をバイナリファイルの末尾に追加するために、ファイルクローズ処理の直前に If 0 < paddingLength And paddingLength < 256 Then ReDim blank(0 To paddingLength - 1) As Byte Put #iFnox, , blank End If というコードを入れておけば良いかと。
もし、テキストとして開いている方に追加したいなら、 If 0 < paddingLength And paddingLength < 256 Then Print #iFno, String(paddingLength, 0); '末尾セミコロンを忘れずに End If ですね。
あるいは No50784 で示したように Stream 経由で処理するという手もあります。
> Sub usTestPLSQL(sType As String, iFlg As Integer) 「Sub usTestPLSQL(ByVal sType As String, ByRef iFlg As Integer)」 とした方が、引数の入出力方向が明確になるかと。
> Dim sSQL As String この変数は何者でしょうか?
> Set objSess = CreateObject("SQLserInProcServer.XOraSession") > Set objDb = objSess.DbOpenDatabase(clsMCommTestRecv.OraServiceNm, clsMCommTestRecv.OraIdPass, 0&) この処理は、何のためにおこなっているのでしょうか?
Oracle に接続しているのだという事は分かりますが、ローカル変数 objDb や objSess が 他のプロシージャに渡されている様子はありませんし、DB にアクセスしている処理も無いので、 ここでデータベースに接続するのは、まったく意味が無いように思えるのですが…。
> 'ファイルのオープン > Open sPath For Input As #iFno このテキストファイルの文字コードは、Shift_JIS ですか? もし、ファイル中に Shift_JIS 範囲外のバイナリデータ等が含まれていた場合、 Line Input # の段階で文字化けが発生する可能性がありますので、ご注意ください。
> 'ファイルのオープン > Open sWrk For Binary As #iFnox このファイルは新規ファイルですか? それとも既存ファイルに対する上書きですか?
もし、これから出力しようとする内容よりもサイズの大きいファイル sWrk が 既に存在していた場合、Put # しなかった部分のデータはそのまま残り続けます。 ファイルサイズの自動縮小は行われませんので注意してください(自動拡張は行われます)。
> lLen = FileLen(sPath) > If lLen > 0 Then (中略) > Else > Kill (sPath) > End If 「Open sPath For Input As #iFno」のデータを 「Open sWrk For Binary As #iFnox」に転記するのですよね。
sPath が 0 バイトだった場合、その sPath 自身を削除していますが、 sWrk の方は、特に削除処理等は行われていないようですね。 ということは、sWrk は新規ファイルという事でしょうか。
> Kill (sPath) VB6 の文法では、『Kill sPath』もしくは『Call Kill(sPath)』が正しい記述です。
> Line Input #iFno, sLine > Put #iFnox, , sLine この手法だと、出力結果に「改行」が無くなりますが、それは意図的なものですか? たとえば、元テキストが「a{改行}{改行}{改行}b」だった場合、バイナリファイルは 「ab」すなわち 0x61,0x62 というデータで出力される事になります。
また、その方法でテキストを転記していった場合、元データ中の 0x8790 の文字が 0x81E0 (≒)になったり、 0x8795 の文字が 0x81E3 (√)になるなどといった 「文字の置き換え」が発生する可能性がありますが、それは大丈夫でしょうか。
> Exit Sub > LBL_ERROR: > sERR = "usTestPLSQL(" & objDb.LastServerErrText & ")" & sERR 現在のエラートラップ処理だと、DB エラーではなく、ファイル入出力エラーになった場合でも oo4o のエラーメッセージが記録されることになってしまいます。エラー処理を見直した方が良いかと。
(sERR というのは、モジュールレベルの変数でしょうか?)
|