|
|
assignin innerhalb einer Funktion? |
|
matlab-frosch |

Forum-Newbie
|
 |
Beiträge: 6
|
 |
|
 |
Anmeldedatum: 07.10.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.10.2014, 18:34
Titel: assignin innerhalb einer Funktion?
|
 |
|
 |
|
Hallo zusammen! Dies ist mein erster Forenbeitrag hier und ich bitte darum mir nicht direkt den Kopf abzureißen
Folgendes Problem:
Ich muss CSV-Dateien in Matlab einlesen, was auch alles wunderbar über Code in einem Skript funktioniert. Bis jetzt habe ich das immer mit Variablen im Base-Workspace gemacht.
Nun habe ich die Aufgabe bekommen das "Import"-Skript in eine Funktion zu schreiben damit die ganzen Vorgänge darin getrennt von den Workspaces sind, da eine Fkt ja einen eigenen Workspace hat.
Wichtig ist: Bei den CSV Dateien sind leider fast immer die Überschriften der Messdaten anders. Mal heißt es "Kraft", mal "kraft", mal "N" oder "kN".
Somit hatte ich dies bis jetzt mit einer Schleife gelöst die ggf später den Namen des Messwertvectors einfach ändert - unsauber, aber hat funktioniert.
Das ist der Code wie er bis jetzt als Skript läuft:
Was mich stört ist nun beim "Umbau" auf eine Funktion das assignin.
Ohne das funktioniert aber das "dynamische" Benennen der Variablen nicht.
Habe jetzt seit 3h rumgesucht (Beschäftige mich erst seit einer Woche mit Matlab) und habe schon die unterschiede der Workspaces (caller, base) und der Funktioninternen verstanden. Auch das Übergeben der Variablen habe ich denke ich verstanden. Aber wie kann ich dieses Variablen aus den Colheaders denn bitte "innerhalb" der Funktion erstellen ohne base Workspace?
Quasi möchte ich am Ende nur eine funktion haben die ich im Skript aufrufen kann (oder im GUI) wo ich mittels uigetfile eine Datei auswählen kann und am ende in mein GUI die beiden Werte für "kraft" und "weg" bekomme. Aber nur diese, nicht die "Zufallsbezeichnungen" die in den jeweiligen CSV stehen.
LG
|
|
|
|
|
Seban |

Forum-Meister
|
 |
Beiträge: 600
|
 |
|
 |
Anmeldedatum: 19.01.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ab R2014b
|
 |
|
|
 |
|
Verfasst am: 07.10.2014, 22:37
Titel:
|
 |
Hallo,
Ich tu mich immer schwer ohne lauffähiges Beispiel. Kannst du eine Bsp-Datei posten?
Grüße,
Seban
_________________
Richtig fragen
Debugging
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 07.10.2014, 22:47
Titel:
|
 |
Hallo,
dynamische Variablennamen sind generell keine gute Idee, da die automatische Weiterverarbeitung der Variablen entsprechend schwierig ist - siehe diverse Threads zu eval/evalin/assignin.
Grüße,
Harald
|
|
|
matlab-frosch |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 6
|
 |
|
 |
Anmeldedatum: 07.10.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.10.2014, 23:08
Titel:
|
 |
Danke für eure Antworten! Anbei das File -> mfile und csv als Bsp
Gut, kann ich sonst vorher die CSV files über ein skript jagen was mir die benennung korrekt macht? ich darf nicht vom user verlangen auf die syntax zu achten, das ist das problem.
Liebe Grüße
Beschreibung: |
|
 Download |
Dateiname: |
code.zip |
Dateigröße: |
46.19 KB |
Heruntergeladen: |
307 mal |
|
|
|
Seban |

Forum-Meister
|
 |
Beiträge: 600
|
 |
|
 |
Anmeldedatum: 19.01.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ab R2014b
|
 |
|
|
 |
|
Verfasst am: 07.10.2014, 23:39
Titel:
|
 |
Unterscheiden sich die csv-Dateien nur in der Bezeichnung der Header oder auch in der Reihenfolge der Daten (spaltenweise)?
Ich verstehe nicht, wieso du die Existenz von L_ngen_nderung und Kraft überprüfst, wenn diese Bezeichnungen doch von csv zu csv unterschiedlich sind.
_________________
Richtig fragen
Debugging
|
|
|
matlab-frosch |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 6
|
 |
|
 |
Anmeldedatum: 07.10.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.10.2014, 23:51
Titel:
|
 |
Hey!
Sowohl die Reihenfolge der Spalten als auch die Beschriftung ist unterschiedlich.
In dem Beispiel habe ich L_ngen_nderung nur als Beispiel gezeigt. Ich "müsste"
* Längenänderung
* weg
* Weg
* mm
* µm
* m
Abfragen. Je nach Messgerät werden andere Achsenbeschriftungen in der CSV ausgegeben. Dies kann ich nicht beinflussen und später kann nicht bei 100. von Dateien immer alles von Hand angepasst werden.
|
|
|
Seban |

