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

Bestimmte Zeilen von Excel in Matlab

 

Blade
Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 11.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.07.2018, 11:00     Titel: Bestimmte Zeilen von Excel in Matlab
  Antworten mit Zitat      
Hallo an alle,

ich habe ein Problem und hoffe, dass mir hier jemand helfen kann.

Ich muss aus Excel Messdaten auslesen.
Hier ist das Problem, dass es ca 50000 Messdaten sind aber ich nur bestimmte benötige.
Diese kann ich so herausfiltern, dass ich in einer Spalte die Namen sämtlicher Messungen stehen habe.
Jetzt benötige ich aber nur die Daten einer bestimmten Messung. Das heißt ich müsste nach dieser sortieren.
Hier ist die schwierigkeit, dass die Messung nicht gleich heißt da sich die letzten 5 buchstaben immer ändern.
Allerdings würden die ersten 15 gleich bleiben.
Auch muss ich sagen, dass ich die excel tabelle schon mit num,raw,txt eingelesen habe da ich sie zuvor schon benötigt habe.

Gäbe es da eine saubere Lösung ich hab schon einiges probiert komme aber leider nicht weiter?

Würde mich sehr freuen wenn mir hier jemand helfen könnte.

Viele Grüße
Blade
Private Nachricht senden Benutzer-Profile anzeigen


ol1v3r
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 06.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.07.2018, 11:05     Titel:
  Antworten mit Zitat      
Mit der Funktion hier, kannst du Strings vergleichen und zugleich die Anzahl der zu vergleichenden Stellen angeben:

https://www.mathworks.com/help/matlab/ref/strncmp.html

Ich hoffe, dass das schon ausreicht, dein Problem hinreichend zu lösen.
_________________

Viele Grüße
Ol1v3r
Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Blade
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 11.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.07.2018, 11:12     Titel:
  Antworten mit Zitat      
Hallo Oliver,

Danke für deine schnelle Antwort.
die Funktion hab ich bei einer anderen Stelle schon verwendet und habe hier auch ám anfang gehofft sie zu verwenden aber leider klappt des nicht so ganz..
vergleiche ich beide miteinander spuckt er mir nur eine Matrix mit [] aus ich dachte vielleicht liegts dran dass die Namen nicht komplett miteinander übereinstimmen.

Viele Grüße,
Blade
Private Nachricht senden Benutzer-Profile anzeigen
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 11.07.2018, 11:15     Titel:
  Antworten mit Zitat      
Hallo Blade,

poste doch mal ein Beispiel bei dem dein Problem auftritt. Dann ist es einfacher das Problem zu erkennen und zu helfen.

Grüße
Newbie
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
Private Nachricht senden Benutzer-Profile anzeigen
 
Blade
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 11.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.07.2018, 11:33     Titel:
  Antworten mit Zitat      
Beim ersten mal wo ich auswähle welche Messungen ich benötige habe ich mit diesem Befehl das Auswahlfenster bestimmt.
Code:


Jetzt wäre so ein Auswahlfenster an sich nicht verkehrt des Problem ist eben, dass ich die Daten mit dem ähnlichen Namen irgendwie zusammenfassen müsste dass des als eins erscheint.

Einen richtigen Code für mein Problem gerade habe ich gar nicht, da ich alles immer wieder zerstört habe nachdem es nicht das macht was ich will Very Happy
hier mal ein kleiner Anfang wie ich gedacht habe, dass es sich umsetzen lassen könnte.
Code:

 for x=2:y1       %y1 beschreibt das Ende der Tabelle
           a = 'derlangeTextderÜbereinstimmenSoll'
           bez = Werte1(x,6);     %werte1 sind die eingelesenen werte aus excel
           strncmp(bez,a,38);
 end
[indx,tf] = listdlg(....);   %wegen mir auch ohne auswahl fenster
 


Ich weiß, dass des kein guter Code mehr ist aber bin am verzweifeln Very Happy
Kann acuh gut sein, dass ich absolut a holzweg gerade bin
Hoffe jemand kann trotzdem was damit anfangen.

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
ol1v3r
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 06.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.07.2018, 11:45     Titel:
  Antworten mit Zitat      
Das du die Ausgabe (0 oder 1) deines String-Vergleichs gar nicht nutzt, ist dir bekannt?

[EDITED, Jan, Bitte nicht die gesamte vorhergehende Nachricht zitieren - Danke!]
_________________

Viele Grüße
Ol1v3r
Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 11.07.2018, 11:46     Titel:
  Antworten mit Zitat      
Hallo Blade,

Der Befehl
Code:

gibt dir aber nur eine 1 oder 0 zurück. Die rückgegebenen Werte musst du natürlich abfangen und dir darüber noch eine Liste erstellen, um deine listdlg zu füllen.

Vor der Schleife:
Code:
deinevariable = Zeros(y1-1,1)


In der Schleife:
Code:
deinevariable(x,1) = strncmp(bez,a,38);


So falsch ist der Ansatz doch nicht Wink
Das ganze geht übrigens auch ohne Schleifen. Macht die Suche etwas schneller.

Grüße
Newbie
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable

Zuletzt bearbeitet von J0nas am 11.07.2018, 12:00, insgesamt 5-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Blade
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 11.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.07.2018, 11:52     Titel:
  Antworten mit Zitat      
@oliver ist mir bewusst dass nur 1 und 0 ausgegeben wird wie schon gesagt der befehl sah mal ganz anders aus hab ihn aber zerstört und dachte ich zeig euch mal was noch übrig ist vielleicht fällt einem ja was gutes ein Smile

@newbie danke für den Hinweis mit dem abfangen des probier ich nochmal aus Wink

