• ベストアンサー

vb6.0 sp5]読み込みが出来ない・・・

マルチラインのtext1に20行くらいの文章を 入れて、保存します。tes.txt a = text1.text そのtes.txt自体を開くとキチンと文章が入っています。 しかしプログラムからそのファイルを開くと。 Open "tes.txt" For Input As #1 Line Input #1, a Close #1 Label1.Caption = a 最初の一行しか表示されません。T_T;

質問者が選んだベストアンサー

  • ベストアンサー
noname#21649
noname#21649
回答No.8

>駄目でしょうかT_T; わかりません。幾多の過去の資源を読み取るためのルーチンです。したがって書き出すほうは.今の文法規約に任せてしまいます。古い資源関係ソフトにWindows関係ルーチンが追加されるだけです。 Put,Get, 関係を使うのであれば.バイナリダンプ・バイナリ編集あたりのフリーソフトでもかき集めて.書式とコードが使えるか.つまり.過去のルーチンが吐き出す内容と書式・コードが一致するかを調べる必要があります。 2つの読み取りルーチンを紹介したのは.改行コードの問題から.どちらが読み取れるか.見当がつかないためであり.バイナリダンプで調べてからでないと.わからないためです。 「よいか・悪いか」ではなくて.コードと書式が一致しているか.を調べてください。これは.古いルーチンで作成したファイルと新しいルーチンで作成したファイルの両方を持っている人間でナイトできません。 私はDebug.exeを使っています。多分.どこかのシステム系ディレクトリーに入っていると思いますが.探してください。なければ.狐バイナリエディターとか.いろいろありますから.べくたーの関係サイトをさまよえばよいでしょう。 もっとも.使いなれたSyndeb.exe(MS-DOS3.3)とかdebug.com(MS-DOS2.14)が私にとっては楽です。

a12b12
質問者

お礼

どもです。色々考えていたら新しいことをひらめきました!出来るかどうかまた新しいスレたてます。 ありがとうございました。

a12b12
質問者

補足

どもです! aソフトと仮定しまして。 書き出し ⇒はaソフトから。 読み込みもまた ⇒aソフトから。 の場合は書式が一定なのでエラーなく出来た場合 OKということでしょうか? 問題は読み取りにあるようですので、上記の例だと OKかな??と思いました。 ※上記のパターンのプログラムなんで^^;、、 全然判ってない!と思われるなら、無回答でもいいです、初心者に最後までお付き合いして頂ありがとうございました。 PS:明日締め切ります。

その他の回答 (7)

  • zealzany
  • ベストアンサー率35% (19/53)
回答No.7

PUTでやるならGETで取り出しましょう。 すっきりします。 Private Sub Command1_Click() Open "c:\test.txt" For Binary As #1 Put #1, 1, Text1.Text Close #1 End Sub Private Sub Command2_Click() 'Text1.MultiLine = True Dim a As String Open "c:\test.txt" For Binary As #1 a = String(30000, " ") Get #1, 1, a Text1.Text = a Close #1 End Sub Private Sub Command3_Click() Text1.Text = "" End Sub

a12b12
質問者

お礼

どもです。GET!にします。 ありがとうございます。ゲッツ!

noname#21649
noname#21649
回答No.6

>とても悲しくなりました。 ソースを見ればわかるとおり.これはライブ。 MS-Basicの山のようなコード(大体3-5MB)をVBに移植するために.過去の関係しそうな部分を共通化したもの。 子供が変なこと覚えてきたものだから.改行コードに0a, 0d, 1a, 00を使う場合があって.その処理用の汎用ルーチンです。 普通のVB関係者ならば.こんな面倒なことをしないで.「できません」と仕様書の方を変更するでしょう。 VBは特定のマイクロソフトが想定した内容の範囲内ならば比較的簡単にソフトを組めます。しかし.子供のような自由奔放にソフトを書く人間にとっては.邪魔なのです。 自分で好き勝手なライブラリを構築して.その中で.独善的絶対的支配者でいたほうが.楽なのです。 文字コードが6種類ぐらい.機種依存処理が持っている機械だけ.変なコードでデータを吐き出す各社市販ソフトとこの市販ソフトで作成した資源の山が1-3GBぐらいあるかな。 この過去の資源を自由に読み取れるために作成されたルーチンのひとつです。

a12b12
質問者

補足

