リッチテキストの読み込みが上手くいきません

解決


かもめ  2005-03-08 19:22:54  No: 88748  IP: [192.*.*.*]

filename = ファイル
FileNo = FreeFile
Open filename For Input As FileNO
Do until EOF(FileNo)
     Line Input #FileNo, strBuff
:

上記のようにファイルの中身を読むコードを書いてます。
ファイルが通常のテキストやCSVの場合なら正しく読み込んで
くれますがリッチテキストの場合、読み込む際文字が化けてしまいます。
どうしたらいいか困っているので誰か教えてくれませんか?

編集 削除
030  2005-03-08 21:20:18  No: 88749  IP: [192.*.*.*]

>リッチテキストの場合、読み込む際文字が化けてしまいます。
化けているんじゃなくて、RTFコードを含めてそのままを読み込んでいるんですよ。


リッチテキストを読み込みたいのであればRichTextBoxのLoadFileメソッド
を使って読み込めばいいんじゃないでしょうか。

編集 削除
かもめ  2005-03-09 13:09:44  No: 88750  IP: [192.*.*.*]

リッチテキストファイルコントロールに
テキストファイルとリッチテキストファイルの
内容を合わせて格納したときはどちらも
正常に値をとれるのでしょうか?

編集 削除
ガッ  2005-03-09 13:18:16  No: 88751  IP: [192.*.*.*]

※横スマソ
> リッチテキストファイルコントロールに
> テキストファイルとリッチテキストファイルの
> 内容を合わせて格納したときはどちらも
> 正常に値をとれるのでしょうか?
…試した?

編集 削除
かもめ  2005-03-09 13:53:53  No: 88752  IP: [192.*.*.*]

Open "abc.rtf" For Output As FileNo
    Print #FileNo, RText.TextRTF
    Print #FileNo, Text.Text
Close FileNo

とやってみたのですがRtextの内容しか入っていなくてTextの内容が
入ってませんでした。
内容を組み合わせて正確に値が格納できるか調査する以前に
2つの内容を合わせて格納するとこまでいっていないので
試せてはいません。
試す前に質問とかしてすいません

編集 削除
ガッ  2005-03-09 14:08:30  No: 88753  IP: [192.*.*.*]

