はい、可能です。
半角カタカナは16進数で表現すると FF62 から FF9F になります。対象の文字列に対して double 関数を掛けることで文字配列をASCIIコードに直すことができます。
半角と全角の対応付けはASCIIコードを使うと複雑のため、対応表を使用すると便利です。
具体的には以下のようなコード(回答上部にある添付ファイル convertHalf2Full.m)で、半角カナから全角カナへ、全角英語から半角英語への変換をしています。
function fullW = convertHalf2Full(word)
% 半角カタカナ → 全角カタカナ
idx1 = hex2dec('FF61') < double(word);
idx2 = (double(word) < hex2dec('FFA0'));
idx = idx1 & idx2;
word(idx) = half2full_Katakana( word(idx) );
word = erase(word, "゛");
word = erase(word, "゜");
% 全角英語 → 半角英語
idx1 = hex2dec('FF01') < double(word);
idx2 = (double(word) < hex2dec('FF5F'));
idx = idx1 & idx2;
word(idx) = full2half_EN( word(idx) );
fullW = word;
end
% -------
function halfW = full2half_EN(fullW)
halfW = char(fullW - 65248);
end
% -------
function fullW = half2full_Katakana(halfW)
% 事前に半角と全角のカタカナ表を回答上部にある添付よりダウンロードしてください
filename = 'KatakanaFullHalf.xlsx';
Katakana = importKatakanaFile(filename);
for i=1:length(halfW)
% 半角カタカナが含まれているインデクスを取得
idx = contains(Katakana.Half, halfW(i));
% 半角を全角で置き換え
halfW(i) = Katakana.Full(idx);
end
% 濁点,半濁点を見つけたら削除
idx_daku = findstr(halfW, "゛");
idx_handaku = findstr(halfW, "゜");
halfW(idx_daku-1) = char( double( halfW(idx_daku-1) ) +1 );
halfW(idx_handaku-1) = char( double( halfW(idx_handaku-1) ) +2 );
fullW = halfW;
end
なお,実行すると以下のような結果になります.
>> a = '私はタマゴとMILKとスムージーとプリンを朝ごはんに食べる.1234';
>> fullW = convertHalf2Full(a)
fullW =
'私はタマゴとMILKとスムージーとプリンを朝ごはんに食べる.1234'