ありがとうございます。 あれから色々やってみたのですが、 Open "test.TXT" For Binary As #1 Put #1, , a Close #1 で書き込むと " , で区別される事はないですよね? それで書き込んで、 Open "test.TXT" For Input As #1 Do Until EOF(1) Input #1, a Text1.Text = Text1.Text & a & vbCrLf Loop Close #1 で読み込む。これだけだとやはり問題が出たり しますか?少し試したらいい感じだったんですが、 やっぱ駄目でしょうかT_T;

noname#21649
noname#21649
回答No.5

以下のバイナリ処理で読み取れるはず。保守ルーチンが入っているので要注意。OKに開発費3万円程度のソフトをくれてやることになりますが。 Public Function LineInputByte(FileNo%) As String ' Binary で open したファイル用 Line Input #FileNo%,A$ 'LineInputByte 改行コード固定(&h0A, &h0D, &h1A) 'LineInput02Byte 改行コード可変(選択した改行コードをLeCode(0)に返す) 'Open File1$ For Binary As #1 'Do Until Loc(1) = LOF(1) ' B$ = LineInputByte(1) 'Loop 'Close #1 Dim Bbyte As Byte Dim OBbyte As Byte FSize& = LOF(FileNo%) A$ = "": OBbyte = 0 ijcount& = 0 Do Until (FSize& = Loc(FileNo%)) ijcount& = ijcount& + 1 Get #FileNo%, , Bbyte If (Bbyte = 10) Or (Bbyte = 13) Or (Bbyte = 26) Then If Len(A$) > 0 Then Exit Do Else If OBbyte = 0 Then IB& = GetMSCodeByte&(Bbyte, &H40, MScode$, Haba&) If Haba& = 1 Then A$ = A$ + Chr$(IB&) Else OBbyte = Bbyte End If Else IB& = GetMSCodeByte&(OBbyte, Bbyte, MScode$, Haba&) If Haba& = 2 Then A$ = A$ + Chr$(Val("&H" + MScode$)) OBbyte = 0 End If End If End If Loop LineInputByte = A$ End Function Public Function LineInput02Byte(FileNo%, LeCode() As Byte, IER&) As String ' Binary で open したファイル用 Line Input #?,A$ 'LineInputByte 改行コード固定(&h0A, &h0D, &h1A) 'LineInput02Byte 改行コード可変(選択した改行コードをLeCode(0)に返す) 'dim LeCode(0 to 3) as Byte 'LeCode(1)=&h00 'LeCode(2)=&h0d 'Open File1$ For Binary As #1 'Do Until Loc(1) = LOF(1) ' B$ = LineInputByte02(1,LeCode(),IER&) 'Loop 'Close #1 Dim Bbyte As Byte Dim OBbyte As Byte LeCodeSU& = UBound(LeCode) FSize& = LOF(FileNo%) A$ = "": OBbyte = 0: IER& = -1 ijcount& = 0 Do Until (FSize& = Loc(FileNo%)) ijcount& = ijcount& + 1 Get #FileNo%, , Bbyte IA& = 0: IB& = 0 Do IA& = IA& + 1 If Bbyte = LeCode(IA&) Then IB& = -1 Loop Until IA& >= LeCodeSU& If (IB&) Then LeCode(0&) = Bbyte: IER& = 0 Exit Do Else If OBbyte = 0 Then IB& = GetMSCodeByte&(Bbyte, &H40, MScode$, Haba&) If Haba& = 1 Then A$ = A$ + Chr$(IB&) Else OBbyte = Bbyte End If Else IB& = GetMSCodeByte&(OBbyte, Bbyte, MScode$, Haba&) If Haba& = 2 Then A$ = A$ + Chr$(Val("&H" + MScode$)) OBbyte = 0 End If End If End If Loop LineInput02Byte = A$ End Function Function GetMSCodeByte&(Jis1 As Byte, Jis2 As Byte, MScode$, Haba&) '内部連続コードを返します。 'MsCode$には16進文字列でシフトJisコードを返します If (Jis2 <= &H3F) Or (Jis2 = &H7F) Then GetMSCodeByte& = Jis1 IA& = Jis1 MScode$ = NiHex$(IA&) Haba& = 1 ElseIf (Jis1 >= &H81) And (Jis1 < &HA0) Then IA& = Jis1 - &H81 IB& = Jis2 - &H20 If Jis2 >= &H80 Then IC& = 1 Else IC& = 0 GetMSCodeByte& = IA& * 188 + Jis2 + 192 - IC& Haba& = 2 IA& = Jis1 IB& = Jis2 MScode$ = NiHex$(IA&) + NiHex$(IB&) ElseIf (Jis1 >= &HE0) And (Jis1 <= &HFC) Then IA& = Jis1 - &HE0 IB& = Jis2 - &H20 If Jis2 >= &H80 Then IC& = 1 Else IC& = 0 GetMSCodeByte& = IA& * 188 + Jis2 + 6020 - IC& Haba& = 2 IA& = Jis1 IB& = Jis2 MScode$ = NiHex$(IA&) + NiHex$(IB&) Else GetMSCodeByte& = Jis1 Haba& = 1 IA& = Jis1 MScode$ = NiHex$(IA&) End If End Function Function NiHex$(IA&) 'IA& を16進2桁文字に書き換える B$ = Hex$(IA&) If Len(B$) = 1 Then B$ = "0" + B$ NiHex$ = B$ End Function

