1行を複数行に分ける方法


ぺぺ  2007-08-14 22:59:42  No: 66013  IP: 192.*.*.*

VC++6.0でCStringに格納した文字列を複数行に分けたいと思っております。半角全角がふくまれており、単純に割り切ることができません。
1行の最大バイトの文字が、半角か全角か判定できれば、できると思うのですが、ご教授いただけないでしょうか?

他より良い手段がありましたら、ご教授ください。宜しくお願いいたします。

編集 削除
ぺぺ  2007-08-15 00:06:19  No: 66014  IP: 192.*.*.*

追記ですが、テキストに落とすために複数行に分けたく思います。
宜しくお願いいたします。

編集 削除
ぷぷ  2007-08-15 08:25:45  No: 66015  IP: 192.*.*.*

普通は、_ismbblead  で、1バイト文字と2バイト文字を判別しますが、完全無欠の切り分けをしようとすると、けっこう煩雑なコードになります。

それより、TCHAR型で処理すれば、単純に1文字ごとに文字列を切れますから、そのほうがいいのではないでしょうか。

確かVC++6.0でTCHAR型は使えたと思うのですが。。。

編集 削除
επιστημη  URL  2007-08-15 10:42:19  No: 66016  IP: 192.*.*.*

> それより、TCHAR型で処理すれば、単純に1文字ごとに文字列を切れますから、そのほうがいいのではないでしょうか。

半分まちがい。それはUNICODEモードでないと機能しません。
また、文字数で分割位置を決めるのならそれでいいけど、
バイト数だとややこしいことになります。

編集 削除
ぺぺ  2007-08-15 11:09:05  No: 66017  IP: 192.*.*.*

ご回答ありがとうございます。
いろいろ考えながら、こんな感じで作って見ました。

今のところ問題なく動いています。
使用方法に誤りがあったら、ご教授ください。


//******************************************************************
// 関数名        : IsLastCutWord
//               :
// 関数日本語名  : 1行の最後のマルチバイトが半角で壊れていないか
//               :  判定する。
//               :
// 引数          : CString   inData     文字列
//               : int       inMaxSize  1行の最大文字列バイト数
//               :
// 戻り値        : TRUE      : マルチバイトが半角で壊れる
//               : FALSE     : マルチバイトが正しく格納される。
// 内容          : 
//               :
//*******************************************************************
int IsLastCutWord(CString inData, int inMaxSize){

    for( int i = 0; i < inMaxSize; ){
        if( _ismbblead(inData.GetAt(i)) != 0 ){
            i += 2;
        }else{
            i++;
        }
    }
    if( i == inMaxSize ){
        return FALSE;
    }else{
        return TRUE;
    }
}

編集 削除
渋木宏明(ひどり)  URL  2007-08-16 23:07:09  No: 66018  IP: 192.*.*.*

禁則処理は不要なんですか?

編集 削除