#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'
}}

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes