次のようなデータで満たされた文字列行列があります
matrix = ['1231231.jpeg','4343.jpeg',...]
そのファイル拡張子を削除して取得したい
matrix = ['1231231', '4343']
どうすればいいですか?何か機能がありますか?:)
ユーザーfilepartsは、ファイルの3つの変数、、、およびをpath
返しname
ますextension
。だからこれはあなたのために働くはずです
[~, fName, ext] = fileparts(fileName)
matlabにはこのための関数があります
http://www.mathworks.com/help/techdoc/ref/fileparts.html
file = 'H:\user4\matlab\classpath.txt';
[pathstr, name, ext] = fileparts(file)
pathstr =
H:\user4\matlab
name =
classpath
ext =
.txt
マトリックスが次のように見えると仮定します
matrix = ['1231231.jpeg';
'4343.jpeg';
....];
(; それ以外の 、)。「,」を使用すると、マトリックス内の文字が自動的に連結されます。
を使用arrayfun
して、マトリックスの各インデックスに対して操作を実行できます。次のコマンドが機能するはずです
arrayfun(@(x) matrix(x,1:strfind(a(matrix,:),'.jpeg')-1), str2num(matrix(:,1))', 'UniformOutput' , false)
いつでもそれらをループして、次のように解析できます。
r[i] = regexp(char(string), '(?<dec>\d*).(?<ext>\w*)', 'names');
数値には r[i].dec を使用します。
注: 異なる長さの文字列を (垂直に) 連結した行列は機能しません (同じ長さの文字列の特殊なケースを除く)。vertcat
各文字は、呼び出し時に単一の行列要素として扱われます[A;B].
代わりに、セル配列とcellfun
(+ファイル拡張子に依存しない) を使用:
matrix = {'1231231.jpeg','4343.jpeg'};
matrix_name = cellfun(@(x) x(1:find(x == '.', 1, 'last')-1), matrix, 'UniformOutput', false);