テキストに
あいうえおかきくけこ\r\nさしすせそたちつてと
のような文書があるとします。
これを、
fin.ReadString(ss);
で取得し、それをエディットボックスに
m_edit1.SetWindowText(ss);
(m_edit1は、適当なコントロール変数)
のように出力しても、[\r\n]のところで改行されないのですが、
どこがいけないのでしょうか?
もし、これらの方法では出来ない場合、どのようにすれば良いですか?
> テキストに
> あいうえおかきくけこ\r\nさしすせそたちつてと
> のような文書があるとします。
\r\nは実際の改行ですか?
それとも普通に「\r\n」という文字ですか?
> fin.ReadString(ss);
> で取得し、それをエディットボックスに
> m_edit1.SetWindowText(ss);
> (m_edit1は、適当なコントロール変数)
実際の改行だった場合は、CStdioFile::ReadString()の解説をもう一度読み直して下さい。
実際の改行コードでない場合は改行コードに置換する処理が必要です。
また、エディトボックスが複数行のスタイル(ES_MULTILINE)になっている必要があります。
\r\nは、実際の改行ではなく文字です。
エディトボックスは複数行のスタイルです。
改行コードに置き換えは、どういう処理(記述)をすれば良いのですか?
文字の\r\nと、改行コードでは何が違うのですか?
> \r\nは、実際の改行ではなく文字です。
> 改行コードに置き換えは、どういう処理(記述)をすれば良いのですか?
では、置き換え処理して下さい。
MFCは使っていないのでよく判りませんが、CString::Replace()辺りでできませんかね。
ss.Replace("\\r\\n", "\r\n");
でしょうか。
> 文字の\r\nと、改行コードでは何が違うのですか?
文字列での「\r\n」はCのソース中では"\\r\\n"と書くカタチになります。
メモリ上には 0x5c 0x72 0x5c 0x6e となって、制御コードが含まれません。
実際の改行コードの場合、Cのソース上では"\r\n"と書き、
メモリ上では 0x0d 0x0a と制御コードになります。
http://www.page.sannet.ne.jp/mtoga/lang/c/bih-c_20.htm
この辺とか参考になりますかね。
# エディトボックスの改行って"\r\n"でなく"\n"だけだったかな???
ss.Replace("\\r\\n", "\r\n");
を使い、置き換えたところ、無事改行することができました。
ありがとうございました。
何度もすみませんが、CString型では無く、char型を使う場合に
ss.Replace()のような便利な関数はありますか?
もし無いのでしたら、みなさんはどのように置き換えているのですか?
> 何度もすみませんが、CString型では無く、char型を使う場合に
> ss.Replace()のような便利な関数はありますか?
> もし無いのでしたら、みなさんはどのように置き換えているのですか?
char型の配列での文字列ってコトですよね?
とりあえず、一発で変換できる方法はないので地道に変換します。
"\\r\\n"と"\r\n"ではサイズも違いますから。
strtok()で切り出して処理するか、strchar()で検索して置き換えるとか、
配列を自分で先頭から調べて置き換え&詰めるとか。
# ある程度はCString::Replace()のソースが参考になるかも知れませんが。
CString型の場合は、
ss.Replace("\\r\\n", "\r\n");
char型の場合は、一つ一つ地道に置き換えることで、
改行することが出来ました。
ありがとうございました。
ツイート | ![]() |