2012-04-13 45 views
0

我有以下:顯示在嵌套單元陣列的所有元素(帶字符的條目)

a = 

{1x1 cell} {1x1 cell} {1x1 cell} {1x1 cell} 

其中:

a{:} 

ans = 

'a' 


ans = 

'a' 


ans = 

'c' 


ans = 

'a' 

我希望有字符:a a c a

由於我需要使用字符打印fprintf

fprintf不會接受a{:}

如果我不a{1}{:}只考慮第一個字符

如何解決這一問題?謝謝。

回答

2

如果你只需要一個字符向量「AACA」,您可以使用此:

a = {{'a'}, {'a'}, {'c'}, {'a'}}; 

a_CharVector = cellfun(@(x) char(x), a); 

如果你想要的字符向量「AACA」,你可以使用regexprep添加空格:

a_CharVectorWithSpaces = regexprep((cellfun(@(x) char(x), a)), '(.)', '$1 '); 

要打印帶空格AACA和換行,你可以使用這個:

fprintf([ regexprep((cellfun(@(x) char(x), a)), '(.)', '$1 '), '\n' ]); 

編輯:刪除不必要的匿名功能。在這種情況下,不需要@(x)

爲了得到特徵向量 'AACA' 這個作品:

a_CharVector = cellfun(@char, a); 

而獲得特徵向量 'AACA' 您可以使用此:

a_CharVectorWithSpaces = regexprep((cellfun(@char, a)), '(.)', '$1 '); 

要使用換行符。printf AACA:

fprintf([ regexprep((cellfun(@char, a)), '(.)', '$1 '), '\n' ]); 
+0

'@(x)'是構造匿名函數的語法。但是,在這種情況下,不需要,因爲'@ char'就足夠了。我編輯了我的答案,添加了不帶'@(x)'語法的解決方案。有關匿名函數的更多信息,可以查看[關於匿名函數的MATLAB文檔](http://www.mathworks.com/help/techdoc/matlab_prog/f4-70115.html)。在某些情況下,匿名函數對'cellfun'和'arrayfun'非常有用。 – nrz 2012-04-14 14:57:31

+0

謝謝。 @nrz我坦率地說,使用Fprintf來保存文本文件,使用你現在的代碼:fileID = fopen('a.txt','at'); fprintf(fileID,'%2.8s \ n',cellfun(@(x)char(x),a)); FCLOSE(FILEID); – pac 2012-04-14 15:21:05

+0

所以,當你將'@(x)'語法和'cellfun'一起使用時,'x'會逐個獲取單元格數組的所有值,所以首先''''''''''' x'又是'{'a'}',然後是'{'c'}'...在這種情況下,'char'應用於所有這些'x'獲取的值,從而創建它們的字符向量。 – nrz 2012-04-14 15:25:12

相關問題