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

dlmwrite liefert Fehlermeldung; Undefined function 'real'

 

bene-muell
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 24.07.15
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 04.05.2018, 08:58     Titel: dlmwrite liefert Fehlermeldung; Undefined function 'real'
  Antworten mit Zitat      
Hallo zusammen,
bin noch ein relativer Anfänger mit Matlab und komme absolut nicht weiter mit meinem Problem: Ich versuche eine Tabelle mit mehreren Spalten (davon in der ersten Spalte ein Datum, in der zweiten eine Zeit, in den restlichen Messwerte) mit Kommentarzeilen als Textdatei zu schreiben. Die Spalten haben auch Spaltenüberschriften, die auch mitgespeichert werden müssen. Wegen dem Header kann ich hier scheinbar nicht writetable nutzen und versuche es daher mit dlmwrite und '-apend'. Ansonsten funktioniert alles einwandfrei! (oder jedefalls fast;-)
Dabei kommt es jedoch immer zu einer Fehlermeldung:
Code:
Undefined function 'real' for input arguments of type 'table'.

Error in dlmwrite (line 189)
                    str = sprintf('%.*g%+.*gi',precn,real(m(i,j)),precn,imag(m(i,j)));


Ich habe es schon auf verschiedensten Wegen probiert, komme aber nicht weiter. Liegt das am Datum?

Code:
cd(directory)
filename = 'Thermalwasser_h_2017_01_01_00';
filename = fullfile(directory,cat(2,filename,'.txt'));

all_raw_datas = readtable(filename,'Delimiter','\t','ReadRowNames',false,'ReadVariableNames',true);%,'Format','%{yyyy-MM-dd HH:mm:SS}D');
all_raw_dates = datetime(all_raw_datas{:,1},'format','yyyy-MM-dd HH:mm:ss');
all_raw_dates = array2table(all_raw_dates);
all_raw_datas = cat(2, all_raw_dates, all_raw_datas(:,(2:end)));

starttime = datetime(2017,01,01,0,0,0);
endtime = datetime(2017,01,01,23,0,0);
timetable = (starttime:hours(1):endtime)';
timetable = datetime(timetable, 'format','yyyy-MM-dd HH:mm:ss');
timetable = array2table(timetable);

all_datas = join(timetable,all_raw_datas,'Keys',1);

date = datetime(all_datas{:,1}, 'format', 'yyyy-MM-dd');
date = array2table(date);
time = datetime(all_datas{:,1}, 'format', 'HH:mm:ss');
time = array2table(time);

all_datas = cat(2, date, time, all_datas(:,(2:end)));

fid = fopen('testfile_dmlwrite.txt','w');
header = '#Direktdaten\n';
header2 = 'blubb';
fprintf(fid,'%s\n',header);
fprintf(fid,'%s\n',header2);
fclose(fid);

dlmwrite('testfile_dmlwrite.txt',all_datas,'delimiter','\t');


Besten Dank schonmal für Eure Hilfe!!!

Werte.txt
 Beschreibung:
Die Datei ist natürlcih eigentlich deutlich größer;-)

Download
 Dateiname:  Werte.txt
 Dateigröße:  100 Bytes
 Heruntergeladen:  561 mal
Private Nachricht senden Benutzer-Profile anzeigen


bene-muell
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 24.07.15
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 04.05.2018, 21:39     Titel:
  Antworten mit Zitat      
keiner ne Idee? wird das Problem verstanden oder muss ich nachliefern?
Freue mich über jede hilfreiche Nachricht Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.05.2018, 22:48     Titel:
  Antworten mit Zitat      
Hallo,

aus der Doku
Zitat:
dlmwrite(filename,M) writes numeric data in array M [...]

all_data ist bei dir wohl ein Table, und das passt nicht zusammen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
bene-muell
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 24.07.15
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 07.05.2018, 08:16     Titel:
  Antworten mit Zitat      
Danke erstmal. Welche Möglichkeit habe ich denn sonst noch eine "table" mit Datum und Werten als txt.Datei zu speichern, wenn ich eine Kopfzeile mit Text benötige und die entsprechenden Spaltenüberschriften?
Private Nachricht senden Benutzer-Profile anzeigen
 
B.O.D
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 22.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2018, 09:01     Titel:
  Antworten mit Zitat      
bitte ausprobieren:

Code:

dlmwrite('testfile_dmlwrite.txt',table2cell(all_datas),'delimiter','\t','-append');
 
Private Nachricht senden Benutzer-Profile anzeigen
 
bene-muell
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 24.07.15
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 07.05.2018, 10:23     Titel:
  Antworten mit Zitat      
Danke vielmals, aber leider funktioniert das auch nicht. Es kommt die Fehlermeldung:
"The input cell array cannot be converted to a matrix."

Wobei "all_datas" als Tabelle vorliegt und nicht als "cell_array"
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.05.2018, 18:40     Titel:
  Antworten mit Zitat      
Hallo,

du kannst es mal über fprintf versuchen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
bene-muell
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 24.07.15
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 09.05.2018, 08:34     Titel:
  Antworten mit Zitat      