Viele Grüße,Blade
Private Nachricht senden Benutzer-Profile anzeigen
 
Blade
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 11.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.07.2018, 12:12     Titel:
  Antworten mit Zitat      
okay neuer Versuch meinerseits Very Happy
Code:

           a = 'richtigLangerTextDerÜbereinstimmenMuss'
           bez = Werte1_raw(:,6);    
           b = strncmp(bez,a,38);
 

ich hab die raw werte genommen sollte ich lieber die txt werte nehmen?
Jetzt müsste ich doch bei b einen Vektor mit 1 und 0 haben oder?
und jetzt die Preisfrage wie bekomme ich jetzt den Vektor sohin, dass mich die Liste nur nach den Werten fragt die er mit den 1en umfasst?

Viele Grüße,
Blade
Private Nachricht senden Benutzer-Profile anzeigen
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 11.07.2018, 12:50     Titel:
  Antworten mit Zitat      
Hallo blade,

Code:
liste = Werte1_raw(b==1,6);


Grüße
Newbie Cool
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
Private Nachricht senden Benutzer-Profile anzeigen
 
Blade
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 11.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.07.2018, 13:03     Titel:
  Antworten mit Zitat      
Danke newbie des schaut schonmal ganz gut aus.
Jetzt ist nur noch das Problem, dass der b Vektor nur 0en anzeigt... woran kann das denn liegen? der zeigt mir doch nur den vergleich an?!
ist es überhaupt richtig dass ich raw verwende? oder muss ich nochmal komplett mit zB xlsread den Excel Pfad öffnen?

also in meinem ws taucht jetzt der vektor b auf aber wenn ich ihn öffne hat er nur 0en..
und liste ist dann eine 0x1 cell..

Viele Grüße
Blade
Private Nachricht senden Benutzer-Profile anzeigen
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 11.07.2018, 13:23     Titel:
  Antworten mit Zitat      
Wie sehen denn deine raw- und txt-Daten aus? Wenn das cell-Arrays sind musst du über geschweifte Klammern auf die Zellinhalte zugreifen.

Hast du mal geschaut was du bekommst wenn du Werte1_raw(1,6) ausliest?

Grüße
Newbie Cool
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
Private Nachricht senden Benutzer-Profile anzeigen
 
Blade
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 11.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2018, 08:22     Titel:
  Antworten mit Zitat      
Danke Newbie für deine Hilfe. Dein Tipp mit den Cell hat mich nochmal alles überprüfen lassen und ich habe festgestellt, dass ich mich bei strncmp verzählt habe..

Jetzt kann ich mit
Code:

a = 'richtigLangerTextDerÜbereinstimmenMuss';
bez = wete1_raw(:,6);
b = strncmp(bez,a,30);
 

ohne Probleme einlesen.

Jetzt nochmal eine Frage, wie kann ich denn dann diese liste ausgeben lassen?
Code:

if b==1
     for x=2:y1
           liste = werte1_raw(x,6);              
     end
end
[indx,tf] = listdlg('ListString',liste,'SelectionMode','single','ListSize',[500 500]);
 

des wäre jetzt der Code den ich berlegt hätte aber der funktioniert gar nicht..
wenn ich wie du gesagt hast liste = werte1_raw(b==1,6); eingebe funktionierts auch nicht deswegen habe ich die if-Schleife gedacht.
Vielleicht hat da noch jemand eine Idee?

Danke schonmal,
Viele Grüße
Blade
Private Nachricht senden Benutzer-Profile anzeigen
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 12.07.2018, 09:29     Titel:
  Antworten mit Zitat      
Hallo Blade,

bei deinem Code ist die erste Abfrage:
Code:

Diese ist nur wahr, wenn alle Werte in b gleich 1 sind. Falls du, mit Hilfe einer Schleife, für jede Zeile deines Arrays separat eine Abfrage machen möchtest, dann muss die If-Abfrage innerhalb deiner Schleife stehen.
Wenn du das ganze also über eine Schleife machen möchtest, dann zum Beispiel so:
Code:

liste = cell(sum(b==1),1);  % Größe von Array vorgeben
k = 1; % Zählvariable für Array "Liste"
for x=2:y1
    if b(x)==1  % If-Abfrage von jeweiliger Zeile des b-Arrays
        liste(k,1) = werte1_raw(x,6);
        k = k + 1; % Hochzählen der Zählvariable, damit bei nächstem Treffer nichts überschrieben wird
    end
end
 

Du solltest nicht vergessen deine Zählvariable beim Beschreiben von Arrays mit anzugeben. Sonst hast du eine Variable die bei jedem Schleifendurchlauf einfach wieder überschrieben wird. Und wenn du ein Array innerhalb der Schleife hast, dann solltest du die Größe des Arrays vorher vorgeben.

Dennoch war ich jetzt etwas verwirrt warum das nicht gehen sollte und habe mir ein kleines Beispiel nachgebastelt. Da funktioniert es. Kannst du mal einen kleinen Auszug aus deiner eingelesenen raw-Datei geben?

Grüße
Newbie
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable

Zuletzt bearbeitet von J0nas am 12.07.2018, 10:44, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Blade
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 11.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2018, 09:44     Titel:
  Antworten mit Zitat      
Hallo Newbie,

danke dir schonmal für diesen Lösungsvorschlag Smile es schaut schon ganz gut aus!
ich hab den code mal so von dir übernommen, jetzt ist nur das Praoblem, dass liste als double erstellt wird und werte1_raw cell ist.
ich habs jetzt mal schritt für schritt durchlaufen lassen und der fehler kommt jetzt an der stelle:
Code:

liste(k,1) = werte1_raw(x,6);
 


Kann ich das mit dem double und cell umgehen?
Viele Grüße
Blade
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.