a12b12
質問者

補足

どもです。開発費3万円のコードだけあって すごいです。私じゃとても作れません。 私には参考にするというよりコピペです。^^; しかし、質問の内容よりかなり大掛かりになってきましたが、皆さんは保存の時このように毎回、大掛かりなコードを書いているのでしょうか??? 早い話が、openを使う人みんなは " を使われない などといいながらやっているのでようか・・・・ a = "<html><body><fontcolor="#00000">"    に入っている文字をただ保存して 読み込んで a = "<html><body><fontcolor="#00000">"    をtextに表示するだけで、これだけのコードを書かなければいけないというのがとても悲しくなりました。

noname#6715
noname#6715
回答No.4

>文章の途中に " が入っているとそこから先が消えて>しまうんです。 今VBAでやってみたら大丈夫でしたが?。 (ただしファイル名は変更しました。C:\test.txtに) まさかとは思うが、 テキストボックスのWordWrapプロパティはTrueだよね? (それでも他の行も"で止まるのは謎)

a12b12
質問者

補足

どもです (t_t;; え!?出来ました???? おかしいな~?出来ませんT_T; vb6.0ですけど、TEXTにWordWrapプロパティ なかったですけど、マルチラインはTRUEです。 大文字の ” はOKですが、半角の " を入れると やはりダメのようですT_T;

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

Line Input #1, a は1行(16進0Aや0Dなどの改行コードまで)を読んで、改行コードを除いて、変数にセットしてくれる「ステートメント」なので、「最初の一行しか表示されません」のは当たり前です。EOF(1)がTRUEになるまで繰り返しLine Input #1, a を繰り返し、毎回印刷するか、文字列に順次連結して行かないと全体は見れません。そして印刷や画面に出して、見た目を改行するには、そういうステートメントで印刷や画面表示しないとだめです。 (旧DOS-BASICのPRINT文などは画面に表示して改行した。) 16進表示に変えられるエディタで"tes.txt"の中身を見てください。判りますから。

a12b12
質問者

補足

どもです。 始めにinputでやってたのですが、3行しか表示されず line inputってなんだろう?とやってみるとさらに1行しか表示されずにT_T;でした。 すぐにinputに戻しましたが、何行書いても3行しか表示されずに、ようやく原因が、 " だと気づきました。 文章の途中に " が入っているとそこから先が消えてしまうんです。 htmlソースの編集用に機能をつけたエディタ なのでどうしても " が沢山はいります。 " が入っても読み込める方法がございましたらよろしくお願いします。 

noname#6715
noname#6715
回答No.2

一応、tes.txtを開いて問題なければ 自信なかったがやっぱり間違い EOF→EOF(1) http://www.g.dendai.ac.jp/lecture/vbasic/vb13.html

a12b12
質問者

補足

どもです、お疲れ様です^^; ホームページのhtmlソースを text1に入れて、保存。 読み込みを押して、text1に出した後に修正。 をやろうと思ってたんですが、さっきから色々やってわかったことが " ←が入っているところから読み込まない・・・のようなのです。 例えば text1に <table><tr><TD width="100" bgcolor=#3366cc height="50"> とhtmlソースを入れて保存、(txtに保存される) しかし読み込むと,<table><tr><TD width=" ←この "で区切られるようなのです。 いったん出来たと思ったのですが ’ ”の違いで錯覚を起こしていて結局振り出しに戻った状況です。T_T; 神様~

noname#6715
noname#6715
回答No.1

ためしに Open "tes.txt" For Input As #1 'test.txtじゃ無いんだ Line Input #1, a Label1.Caption = a Line Input #1, a Label2.Caption = a Line Input #1, a Label3.Caption = a Close #1 ってやるとどうなります?

関連するQ&A