Hallo,
an manchen Stellen hänge ich in noch ein wenig an den Basics fest, vielleicht kann mir von euch jemand weiterhelfen:
Ich habe eine Matrix mit Bauteilen (als Nummern) (2. Spalte) und den jeweiligen Bearbeitungsvorgangsnummern (3. Spalte). Diese Vorgangsnummer des Bearbeitungsschritts bezieht sich nur auf die jeweilige Bauteil. Die Matrix ist nach Zeit sortiert und diese Reihenfolge soll beibehalten werden (angedeutet durch 1. Spalte)
Ich möchte für jede Zeile der Matrix herausfinden, ob es sich dabei um den letzten Bearbeitungsschritt des Bauteils handelt (also höchste Vorgangsnummer)
In einer neuen Spalte soll dieses Ergebnis dann als Attribut vermerkt werden (1=letzter Vorgang, 0=nicht letzter Vorgang)
so, wie ich das verstanden habe willst du sozusagen herausfinden wann eine Bauteilnummer als letztes in der zweiten Zeile steht. Weil, wenn z.b. 105 in der siebten Zeile das letzte mal steht, ist das auch der letzte Bearbeitungsschritt des Bauteils. Da die Matrix zeitlich geordnet ist muss dann in dieser letzten Zeile des Bauteils auch die höchste Bearbeitungsnummer stehen.
das sollte mit dem find befehl in der Art relativ einfach gehen:
Wenn du alle Bauteilnummern in einem Vektor abgespeichert hast kannst du das dann mit einer Schleife schnell durchlaufen lassen.
man kann bestimmt noch eine elegantere Methode finden, als eine Schleife, aber solange es nicht zu viele Bauteile sind sollte es ganz gut klappen.
danke für deine Antwort. Leider ist das Problem nicht ganz so einfach.
Die Anzahl an Vorgängen kann von Bauteil zu Bauteil differieren.
Insofern lässt sich eine Lösung nicht an einer bestimmten Zeile festmachen.
Ich hab mal einen Beispiel-Datensatz als Excel angehängt. Vielleicht wird es damit einfacher. Zufälligerweise sind die Materialnummern hier zumeist sortiert (aufsteigend anhand Ihres Vorgangs), das ist aber nicht der Regelfall.
Ich möchte in einer neuen Spalte für jedes Bauteil (Material) den jeweils höchsten Vorgang kennzeichnen (mittels 0/1).
Vielleicht könntest du nochmal drüber gucken. Danke!
ich glaube du hast nicht verstanden wie ich das meine.
Die Anzahl der Vorgänge ist egal. Der letzte Bearbeitungsschritt ist bei einer zeitsortierten Matrix der Punkt an dem das Bauteil zum letzten mal vorkommt, außer die Matrix ist entgegen der Behauptung deines ersten Posts doch nicht nach der Zeit orientiert.
D.h. du musst nur auslesen, wann das Bauteil zum letzten mal in der Matrix steht, diese Zeile kannst du dann mit einer 1 vermerken, alle anderen werden automatisch mit einer 0 gefüllt.
Somit funktioniert mein erster Ansatz vom Prinzip her:
Code:
data = xlsread('Beispiel.xlsx');
Bauteilnummer=unique(data(:,1));
for i=1:length(Bauteilnummer)
x=find(data==Bauteilnummer(i),1,'last');
data(x,3)=1;
end
danke euch beiden für eure Antworten.
@Harald,deine Lösung hat in diesem speziellen Fall gut geklappt.
@Knygs, ist mir zwischenzeitlich dann auch gekommen und ich hab das nach diesem Prinzip dann schlussendlich implementiert.
Ich konnte an beiden Beispielen was lernen.
Danke für die Hilfe nochmal!
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.