また、お世話になります。
実は・・INIファイルにファイルの固定長の内容を定義保存して
データとなるテキストファイルの内容(漢字を含む)を
INIファイルで指定したバイト数で区切りたいのですが・・
下記のような読み込みと切り分けでは指定したバイト数で
取得されないのですが・・
何か方法がありましたらご教授のほど宜しくお願い致します。。。
-----------------------------------------
ファイルの読み込み
Open AppPath For input As FileFree
While Not EOF(FileFre)
Line Input #FileFree,tmpStr
s_rtn= s_rtn & tmpStr & vbCrLf
Wend
Close FileFree
・
・
'ini_file_naiyo---->INIファイルで指定したサイズ内容
s_rtn_taihi = MidB(s_str,1,ini_file_naiyo)
'サイズ分までの内容を取り除いたデータを取得
s_rtn = MidB(s_str,ini_file_naiyo + 1)
基本的なことかもしれませんが・・ご存知であれば教えてください。
宜しくお願い致しますm(_ _)m
環境はVB6.0になります。
文字コードを意識して無いと理解できない動きでしょう。
[Vb6.0]
Private Sub Form_Load()
Call SampleLenB
End Sub
Function SampleLenB()
Debug.Print Len("ABc") '---Unicode
Debug.Print LenB("ABc") '---Unicode
Debug.Print LenB(StrConv("ABc", vbFromUnicode)) '---ANSI
End Function
どんなデータを扱ってるのか分かりませんが、
過去ログ検索『vbFromUnicode』で色々引っかかります。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200312/03120157.txt
…とか参考になります?
↑のリンクのスレッド長いから…分かってないと何処を参考にすればいいか
分からないかもね。
ヘルプにも[2 バイト文字を含んだファイルの処理]とかいう題で載ってる
けど、文字列型 (String) 変数の代わりにバイト型 (Byte) の配列を
使用して、Unicode 文字の変換および ANSI 文字の変換が行われない
ようにしないといけません。…で、
>化石 2003/12/25(木) 10:59:57
を参考にして下さい。
特攻隊長まるるうさま
いろいろありがとうございました。
とても参考になりました。
まだ、解決していないのですが・・
下記のロジックで試してみようと思っております。
'ini_file_naiyo---->INIファイルで指定したサイズ内容
s_str = strConv(s_str,vbFromUnicode)
s_rtn_taihi = strConv(MidB(s_str,1,ini_file_naiyo)),vbUnicode)
'サイズ分までの内容を取り除いたデータを取得
s_str = MidB(s_str,ini_file_naiyo+1))
・
・
試みが うまくいかなかったときは、またご指導のほど宜しくお願い致します。。
特攻体長まるろうさま
さきほど 下記のロジックにて試しましたところ・・無事に解決いたしました。
もっと 改善したほうがいい点がありましたら ご指摘よろしくお願いいたします。
それから ReDim Preserve での2次元配列は可能でしょうか?
今のところ 2次元での再配列はエラーになっているので1次元でやっておりますが
できれば2次元配列で処理ができればいいなと思っております。
'使用可能なファイル番号取得
FileFree = FreeFile
'読み込み
Open AppPath For Input As FileFree
While Not EOF(FileFree)
Line Input #FileFree, tmpStr
s_str = s_str & tmpStr
Wend
Close FileFree
'文字列の変換
s_str = StrConv(s_str, vbFromUnicode)
Do Until LenB(s_str) < 256'(<--これは1レコードサイズを指定してます。)
For i_cnt_1 = 1 To UBound(ini_file_naiyo)
'エラー
If LenB(s_str) < ini_file_naiyo(i_cnt_1) Then
MsgBox "サイズエラーあり?"
Exit For
End If
s_rtn_taihi = StrConv((MidB(s_str, 1, ini_file_naiyo(i_cnt_1))), vbUnicode)
i_cnt_2 = i_cnt_2 + 1
’内容を配列に退避
ReDim Preserve ps_データ配列(i_cnt_2)
ps_データ配列(i_cnt_2) = s_rtn_taihi
'サイズ分までの内容を取り除いたデータを取得
s_str = MidB(s_str, ini_file_naiyo(i_cnt_1) + 1)
Next i_cnt_1
Loop
>もっと 改善したほうがいい点がありましたら ご指摘よろしくお願いいたします。
過去ログの化石さんの案を実現するならファイルの読み込みは
1行ずつループするのではなくて InputB を使って1ステップ
で終わります。
後半は…特に画期的な改善点は思い浮かばなかったのでパス。
…ああ、サンプルコードを載せる場合は変数宣言を省かないように
して下さい。それを解析して自分の環境で動くようにするのに結構
時間が掛かってしまいます。そんなに暇ではありませんので。
>それから ReDim Preserve での2次元配列は可能でしょうか?
ヘルプに書いてあります。
[ReDim ステートメント]より抜粋
>解説
>キーワード Preserve を指定した場合、変更できるのは、
>動的配列の最後の次元のサイズに限られます。また、次元
>数は変更できません。たとえば、…
読んで下さい。
全ての次元のサイズを変えたい場合は配列を2つ用意して
内容をコピーする関数を自作して下さい。
特攻隊長まるるう さま
本当にありがとうございました。。
変数の指定をはずして載せてしまったこと 以後気をつけます(_ _)
ツイート | ![]() |