Verfasst am: 13.06.2019, 11:16
Titel: Frage zu Tabellen
Hallo, ich habe mal 2 Fragen zu Tabellen.
Ich habe eine csv, bei nach dem Einlesen mit readtable die Messwerte in der Form '22,45' stehen. (Leider konnte ich die Beispiel.csv nicht hochladen, daher das Bild von der Tablle nach dem Einlesen)
Um das Komma als Dezimaltrennzeichen zu ersetzen, wandle ich die benötigte Spalten in einen String um und ersetzte das Komma durch einen Punkt.
Nur leider kann man mit den Strings so schlecht rechnen. Gibt es eine Möglichkeit die gesamte Spalte einer Tabelle in eine Zahl umzuwandeln?
Ich wäre auch mit einem separaten Spaltenvektor zufrieden. Jedoch kann man str2num nicht auf die gesamte Spalte anwenden, muss man wirklich alle Zeilen per Schleife durchlaufen lassen?
(Die Fehlervermeidung bei leeren Zellen hab ich jetzt mal weggelassen.)
Gibt es da keine elegantere Möglichkeit mit Daten aus einer Tabelle zu arbeiten?
Und die zweite Frage: kann man sich irgendwie die Zeile ausgeben lassen, in der z.B. ein bestimmtes Datum steht. Da an manchen Tagen kein Eintrag vorhanden ist kann man leider nicht einfach die entsprechende Zeilennummer berechnen.
Eine Möglichkeit wäre eine neue Spalte an die Tabelle anzuhängen die von 1 aufsteigt. Jedoch finde ich das ebenfalls nicht besonders elegant.
die Vorgehensweise, als Zeichenkette einzulesen und umzuwandeln, ist ineffizient.
Bitte generell immer die verwendete MATLAB-Version angeben. Ab R2019a gibt es bei detectImportOptions die Option 'DecimalSeparator', die man auf ',' setzen und das Problem recht elegant lösen kann.
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 ;)
Ist das wirklich nötig? Welches Format hat die zweite Spalte vorher?
Die Zeile mit daten.var2=string ist nicht notwendig um das Dezimaltrennzeichen mittels strrep zu ersetzen. Ich habe jedoch die Umwandlung in einen String vorgenommen, da str2num, das später im Programm folgt sonst nicht funktioniert.
Vor der Umwandlung gibt mir class(daten.Var2) als Antwort cell zurück.
Als Fehlermeldung bekomme ich:
Input must be a character vector or string scalar.
Nur ein einzelnes Element der Tabelle lässt sich mit str2num umwandeln. Da wäre wieder die Frage, wie man sinnvoller mit Zahlen in einer Tabelle arbeitet.
Harald hat Folgendes geschrieben:
Hallo,
die Vorgehensweise, als Zeichenkette einzulesen und umzuwandeln, ist ineffizient.
Bitte generell immer die verwendete MATLAB-Version angeben. Ab R2019a gibt es bei detectImportOptions die Option 'DecimalSeparator', die man auf ',' setzen und das Problem recht elegant lösen kann.
Das meine Vorgehensweise ineffizient ist, habe ich schon vermutet, daher auch meine Nachfrage hier im Forum. Kennst du zufällig gutes Lernmaterial, um einen guten Programmierstil zu lernen?
Meine Matlab-Version ist 2018b
Zu datetime: wenn Jahr, Monat, Tag einzeln angegeben werden, müssen sie numerisch sein - also ohne Hochkomma.
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 ;)
Ich habe jedoch die Umwandlung in einen String vorgenommen, da str2num, das später im Programm folgt sonst nicht funktioniert.
Das bezweifele ich. str2num funktioniert sehr gut mit CHAR Vektoren. Wenn es da ein Problem gab, hat das eine andere Ursache.
Nimm stattdessen
str2double
, denn das akzeptiert auch Cell Strings.
@ Harald mit deinen Einstellungen für readtable funktioniert es wie gewünscht und ist auf jeden Fall besser als nachträglich nochmal die Daten in der Tabelle zu ändern. Da jetzt csvread nicht mehr empfohlen wird muss ich mich mal wirklich intensiver mit readtable auseinander setzen.
Jan S hat Folgendes geschrieben:
Zitat:
Ich habe jedoch die Umwandlung in einen String vorgenommen, da str2num, das später im Programm folgt sonst nicht funktioniert.
Das bezweifele ich. str2num funktioniert sehr gut mit CHAR Vektoren. Wenn es da ein Problem gab, hat das eine andere Ursache.
Nimm stattdessen
str2double
, denn das akzeptiert auch Cell Strings.
Ja das Problem ist, dass in der Tabelle kein normaler Char gespeichert ist. Aber danke für den Tipp mit str2double. Damit kann ich die gesamte Spalte auf einmal umwandeln und muss nicht wie bei str2num jedes Element einzeln per Schleife verarbeiten.
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.