メガネのブログ
Amebaでブログを始めよう!

C 半角カナ判定

Cで半角カナの判定をやってみました。

プロジェクトの文字セットが、Unicode になっているか、
マルチバイトになっているかで、文字の扱いが違うので、
以下のようにどちらにも対応できるようにしてみました。

半角カナ判定--------------------------------------------------
 TCHAR* tc = _T(";あアカサタナ");
 int tc_size = lstrlen(tc);

#ifdef UNICODE

 for( int i = 0; i < tc_size; i++ ){
if ( (WORD)tc[i] >= 0xff61 && (WORD)tc[i] <= 0xff9f ) {
/// 半角カナだった場合の処理
}
}

#else

 for ( int i = 0; i < tc_size; i++ ) {
if ( _ismbbkana(tc[i]) ) {
   /// 半角カナだった場合の処理
   }
 }
#endif
--------------------------------------------------------------


マルチバイトの場合(#else)、文字列が char* なので、そのまま、
_ismbbkanaを使用しています。

_ismbbkana に、Unicode の WCHAR* は使用できないので、
wcstombs_s とか使って変換すればできるのかと思ったが、
locale.h を、include する必要があるようなので、Unicode
の半角カナの範囲を調べて、上記のようにやってみました。

一応判定は出来ていますが、いいやり方ではないのかな?


*+*+*+*+*+*+*+*+*+*+*+***+*
フリーエンジニアの方々へ
支援サービス『SYNAPSE』で案件を提供させい頂いております。 
当サービスのメディエイターが、
皆様のニーズにマッチした案件を提案させていただきます!
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
案件提案型フリーエンジニア支援サービス『SYNAPSE』
http://www.neuron-network.co.jp/fe-synapse/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
*+*+*+*+*+*+*+*+*+*+*+***+*

VC++ マウスホイールでスクロール

久しぶりのブログです。。

マウスホイールでスクロールを実行する方法を紹介してみます。

xxxView.cpp ----------------------------------------------------
BOOL xxxView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
WPARAM upDown;
if ( zDelta < 0 ) {
upDown = SB_LINEDOWN;
}
else {
upDown = SB_LINEUP;
}

this->SendMessage( WM_VSCROLL, upDown, 0 );
return FALSE;
}
----------------------------------------------------------------

対象のビュークラスで、OnMouseWheelをオーバーライドして、その中の
処理で、WM_VSCROLL(縦スクロール) メッセージをビューに送っています。

zDelta の値については、msdnを参照してください。


フリーエンジニアの方々へ
支援サービス『SYNAPSE』で案件を提供させい頂いております。 
当サービスのメディエイターが、
皆様のニーズにマッチした案件を提案させていただきます!
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
案件提案型フリーエンジニア支援サービス『SYNAPSE』
http://www.neuron-network.co.jp/fe-synapse/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

ruby 動的にインスタンス変数を設定 instance_variable_set

動的にインスタンス変数を設定する方法を、紹介してみたいと思います。



動的にインスタンス変数を設定するには、instance_variable_set を使用します。



以下は、CSVファイルから読み込んだ値を、動的にインスタンス変数に設定する例です。


CSV.open の使用方法は、以下を参照してください。

http://www.ruby-lang.org/ja/man/html/CSV.html

---------------test.rb-------------------------

require 'csv'


class Test
@@cols = %w(one two three four five)


def set_value(row)
row.each_index do |i|
instance_variable_set('@' + @@cols[i], row[i])
end
end

def start
CSV.open('test.csv', 'r') do |row|
set_value(row)
puts @one, @two, @three, @four, @five
end
end
end


---------------------------------------------


この例での、test.csv の内容は、以下のようになります。

---------------test.csv------------------------

"data1-1","data1-2","data1-3","data1-4","data1-5"
"data2-1","data2-2","data2-3","data2-4","data2-5"

----------------------------------------------


この例の実行結果は、以下のようになります。

---------------実行結果---------------------

data1-1
data1-2
data1-3
data1-4
data1-5
data2-1
data2-2
data2-3
data2-4
data2-5

----------------------------------------------


配列 @@cols の要素の文字列が

instance_variable_set('@' + @@cols[i], row[i])

の部分で、インスタンス変数として設定されます。



*+*+*+*+*+*+*+*+*+*+*+***+*
フリーエンジニアの方々へ

支援サービス『SYNAPSE』で案件を提供させい頂いております。 
当サービスのメディエイターが、
皆様のニーズにマッチした案件を提案させていただきます!
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
案件提案型フリーエンジニア支援サービス『SYNAPSE』
http://www.neuron-network.co.jp/fe-synapse/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
*+*+*+*+*+*+*+*+*+*+*+***+*