WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Gleiche Stellen mehrerer Cell-Arrays zusammenführen

 

timlie
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 03.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.03.2021, 18:33     Titel: Gleiche Stellen mehrerer Cell-Arrays zusammenführen
  Antworten mit Zitat      
Hey,
ich habe mehrere Patch-Objekte in deren UserData ich Daten abgespeichert habe. Beispielhaft für 2 Patches habe ich euch Mat-files mit den Daten angehängt. Mein Ziel ist es ab der Stele bzw. cell (1,3) die Daten der unterschiedlichen Patches, die sich an der gleichen Stelle in UserData befinden, zusammenzuführen. Die ersten zwei Einträge in UserData sollen nicht berücksichtigt werden. Anschließend will ich die zusammengeführten Daten über fprintf() in der richtigen Reihenfolge in eine Datei schreiben.

Was für einen Datentyp empfehlt ihr um die gleichen Cells zusammenzufassen und in eine Datei zu schreiben?
Ein weiteres Problem ist, dass manche Cells leer sind. Wenn wie in den angehängten Dateien z.B. UserData_1 an Stelle 5 Daten gespeichert hat und UserData_2 nicht, muss man ja iwie erkennen ob der Cell an dieser Stelle überhaupt ein Feld hat.

Die fertige Datei sollte dann wie folgt aussehen:

M103
M103
M103
M103
M103
M103
M103
G00 X0 Y0
G00 X0 Y0
G00 X0 Y0
G00 X0 Y0
G00 X0 Y0
G00 X0 Y0

Q1=30 F0
Q1=30 F0
Q1=30 F0
Q1=30 F0
Q1=30 F0
Q1=30 F0
Q1=30 F0
Q1=30 F0

G01 X0 Y0 F0
G01 X0 Y0 F0
G01 X0 Y0 F0
G01 X0 Y0 F0
G01 X0 Y0 F0
G01 X0 Y0 F0

Ich freu mich über jede Hilfe
Lg
Tim

UserData_2.mat
 Beschreibung:

Download
 Dateiname:  UserData_2.mat
 Dateigröße:  597 Bytes
 Heruntergeladen:  175 mal
UserData_1.mat
 Beschreibung:

Download
 Dateiname:  UserData_1.mat
 Dateigröße:  604 Bytes
 Heruntergeladen:  193 mal
Private Nachricht senden Benutzer-Profile anzeigen


timlie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 03.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.03.2021, 10:13     Titel:
  Antworten mit Zitat      
Meine bisherige Idee: Alle patches in einem Array namens bauteil_array gespeichert und dann testen ob die lenght(aktBauteil)>=j und ob die Stelle in UserData überhaupt ein Cell ist. Damit bekomme ich dann einen großen Cell mit der Reihenfolge, aber ohne Leerzeichen zwischen den einzelnen "Blöcken". Jemand eine bessere Idee?
Code:

            l = []
            exportCell = {}
            for i = 1:length(app.bauteil_array)
                l = [l,length(app.bauteil_array(i).UserData)]
            end
            lmax = max(l)
           
            for j = 3:lmax
                for k = 1:length(app.bauteil_array)
                    aktBauteil = app.bauteil_array(k).UserData
                   
                    if length(aktBauteil) >= j && iscell(aktBauteil{j})
                    exportCell = [exportCell; aktBauteil{j}]
                    end
                end
            end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 13.03.2021, 12:14     Titel:
  Antworten mit Zitat      
Hallo timlie,

Mir fällt es schwer, die Frage zu verstehen.

Ich rate mal:
Code:
C = {app.bauteil_array.UserData};

% Remove elements, which are not cells:
CisCell = cellfun('isclass', C, 'cell')
C(~CisCell) = [];

% Remove too short cells and sort the rest:
Len = cellfun('length', C);
C(Len < 3) = [];
Len(Len < 3) = [];

[~, index] = sort(Len);
C = C(index);

Jetzt könntest du C in einer Schleife ausgeben und jeweils die gewünschte Leerzeile dazwischen setzen.

Gruß Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
timlie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 03.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2021, 13:54     Titel:
  Antworten mit Zitat      
Hey ich hoffe die Erklärung im angehängten Bild verdeutlicht meine Absichten. Durch das Code-Beispiel von oben schaffe ich alle Cells in der richtigen Reihenfolge zusammenzufügen. Jedoch habe ich noch keine leeren Zeilen zwischen den Daten von exportCell(1,1) , exportCell(1,2) und exportCell(1,3) in meiner Datei in die reingeschrieben wird. Richtige Reihenfolge bedeutet dass cell(1,3) von UserData_2 an cell(1,3) von UserData rangehägnt wird usw. für alle anderen Patches und cells.

Lg
Tim

Absicht.png
 Beschreibung:

Download
 Dateiname:  Absicht.png
 Dateigröße:  372.92 KB
 Heruntergeladen:  179 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.03.2021, 13:57     Titel:
  Antworten mit Zitat      
Hallo timlie,

Zitat:
Jedoch habe ich noch keine leeren Zeilen zwischen den Daten von exportCell(1,1) , exportCell(1,2) und exportCell(1,3) in meiner Datei in die reingeschrieben wird.

Dann füge doch einfach einen Befehl in die Ausgabe-Funktion ein, der eine leere Zeile schreibt.
Code:
for k = 1:numel(exportCell)
  ... Command um exportCell{k} zu schreiben
  fwrite(fid, char(10), 'char');  % Leere Zeile
end

Deine Skizze ist für die eigfentliche Fragestellung whrscheinlich viel zu kompliziert.

Gruß Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.