問題点があやふやだなぁ…それとも俺の理解不足か…?(orz
なんとなく、RTFとテキストが混同していると思われるので、何か書こうかと思う。
Microsoft リッチテキスト ボックス コントロール 6.0(RICHTX32.oca)のプロパティ、
"Text"と"TextRTF"について補足。
・Textはリッチテキストボックスコントロールの文章上の文章。
・TextRTFはRTF(RichTextFormat)が入っている。

たとえば、Text="abc"として、TextRTFを見ると、
{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset128 \'82\'6c\'82\'72 \'82\'6f\'83\'53\'83\'56\'83\'62\'83\'4e;}}
\viewkind4\uc1\pard\lang1041\f0\fs18 abc
\par }
となっている(…汚いな…)。
このTextRTFをリッチテキストファイルとして保存すれば、リッチテキストフォーマットのファイルが出来る。

…で、補足がおわるわけだけど…他に書くことあったかなぁ…?

※ヘルプを見た感じのです。

編集 削除
史上最弱の弟子  2005-03-09 14:12:35  No: 88754  IP: [192.*.*.*]

どうやって確認しましたか?
こちらで試した後、メモ帳で開くとちゃんとTextの内容が入っていましたよ。
ただし、Wordで開くとRtextの部分でリッチテキストの終了だと判断してしまうようです。

単純にテキストの部分が欲しいなら、これでいいのでは?
Open "abc.txt" For Output As FileNo
    Print #FileNo, RText.Text
    Print #FileNo, Text.Text
Close FileNo

編集 削除
かもめ  2005-03-09 14:41:00  No: 88755  IP: [192.*.*.*]

史上最弱の弟子さんの言うようにメモ帳で開いた場合、
テキストの文字はちゃんと入りますがリッチの場合は
タグ?っぽいのが入ってしまいます。
テキスト部分のみじゃなくて今回は2つのファイルを
1つのリッチテキストとして保存してそれを読み込みたい
です。


ガッさんのコメントを参考にして
RText.Text = RText.Text & vbCrLf & Text.Text
Print #FileNo, RText.TextRTF
としたのですがこの場合テキスト部分までリッチテキストフォーマット
が効いてしまいました。

1つのリッチテキストにリッチテキスト、テキストの内容をそのまま
書き込むというのできないのでしょうか?

編集 削除
ガッ  2005-03-09 14:56:41  No: 88756  IP: [192.*.*.*]

Open "abc.txt" For Output As FileNo
    Print #FileNo, RText.Text
    Print #FileNo, Text.Text
Close FileNo

> 史上最弱の弟子さんの言うようにメモ帳で開いた場合、
> テキストの文字はちゃんと入りますがリッチの場合は
> タグ?っぽいのが入ってしまいます。
それは、"Print #FileNo, RText.Text"の"RText.Text"の部分ですな。

> テキスト部分のみじゃなくて今回は2つのファイルを
> 1つのリッチテキストとして保存してそれを読み込みたい
> です。
んー…具体的な部分をコードとして提示しないと、いつまでも押し問答が続くぞ?
…ひとまず、やりたいことを箇条書きにすることをお勧めする。
矛盾を取り払うという意味も含めて。

> ガッさんのコメントを参考にして
> RText.Text = RText.Text & vbCrLf & Text.Text
たしか、俺は RText.Text="abc" としたら、RText.TextRTF も変更されると暗黙に書いたような…?
ま、もう一度言っておきましょう。
RText.Text に代入 → RText.TextRTF でRText.TextのリッチテキストフォーマットされたStringが取れる。

> Print #FileNo, RText.TextRTF
> としたのですがこの場合テキスト部分までリッチテキストフォーマット
> が効いてしまいました。
そりゃそーでしょう…
と、上記に書いたとおりのことが実際に起こったからです。

> 1つのリッチテキストにリッチテキスト、テキストの内容をそのまま
> 書き込むというのできないのでしょうか?
コレだけなら、

dim st as string
st=RText.TextRTF & vbcrlf & Text.Text
open "somefile" for output as FileNo
  print #FileNo,st;
close FileNo

でいい予感。

※…まぁ、どこがわからないかを箇条書きすれば矛盾も(ry

編集 削除
ガッ  2005-03-09 14:57:32  No: 88757  IP: [192.*.*.*]

…なんかメチャクチャなこと書いているかも…
スマソ、石油ストーブ&カゼっぽぃので頭クラクラなので、この辺で(orz

編集 削除
史上最弱の弟子  2005-03-09 15:32:53  No: 88758  IP: [192.*.*.*]

そもそも、なぜリッチテキストとして保存したいのでしょうか?

最初の質問が
> ファイルが通常のテキストやCSVの場合なら正しく読み込んで
> くれますがリッチテキストの場合、読み込む際文字が化けてしまいます。
> どうしたらいいか困っているので誰か教えてくれませんか?
なので、リッチテキストで保存せずにプレーンテキストで保存すれば良い
と思うのですが・・・
> RText.Text = RText.Text & vbCrLf & Text.Text
> Print #FileNo, RText.TextRTF
じゃなくて
RText.Text = RText.Text & vbCrLf & Text.Text
Print #FileNo, RText.Text
でいいかと。

編集 削除
かもめ  2005-03-09 16:37:43  No: 88759  IP: [192.*.*.*]

リッチテキストとテキストの内容を合わせてその内容を取得
してその情報をいろいろ使用していこうと思ってます。
その際、リッチテキストの内容をそのまま使用したいのです。

ただ、その合わせた内容がほしいだけなので実際にはリッチテキスト
ファイルに書き込まなくても内容がとれるのであればそれを利用
したいと思います。

編集 削除
かもめ  2005-03-09 16:37:44  No: 88760  IP: [192.*.*.*]

リッチテキストとテキストの内容を合わせてその内容を取得
してその情報をいろいろ使用していこうと思ってます。
その際、リッチテキストの内容をそのまま使用したいのです。

ただ、その合わせた内容がほしいだけなので実際にはリッチテキスト
ファイルに書き込まなくても内容がとれるのであればそれを利用
したいと思います。

編集 削除
史上最弱の弟子  2005-03-09 17:51:50  No: 88761  IP: [192.*.*.*]

リッチテキストファイルとテキストファイルを合わせてテキストボックスに
表示するならこんな感じですけど、こういうこと?

RichTextBox1.LoadFile "c:\hogehoge.rtf", rtfRTF
Text1.Text = RichTextBox1.Text

RichTextBox1.LoadFile "c:\hogehoge.txt", rtfText
Text1.Text = Text1.Text & vbCrLf & RichTextBox1.Text

編集 削除
ひろ  2005-03-09 18:04:05  No: 88762  IP: [192.*.*.*]

私もガッさんと同じく「やりたいこと」を箇条書きにして整理する事をおすすめします。今回の場合リッチテキストは目的ではなくて手段の一部のような気がするので、そこもきちんと切り分けて整理しましょう。

>リッチテキストとテキストの内容を合わせてその内容を取得
>してその情報をいろいろ使用していこうと思ってます。

「いろいろ」なんて曖昧な事を書いているうちは整理できているとは言いません。

入っている文字の情報だけあればいいのですか?
それとも、元物文書の体裁を維持して丸ごと引き継いで使いたいのですか?

やりたいことが曖昧な内はコーディングのしようがありませんよ。

編集 削除
ねろ  2005-03-09 18:36:54  No: 88763  IP: [192.*.*.*]

何も考えずに、フォームにRichTextBox1とText1を置いて
Private Sub Form_Load()
    Dim FileNo As Integer
    Dim FileName As String
    FileNo = FreeFile
    FileName = App.Path + "\Test.txt"
    Open FileName For Output As #FileNo
    RichTextBox1.Text = "てすと"
    Text1.Text = "テスト"
    Print #FileNo, RichTextBox1.TextRTF
    Print #FileNo, Text1.Text
    Close
End Sub
とやってみるとか。

編集 削除
030  2005-03-09 19:22:15  No: 88764  IP: [192.*.*.*]

なんか質問内容が「読み込み」からかなり脱線しているような気がしますね。
読み込めたんなら一旦スレ閉じて新たな疑問は新スレで質問したらどうですか?

編集 削除
030  2005-03-09 19:22:59  No: 88765  IP: [192.*.*.*]

皆さんがおっしゃっているように
要点をまとめてね。

編集 削除
かもめ  2005-03-09 20:50:31  No: 88766  IP: [192.*.*.*]

実際にやりたいことをまとめると・・
・リッチテキストファイルをまず作成します。
・テキストボックス等からテキストデータを変数に格納します。
・リッチテキストボックスにリッチテキストと変数の値を入れて
  表示させる
です。

ただ、リッチテキストボックスにデータを格納する際は元のデータを
壊さずに入れたいです。
例えば・・
  リッチテキストファイルに  "あいう(サイズ20,赤,ゴシック)"  
                            "えお(サイズ10,緑,明朝体)"
  テキストボックスのデータ  "かきくけこ(フォント10,ゴシック)"
  のような文字が入っていた場合,リッチテキストボックスには
  "あいう(サイズ20,赤,ゴシック)"  
  "えお(サイズ10,緑,明朝体)"
  "かきくけこ(フォント10,ゴシック)"
  としてデータを入れたい訳です。
上記のコードを試してみましたがどっちかのデータがおかしくなってしまい
ました。

編集 削除
030  2005-03-09 21:16:39  No: 88767  IP: [192.*.*.*]

いや。。。だから、その質問が最初の質問と主旨が全然ちがうから
このスレで聞かないほうがいいといったんだけど。

>ファイルが通常のテキストやCSVの場合なら正しく読み込んで
>くれますがリッチテキストの場合、読み込む際文字が化けてしまいます。
>どうしたらいいか困っているので誰か教えてくれませんか?

これが最初の質問で、やりたいことはリッチテキストの内容を読み込む
ということだったんじゃないですか?

で、その目的が達成したなら(以下略

編集 削除
030  2005-03-09 21:28:37  No: 88768  IP: [192.*.*.*]

あと、一言だけ。
人から聞くのもいいけど一度ぐらいMSDNライブラリ等のヘルプを読んでね。

編集 削除
ねろ  2005-03-09 21:38:51  No: 88769  IP: [192.*.*.*]

TextRTFを直接操作する場合は、基本的にリッチテキストが
どういう構造になっているか知らないと難しい。
Google等でリッチテキストについて調べられた方が良いのでは。

>いや。。。だから、その質問が最初の質問と主旨が全然ちがうから
>このスレで聞かないほうがいいといったんだけど。
030さん、かもめさんはTextRTFの構造を理解していなので、正しく読み込めて
いないとと判断しているのでは無いのでしょうか。
すなわち、質問の趣旨はそれはそれなりに、初めから一貫しているのでは。

そこで私は前のレスで、リッチテキストとプレーンテキストの違いを簡単に
説明するプログラムを提示したつもりですが、ちょっと回りくどかったりして。

編集 削除
史上最弱の弟子  2005-03-10 09:48:18  No: 88770  IP: [192.*.*.*]

リッチテキストボックスにテキストボックスのデータを書式も含めて
リッチテキストボックスに追加するなら、こんな感じですね。

RichTextBox1.Text = RichTextBox1.Text & vbCrLf & Text1.Text

RichTextBox1.SelStart = Len(RichTextBox1.Text) - Len(Text1.Text)
RichTextBox1.SelLength = Len(Text1.Text)

RichTextBox1.SelAlignment = Text1.Alignment
RichTextBox1.SelBold = Text1.Font.Bold
RichTextBox1.SelColor = Text1.ForeColor
RichTextBox1.SelFontName = Text1.Font.Name
RichTextBox1.SelFontSize = Text1.Font.Size
RichTextBox1.SelItalic = Text1.Font.Italic
RichTextBox1.SelStrikeThru = Text1.Font.Strikethrough
RichTextBox1.SelUnderline = Text1.Font.Underline

編集 削除
かもめ  2005-03-11 09:11:17  No: 88771  IP: [192.*.*.*]

いろいろ曖昧な質問の連続ですいませんでした。
史上最弱の弟子さんのコードを参考にして完成しました。
ありがとうございました。

編集 削除
かもめ  2005-03-15 09:48:25  No: 88772  IP: [192.*.*.*]

解決のチェックを入れるのを忘れてました。

編集 削除