Forum-Meister
|
 |
Beiträge: 600
|
 |
|
 |
Anmeldedatum: 19.01.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ab R2014b
|
 |
|
|
 |
|
Verfasst am: 08.10.2014, 00:58
Titel:
|
 |
Ok, dann ist das Problem "bloß" wie man die die richtige Spalte aus dem Dokument der richtigen Variable zuordnet. Da die möglichen Namen bekannt zu sein scheinen, kann man diese mit strcmp prüfen und die Daten entsprechend zuweisen.
Die ausgelagerte Funktion zum Einlesen der csv könnte etwa so aussehen:
Diese in ein m-File namens importCSV.m speichern.
In der aufrufenden Funktion (oder zum testen im Command Window) kannst du die Funktion bspw. mittels
[d, f] = importCSV
aufrufen, dann werden dir von der Funktion importCSV die Variable weg in d und kraft in f zurückgegeben (diese befinden sich dann im Workspace der aufrufenden Funktion). d und f kannst du auch einfach weg und kraft nennen, möchte bloß verdeutlichen, dass die nicht den gleichen Bezeichner haben müssen.
Grüße,
Seban
_________________
Richtig fragen
Debugging
|
|
|
matlab-frosch |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 6
|
 |
|
 |
Anmeldedatum: 07.10.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.10.2014, 01:05
Titel:
|
 |
WOW!
Danke! Das funktioniert genau wie ich mir das gedacht habe Tolles Forum!!!
Ich schreibe die nächsten zwei Monate an meiner Bachelorarbeit Werde wohl noch öfters herkommen =)
hat jemand von euch einen Rat welche Literatur für einen Einstieg empfehlenswert ist? Außer natürlich die Hilfe von Matlab selber
|
|
|
Seban |

Forum-Meister
|
 |
Beiträge: 600
|
 |
|
 |
Anmeldedatum: 19.01.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ab R2014b
|
 |
|
|
 |
|
Verfasst am: 08.10.2014, 01:47
Titel:
|
 |
Gern geschehen.
Ich hab mit Einstieg in das Programmieren mit MATLAB von Stein angefangen in Matlab zu programmieren, fand ich auch sehr hilfreich. Vergleichsmöglichkeiten hab ich jedoch kaum, bloß Matlab & Simulink: Grundlegende Einführung von Beucher hatte ich vorher(?) begonnen. Das fand ich aber nicht so gut und hab's irgendwann gut sein lassen. Lag aber vllt auch daran, dass ich durch meinen Hiwi-Job schnell Fortschritte gemacht habe, die das Buch entbehrlich gemacht haben. Ein Kollege von mir fand es ok iirc.
Welches Buch dir am besten hilft, hängt aber auch vom Anwendungsgebiet ab, gibt ja zig Theman und dementsprechend viele Bücher. Ich hab mir damals mehrere in der Bib ausgeliehen und dann obige beiden ausgewählt.
_________________
Richtig fragen
Debugging
|
|
|
matlab-frosch |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 6
|
 |
|
 |
Anmeldedatum: 07.10.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.01.2015, 17:25
Titel:
|
 |
Hallo Ich bin es wieder. Bachelorarbeit ist durch und alles lief super. Jetzt will ich mein Programm aber noch verbessern.
Wie kann ich bei
importdata(DATEINAME,',',1)
das Trennzeichen als Komma und als Semikolon angeben? Ich finde nirgendwo einen Hinweis wie ich multiple Trennzeichen angeben kann.
Liebe Grüße und vielen Dank
|
|
|
Seban |

Forum-Meister
|
 |
Beiträge: 600
|
 |
|
 |
Anmeldedatum: 19.01.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ab R2014b
|
 |
|
|
 |
|
Verfasst am: 10.01.2015, 04:48
Titel:
|
 |
Hallo,
matlab-frosch hat Folgendes geschrieben: |
Bachelorarbeit ist durch und alles lief super. |
Grats =)
matlab-frosch hat Folgendes geschrieben: |
Wie kann ich bei
importdata(DATEINAME,',',1)
das Trennzeichen als Komma und als Semikolon angeben? Ich finde nirgendwo einen Hinweis wie ich multiple Trennzeichen angeben kann. |
Weiß ich leider auch nicht. Vielleicht wirst du hier bei einer anderen Funktion fündig.
Als Workaround könnte man einfach die Zeichen mit einem Texteditor mit der 'Ersetzen'-Funktion anpassen. Mit Notepad++ bspw. kann man über Strg-h alle Vorkommnisse des Zeichens auf einmal ersetzen.
Grüße,
Seban
_________________
Richtig fragen
Debugging
|
|
|
|
|
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 - 2025
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.
|
|