Hallo zusammen, ich sitze nun schon eine ganze Weile an diesem Problem. Es geht um folgendes: Ich erstelle eine Liste (200 Zeilen und 2 Spalten). In jeder Zeile steht ein Simulink-Block Name und daneben erst einmal die Anzahl Null.
jetzt habe ich praktisch die cell 'Simulink_Liste' und die cell 'Typ_Anzahl'.
jetzt brauche ich eine Schleife, die mir die Anzahl der Blöcke an die richtige Stelle in der 'Simulink_Liste' schreibt. Mein Ansatz sieht bis jetzt folgendermaße aus:
Code:
for i = 1:length(Typ_Anzahl)
Name = strcmp(all_blks,Typ_Anzahl{i}); %Bace_Liste (an der Stelle des gefundenen Block-Namens steht eine '1')
suchen = find(Name,'1'); % Zeilennummer, in der Block-Typ steht
old_number = sprintf('%f', Bace_Liste{suchen,2});
new_number = sprintf('%f', Typ_Anzahl{i,2});
wo = sprintf('%f', Bace_Liste{suchen,2});
String_ersetzt = strrep(wo, old_number, new_number);
Mit dem strrep klappt es zwar so nach einigen Datentyp-Umwandlungen, aber ich möchte ja in der gesamten 'Simulink_Liste' die richtige Anzahl der gefunden Blöcke hinschreiben und nicht am Ende nur eine Null in eine z.B. 5 umwandeln. Die Liste muss am Ende komplett sein, also alle Block-Typen und daneben eben die Anzahl.
Ich hoffe irgendjemand kann mir hier weiterhelfen. Wäre wirklich super! Danke.
Hallo zusammen, ich sitze nun schon eine ganze Weile an diesem Problem. Es geht um folgendes: Ich erstelle eine Liste (200 Zeilen und 2 Spalten). In jeder Zeile steht ein Simulink-Block Name und daneben erst einmal die Anzahl Null.
jetzt habe ich praktisch die cell 'Simulink_Liste' und die cell 'Typ_Anzahl'.
jetzt brauche ich eine Schleife, die mir die Anzahl der Blöcke an die richtige Stelle in der 'Simulink_Liste' schreibt. Mein Ansatz sieht bis jetzt folgendermaße aus:
Code:
for i = 1:length(Typ_Anzahl)
Name = strcmp(all_blks,Typ_Anzahl{i}); %Bace_Liste (an der Stelle des gefundenen Block-Namens steht eine '1')
suchen = find(Name,'1'); % Zeilennummer, in der Block-Typ steht
old_number = sprintf('%f', Simulink_Liste{suchen,2});
new_number = sprintf('%f', Typ_Anzahl{i,2});
wo = sprintf('%f', Bace_Liste{suchen,2});
String_ersetzt = strrep(wo, old_number, new_number);
Mit dem strrep klappt es zwar so nach einigen Datentyp-Umwandlungen, aber ich möchte ja in der gesamten 'Simulink_Liste' die richtige Anzahl der gefunden Blöcke hinschreiben und nicht am Ende nur eine Null in eine z.B. 5 umwandeln. Die Liste muss am Ende komplett sein, also alle Block-Typen und daneben eben die Anzahl.
Ich hoffe irgendjemand kann mir hier weiterhelfen. Wäre wirklich super! Danke.
raule
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 14.02.2013, 15:04
Titel:
Ich weiß nicht genau, ob ich dich richtig verstanden habe. Du hast im Endeffekt einen Anfangsvektor, der irgendwelche Strings enthält und willst in einem anderen Vektor gleicher Länge an jeder Stelle stehen haben, wie oft dieser String vorkommt?
Falls ja, sollte ein Wörterbuch/hash table die Sache vereinfachen:
Ich weiß nicht genau, ob ich dich richtig verstanden habe. Du hast im Endeffekt einen Anfangsvektor, der irgendwelche Strings enthält und willst in einem anderen Vektor gleicher Länge an jeder Stelle stehen haben, wie oft dieser String vorkommt?
Falls ja, sollte ein Wörterbuch/hash table die Sache vereinfachen:
hallo raule, nein nicht ganz. also ich habe zum Beispiel eine cell (5x2), die sieht so aus: 'Subsystem' [0]
'Inport' [0]
'Outport' [0]
'DiscreteFir' [0]
'TriggerPort' [0]
So, und jetzt hab durch suche ich per matlab-code irgendein Simulink-Modell und lasse mir die Anzahl und den Blocktyp der im Modell verwendeten Blöcke ausgeben. Das sieht dann z.B so aus: cell(2x2)
'Subsystem' [3]
'DiscreteFir' [2]
Es wurden also im Modell xy drei Subsysteme und zwei discreteFir gefunden.
Jetzt will die [3] und die [2] oben in die erste cell (7x2) anstatt der Null hinschreiben. Natürlich die 3 bei subsystem und die 2 bei discreteFir.
Soll dann so aussehen:
'Subsystem' [3]
'Inport' [0]
'Outport' [0]
'DiscreteFir' [2]
'TriggerPort' [0]
Ich habe es ja mit strrep schon versucht aber das will irgendwie nicht funktionieren. Ich kenne mich leider nicht sehr gut aus in Matlab.
danke für deine Hilfe.
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 14.02.2013, 15:28
Titel:
Anonymous hat Folgendes geschrieben:
raule hat Folgendes geschrieben:
Ich weiß nicht genau, ob ich dich richtig verstanden habe. Du hast im Endeffekt einen Anfangsvektor, der irgendwelche Strings enthält und willst in einem anderen Vektor gleicher Länge an jeder Stelle stehen haben, wie oft dieser String vorkommt?
Falls ja, sollte ein Wörterbuch/hash table die Sache vereinfachen:
hallo raule, nein nicht ganz. also ich habe zum Beispiel eine cell (5x2), die sieht so aus: 'Subsystem' [0]
'Inport' [0]
'Outport' [0]
'DiscreteFir' [0]
'TriggerPort' [0]
So, und jetzt hab durch suche ich per matlab-code irgendein Simulink-Modell und lasse mir die Anzahl und den Blocktyp der im Modell verwendeten Blöcke ausgeben. Das sieht dann z.B so aus: cell(2x2)
'Subsystem' [3]
'DiscreteFir' [2]
Es wurden also im Modell xy drei Subsysteme und zwei discreteFir gefunden.
Jetzt will die [3] und die [2] oben in die erste cell (7x2) anstatt der Null hinschreiben. Natürlich die 3 bei subsystem und die 2 bei discreteFir.
Soll dann so aussehen:
'Subsystem' [3]
'Inport' [0]
'Outport' [0]
'DiscreteFir' [2]
'TriggerPort' [0]
Ich habe es ja mit strrep schon versucht aber das will irgendwie nicht funktionieren. Ich kenne mich leider nicht sehr gut aus in Matlab.
danke für deine Hilfe.
for i = 1:size(block_array, 1)
current_block = block_array{i,1};
try
block_array{i,2} = blocks_to_frequencies(current_block);
catch err
ifstrcmp(err.identifier, 'MATLAB:Containers:Map:NoKey') continue else
rethrow(err);
end end end
block_array
for i = 1:size(block_array, 1)
current_block = block_array{i,1};
try
block_array{i,2} = blocks_to_frequencies(current_block);
catch err
ifstrcmp(err.identifier, 'MATLAB:Containers:Map:NoKey') continue else
rethrow(err);
end end end
block_array
Suuuuper!!! Vielen Dank, hätte ich nie allein geschafft
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.