1

次のようなデータで満たされた文字列行列があります

matrix = ['1231231.jpeg','4343.jpeg',...]

そのファイル拡張子を削除して取得したい

matrix  = ['1231231', '4343']

どうすればいいですか?何か機能がありますか?:)

4

5 に答える 5

3

ユーザーfilepartsは、ファイルの3つの変数、、、およびをpath返しnameますextension。だからこれはあなたのために働くはずです

[~, fName, ext] = fileparts(fileName)
于 2012-08-13T20:24:37.530 に答える
1

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
于 2012-08-13T20:23:18.730 に答える
1

マトリックスが次のように見えると仮定します

 matrix = ['1231231.jpeg';
           '4343.jpeg';
            ....];

(; それ以外の 、)。「,」を使用すると、マトリックス内の文字が自動的に連結されます。

を使用arrayfunして、マトリックスの各インデックスに対して操作を実行できます。次のコマンドが機能するはずです

arrayfun(@(x) matrix(x,1:strfind(a(matrix,:),'.jpeg')-1), str2num(matrix(:,1))', 'UniformOutput' , false)
于 2012-08-13T20:45:11.493 に答える
1

いつでもそれらをループして、次のように解析できます。

r[i] = regexp(char(string), '(?<dec>\d*).(?<ext>\w*)', 'names');

数値には r[i].dec を使用します。

于 2012-08-13T20:57:21.180 に答える
1

注: 異なる長さの文字列を (垂直に) 連結した行列は機能しません (同じ長さの文字列の特殊なケースを除く)。vertcat各文字は、呼び出し時に単一の行列要素として扱われます[A;B].

代わりに、セル配列とcellfun(+ファイル拡張子に依存しない) を使用:

matrix = {'1231231.jpeg','4343.jpeg'};
matrix_name = cellfun(@(x) x(1:find(x == '.', 1, 'last')-1), matrix, 'UniformOutput', false);
于 2012-08-13T22:39:25.540 に答える