2012-08-13 61 views
1

替換字符串的一部分,我有數據填充像如何在MATLAB

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

字符串矩陣,我想刪除它的文件擴展名並獲得

matrix = ['1231231', '4343'] 

我該怎麼辦它?沒有任何功能或什麼:)

回答

1

假設矩陣看起來像

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

(;代替)。如果使用',',則矩陣中的字符會自動串聯。可以使用arrayfun對矩陣的每個索引執行操作。下面的命令應該工作

arrayfun(@(x) matrix(x,1:strfind(a(matrix,:),'.jpeg')-1), str2num(matrix(:,1))', 'UniformOutput' , false) 
+0

'arrayfun'在內部使用循環時不會在循環中獲得太多的性能。雖然這個「有效」,但更可讀的解決方案是將其簡單地寫成沒有匿名函數的循環。 – slayton 2012-08-14 02:36:01

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 
+0

存在用於我的情況 – 2012-08-13 20:27:41

+0

沒有路徑BRO則pathstr將是空的或類似的東西 – Gir 2012-08-13 22:20:32

3

用戶fileparts,它返回三個變量pathname,以及文件的extension。因此,這應該爲你工作

[~, fName, ext] = fileparts(fileName) 
+0

但我的情況沒有路徑 – 2012-08-13 20:27:14

+2

然後忽略輸出arg(@slayton通過使用'〜'做的) – tmpearce 2012-08-13 20:34:28

+0

,但我也需要做到矩陣的每個元素,並消除每個元素的擴展名。我怎麼能這樣做呢? – 2012-08-13 20:36:46

1

你總是可以遍歷他們,解析他們喜歡:

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

使用[R [I] .dec的數值。

1

注意:不同長度的字符串(垂直)串聯後的矩陣將不起作用(除了等長字符串的特殊情況外)。每個字符由vertcat調用[A;B].

替代時視爲一個單一的矩陣元素,使用細胞陣列和cellfun(+文件擴展名的獨立的):

matrix = {'1231231.jpeg','4343.jpeg'}; 
matrix_name = cellfun(@(x) x(1:find(x == '.', 1, 'last')-1), matrix, 'UniformOutput', false);