Danke dir für deine Hilfe. Leider funktioniert auch das nicht. Hier kommt die Fehlermeldung "Invalid Format" und " The function fprintf does not support cell arrays (argument 2)".
Ich verstehe das nicht ganz, da "all datas" als "table" gekennzeichnet ist! Oder fehlt mir da noch ein grundlegendes Verständnis und ich bin auf dem völlig falschen Dampfer???

Laut fprintf Dokumentation ist die Funktion dafür geeignet Tabellen zu speichern. Im Beispiel ist jedoch ein double verwendet (class: double und als Symbol dieses zwei mal zwei Kästchen und eben nicht wie bei der Tabelle das Tabellensymbol)? Ich blicke da einfach nicht durch, trotz ewigem nachlesen in der Hilfe.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.05.2018, 08:36     Titel:
  Antworten mit Zitat      
Hallo,

bitte gib immer an, wie du einen Befehl aufrufst, und kopiere die Fehlermeldung statt sie zu übersetzen.

Zitat:
Ich verstehe das nicht ganz, da "all datas" als "table" gekennzeichnet ist!

Und was soll das helfen? fprintf unterstützt keine Tables.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.05.2018, 12:26     Titel:
  Antworten mit Zitat      
Hallo,

ich wollte mir das gerade nochmal anschauen. Bitte eine Beispieldatei posten, mit der der Code auch durchläuft. Ich bekomme nämlich

Error using tabular/join (line 173)
The key variable for B must contain all values in the key variable for A.
Error in Untitled2 (line 14)
all_datas = join(timetable,all_raw_datas,'Keys',1);

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
bene-muell
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 24.07.15
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 11.05.2018, 09:19     Titel:
  Antworten mit Zitat      
Besten Dank für deine Mühe. Den Fehler habe ich inzwischen auch entdeckt und habe die Zeile daher abgeändert (siehe unten).
Außerdem schicke ich nochmal eine Datei mit, mit der der Code bei mir gerade durchgelaufen ist (außer das Abspeichern eben)!

Code:
directory = 'U:\AFK\Matlab\Daten\Quelldaten\test';
cd(directory)
filename = 'wasser_h_2017_01_01_00';
filename = fullfile(directory,cat(2,filename,'.txt'));

all_raw_datas = readtable(filename,'Delimiter','\t','ReadRowNames',false,'ReadVariableNames',true);%,'Format','%{yyyy-MM-dd HH:mm:SS}D');
all_raw_dates = datetime(all_raw_datas{:,1},'format','yyyy-MM-dd HH:mm:ss');
all_raw_dates = array2table(all_raw_dates);
all_raw_datas = cat(2, all_raw_dates, all_raw_datas(:,(2:end)));

starttime = datetime(2017,01,01,0,0,0);
endtime = datetime(2017,01,01,23,0,0);
timetable = (starttime:hours(1):endtime)';
timetable = datetime(timetable, 'format','yyyy-MM-dd HH:mm:ss');
timetable = array2table(timetable);

all_datas = join(timetable,all_raw_datas,'Keys',1);

date = datetime(all_datas{:,1}, 'format', 'yyyy-MM-dd');
date = array2table(date);
time = datetime(all_datas{:,1}, 'format', 'HH:mm:ss');
time = array2table(time);

all_datas = cat(2, date, time, all_datas(:,(2:end)));

fid = fopen('testfile_dmlwrite.txt','w');
header = '#Direktdaten\n';
header2 = 'blubb';
fprintf(fid,'%s\n',header);
fprintf(fid,'%s\n',header2);
fclose(fid);

dlmwrite('testfile_dmlwrite.txt',all_datas,'delimiter','\t');


wasser_h_2017_01_01_00.txt
 Beschreibung:

Download
 Dateiname:  wasser_h_2017_01_01_00.txt
 Dateigröße:  2.23 KB
 Heruntergeladen:  250 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.05.2018, 09:41     Titel:
  Antworten mit Zitat      
Hallo,

Code:
for k=1:height(all_datas)
fprintf(fid,'%s \t %s \t %f \t %f\n', char(all_datas.date(k)), char(all_datas.time(k)), ...
    all_datas.Strom_0_100__(k), all_datas.Strom_U_0_100__(k));
end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 14.05.2018, 15:31     Titel:
  Antworten mit Zitat      
gehört das nicht alles eher in die Kategorie Fehlersuche?
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Private Nachricht senden Benutzer-Profile anzeigen
 
bene-muell
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 24.07.15
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 23.05.2018, 08:43     Titel:
  Antworten mit Zitat      
Hallo Harald,
danke dir für deine Bemühung. Ich war ein Woche unterwegs und konnte nicht antworten. Ich werde versuchen diese Woche deinen Vorschlag nochmal auszuprobieren, habe aber festgestellt, dass Matlab hier vll nicht ganz das richtige ist und versuche es vll. mal mit python, wenn ich nicht weiterkomme.
Besten Dank dir!!!
Benedikt
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.05.2018, 17:52     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
habe aber festgestellt, dass Matlab hier vll nicht ganz das richtige ist

Wie kommst du auf die Idee?

Zitat:
und versuche es vll. mal mit python, wenn ich nicht weiterkomme.

Ich bezweifle, dass Python da etwas kann, das MATLAB nicht kann.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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.