VC++6.0でCStringに格納した文字列を複数行に分けたいと思っております。半角全角がふくまれており、単純に割り切ることができません。
1行の最大バイトの文字が、半角か全角か判定できれば、できると思うのですが、ご教授いただけないでしょうか?
他より良い手段がありましたら、ご教授ください。宜しくお願いいたします。
追記ですが、テキストに落とすために複数行に分けたく思います。
宜しくお願いいたします。
普通は、_ismbblead で、1バイト文字と2バイト文字を判別しますが、完全無欠の切り分けをしようとすると、けっこう煩雑なコードになります。
それより、TCHAR型で処理すれば、単純に1文字ごとに文字列を切れますから、そのほうがいいのではないでしょうか。
確かVC++6.0でTCHAR型は使えたと思うのですが。。。
> それより、TCHAR型で処理すれば、単純に1文字ごとに文字列を切れますから、そのほうがいいのではないでしょうか。
半分まちがい。それはUNICODEモードでないと機能しません。
また、文字数で分割位置を決めるのならそれでいいけど、
バイト数だとややこしいことになります。
ご回答ありがとうございます。
いろいろ考えながら、こんな感じで作って見ました。
今のところ問題なく動いています。
使用方法に誤りがあったら、ご教授ください。
//******************************************************************
// 関数名 : 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;
}
}
禁則処理は不要なんですか?
編集 削除