|
|
Matlab- Tabelle Zeilenweise lesen und dann filtern |
|
CharlotteBerlin |
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 23.11.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 23.11.2021, 18:09
Titel: Matlab- Tabelle Zeilenweise lesen und dann filtern
|
|
hey leute ,
ich habe eine Excel Datei eingelesen mit readtable und dadurch in Tabellen Form.
[code]Datei=readtable('beispiel.xlsx', 'ReadRowNames', true);[/code] die Tabelle hat 7xSpalten.
in Spalte 5 sind Kundennummer hinterlegt
ich möchte jetzt, dass eine Schleife zuerst Zeilenweise die Zeilen sich anschaut und mir dann die Zeilen ausgibt, die in Spalte 5 die selbe Kundennummer haben, damit ich die einen Kunden zu ordnen kann und dann damit ein Kundinprofil erstellen kann.
Mein Problem ist, dass ich es nicht hinkriege dass mein Programm es Zeilenweise liest, da es ja eine Tabelle ist.
könnte mir da bitte jemand weiterhelfen
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 23.11.2021, 21:58
Titel:
|
|
Hallo,
was hast du versucht, welche Probleme sind dabei aufgetreten?
Wenn du die Daten in irgendeiner Form zusammenfassen willst, kannst du auch
findgroups
/
splitapply
oder
groupsummary
verwenden.
Je konkreter die Frage gestellt ist, desto besser kann man helfen. Gut wäre z.B. eine kleine Beispieldatei und der dafür gewünschte Output.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
CharlotteBerlin |
Themenstarter
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 23.11.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 30.11.2021, 12:09
Titel:
|
|
|
|
|
[code]
Datenmix=readtable('Kunden.xlsx', 'ReadRowNames', true);
% nur die wichtigsten Daten werden ausgegeben
benoetigeDaten=Datenmix(:,5:11);
z=benoetigeDaten(:,{KundenID'});%tale
%unterschiedlichen ladepunkte erkennen
un_z=unique(z);%table
% überall 1 wo die stadtion übereinstimm
xi = 1;
xii = 1;
vektor = [];
while xi <= size(un_z, 1)
H_logic = all(ismember (z, un_z(xi, 1)), 2);
H = find(H_logic>0);
Startzeit = [];
Endzeit = [];
xii = 1;
end
[/code]
Hi Harald ,
mein Problem ist, dass die Schleife die einzelnen Kunden nicht im Workspace ausgibt sondern direkt zum letzten Kunden springt und nur seine Übereinstimmende ID ausgibt.
mein zweites Problem ist, dass ich eigentlich möchte dass die Zeilen die in H_logic mit einer 1 hinterlegt sind, dass diese Zeilen in der Hauptdatei (benoetigeDaten oder Datenmix) angezeigt werden können , damit die werte aus der entsprechenden Zeile in der Hauptdatei betrachtet werden.
ich hoffe du verstehst was ich meine
Viele Grüße
Charlotte
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 01.12.2021, 17:04
Titel:
|
|
Hallo,
ein Problem sehe ich darin, dass du die Variablen in der while-Schleife überschreibst. Du könntest z.B. Cell Arrays erstellen, um die Ergebnisse jeder Iteration zu speichern:
Sollte xi in der while-Schleife nicht hochgezählt werden? Sonst wird das ja eine Endlos-Schleife. Warum zudem xi und xii?
Für das zweite Problem würde ich es so versuchen:
Wenn du eine Beispieldatei zur Verfügung stellst, kann man damit viel besser herumprobieren.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
CharlotteBerlin |
Themenstarter
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 23.11.21
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 02.12.2021, 12:51
Titel:
|
|
|
|
|
Hi Harald,
xi habe ich willkürlich gewählt um die Variable hochzuzählen, dies passiert am ende der while Schleife.
dein Tipp mit Cell hat mir schon weiter geholfen, das Problem ist nun, das H nur auf den letzten xi zugreift aber in H_logic sind ja alle Kunden angelegt.
Ich möchte dass er z.B. für H bei xi=1 sagt in der Zeile 4, 7 , 9, 10 kommt eine eins vor, nun würde ich eine Verzweigung oder Schleife machen die dann für diese Zeilen die Startzeit/Endzeit aus der Var. benoetigeDaten zugreift.
Aber irgend wie klappt alles was ich ausprobiert habe nicht, Weder für H noch eine Verzweigung aufzubauen.
ich hoffe du konntest verstehen was ich meine
Lässt sich die Excel Datei öffnen?
habe Sie zwar angehängt sehe sie aber nicht
[code]
%Datei einlesen
Datenmix=readtable('AufgabeMatlab.xlsx', 'ReadRowNames', true);
% nur die wichtigsten Daten werden ausgegeben
benoetigeDaten=Datenmix(:,5:16);
%auf bestimmt spalte zugreifen
x=benoetigeDaten(:,{'Startzeit'});%table
xd = table2array(x);%double
xdt= datetime(xd, 'ConvertFrom', 'datenum', 'Format', 'HH:mm:ss');
%Endzeit
y=benoetigeDaten(:,{'Endzeit'});% table
yd = table2array(y);%double
ydt = datetime(yd, 'ConvertFrom', 'datenum', 'Format', 'HH:mm:ss');
%tat Enladezeit
tat_y=benoetigeDaten(:,{'Tat_Endlzeit'});% table
tat_yd = table2array(tat_y);%double
tat_ydt = datetime(tat_yd, 'ConvertFrom', 'datenum', 'Format', 'HH:mm:ss');
%tat Aufenthaltsdauer
tat_l=benoetigeDaten(:,{'Tat_Aufenthaltsdauer_HH_MM_SS_'});% table
tat_ld = table2array(tat_l);%double
tat_ldt = datetime(tat_ld, 'ConvertFrom', 'datenum', 'Format', 'HH:mm:ss');
n=benoetigeDaten(:,{'Menge'});% table
z=benoetigeDaten(:,{'KundenID'});%tale
%unterschiedlichen KundenID erkennen
un_z=unique(z);%table
% überall 1 wo die stadtion übereinstimm
xi = 1;
H_logic=cell(xi, (size(un_z,1)));
while xi <= size(un_z, 1)
H_logic{1,xi}= [all(ismember (z, un_z(xi, 1)), 2)];
%Problem mit H, er gibt es nur für den letzten xi aus
H = find(H_logic{1,xi}>0);
%hier möchte ich eine If oder for einbauen, damit ich in die einzelnen
%zellen cell(1, xi) rein schauen kann, wenn eine '1' ausgegebn wird (var. H),
%werden diese zeilen benötigt, damit ich im nächsten schritt die
%Start-/Endzeit für diese Zeilen betrachten kann (aus der Var. benoetigeDaten).
% ich muss später nämmlich für die jeweiligen kunden plots erstellen
xi = xi+1;
end
[/code]
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 04.12.2021, 15:28
Titel:
|
|
Hallo,
Zitat: |
dies passiert am ende der while Schleife. |
Jetzt schon.
Zitat: |
ich hoffe du konntest verstehen was ich meine |
Leider nein.
Zitat: |
Lässt sich die Excel Datei öffnen?
habe Sie zwar angehängt sehe sie aber nicht |
Ich sehe sie auch nicht. Da scheint wohl beim Hochladen etwas schiefgegangen zu sein.
Bitte neben der Datei auch hochladen, was denn am Ende konkret die Ergebnisse sein sollen. Dann kann ich dir vielleicht helfen, dort hin zu kommen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|