2012-04-13 5 views
0

I haben die folgenden:Anzeige alle Elemente in einer verschachtelten Zellenarray (mit Zeicheneingaben)

a = 

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

wobei:

a{:} 

ans = 

'a' 


ans = 

'a' 


ans = 

'c' 


ans = 

'a' 

I die Zeichen haben wollen: a a c a

Seit Ich brauche die zu druckenden Zeichen mit fprintf

fprintf wird nicht akzeptieren a{:}

Wenn ich a{1}{:} Sie ein

Wie beheben dies nur das erste Zeichen betrachten wird? Vielen Dank.

Antwort

2

Wenn Sie nur den Charakter Vektor ‚aaca‘ benötigen, können Sie diese verwenden:

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

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

Wenn Sie den Zeichenvektor ‚aaca‘ möchten, können Sie regexprep nutzen die Räume hinzuzufügen:

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

drucken aaca mit Leerzeichen und Newline Sie diese verwenden können:

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

Edit: unnötige anonyme Funktion entfernt. @(x) ist in diesem Fall nicht notwendig.

Um Zeichen Vektor 'aaca' dies funktioniert:

a_CharVector = cellfun(@char, a); 

und Charakter Vektor 'aaca' bekommen Sie diese verwenden können:

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

Um aaca mit Newline printf:

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

'@ (x)' ist die Syntax zum Erstellen einer anonymen Funktion. In diesem Fall ist es jedoch nicht notwendig, da '@ char 'ausreichend ist. Ich habe meine Antwort bearbeitet, um die Lösung ohne '@ (x)' - Syntax hinzuzufügen. Weitere Informationen zu anonymen Funktionen finden Sie in der MATLAB-Dokumentation zu anonymen Funktionen (http://www.mathworks.com/help/techdoc/matlab_prog/f4-70115.html). Anonyme Funktionen sind in manchen Fällen nützlich bei 'cellfun' und' arrayfun'. – nrz

+0

danke. @nrz Ich benutze ehrlich gesagt Fprintf zu speichern, um Text-Datei mit Ihrem Code ist es jetzt: fileID = fopen ('a.txt', 'at'); fprintf (Datei-ID, '% 2.8s \ n', cellfun (@ (x) char (x), a)); fclose (Datei-ID); – pac

+0

Also, wenn Sie '@ (x)' -Syntax zusammen mit 'cellfun' verwenden, erhält' x' alle Werte des Zellen-Arrays nacheinander, also zuerst 'x' ist' {'a'} ', dann' x' ist wieder '{'a'}', dann '{'c'}' ... und in diesem Fall wird 'char' auf alle diese Werte angewendet, die' x' erhält, wodurch ein Zeichenvektor daraus entsteht. – nrz