#author("2018-07-25T21:16:21+09:00","default:Miyashita","Miyashita") #author("2019-02-08T12:41:33+09:00","default:Miyashita","Miyashita") *文字列の操作 [#c3ba02dc] **文字列の置換 [#j07b57c0] strrepを使えば正規表現も含めて大体いける.~ strという文字列から空白やタブを詰めたい時は, #codeprettify(lang-matlab){{ str = strrep(str,' ',''); str = strrep(str,'\t',''); }} 単純に先頭または末尾の空白を詰めたい時は #codeprettify(lang-matlab){{ str = strtrim(str) }} の方が良い. **文字列の検出 [#f51760fa] ある文字列keywordがあるかないか確認する. #codeprettify(lang-matlab){{ if ~isempty(strfind(str,keyword)) disp('ある') else disp('ない') end }} keywordの文字列が含まれている場合は,strfindはインデックスを返す. **文字列の一致判定 [#jbb1cb19] #codeprettify(lang-matlab){{ if strcmp(str,keyword) disp('strとkeywordは一致する') else disp('strとkeywordは一致しない') end }} **文字列の連続生成 [#x05d4425] repmatを使う.ある文字列strを行方向にn個並んだ連続で作成したければ #codeprettify(lang-matlab){{ repmat(str,[n 1]) }} またテキストファイルへのアウトプットで改行を含むときは,改行(正規表現で\n)をもとに列方向へのrepmatが使える. またテキストファイルへのアウトプットで改行を含むときは,改行(\n)をもとに列方向へのrepmatが使える. #codeprettify(lang-matlab){{ format_1 = repmat('%f\n',[1 n]) }} **文字列の分割 [#x14d9faa] +Delimiter(区切り文字)ごとに分割するとき~ strsplitを使う.~ 全ての行をループを使わずに一括で変換する方法は不明.~ 下記のstrという文字列それぞれ単語ごとに分けたいとすると,空白区切りなので #codeprettify(lang-matlab){{ str = 'aaa bbb ccc'; str = strsplit(str,' '); }} 2つめの引数はDelimiterを指す.~ str自体がセルの時は,charかcell2matで単なるchar配列に変換しておく.~ #codeprettify(lang-matlab){{ str = strsplit(char(str),' '); }} +一定の文字間隔(カラム)で分割するとき~ reshapeを使う.~ 下記のstrを,空白も含めて3文字ずつに分割したいとする. #codeprettify(lang-matlab){{ str = 'aaa bbb ccc'; str = reshape(str,3,[])'; }} 行列の転置記号(')を忘れずに.~ この処理で,strは以下のように,3文字ずつ(5x3のchar配列)に変換できる. #codeprettify(lang-matlab){{ str = 'aaa' ' ' 'bbb' ' ' 'ccc' }}