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

Bestimmten Wert aus Excel Datei auslesen.

 

jasmin_89
Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 08.04.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2020, 22:07     Titel: Bestimmten Wert aus Excel Datei auslesen.
  Antworten mit Zitat      
Hi zusammen,

ich muss einen bestimmten Werte aus einer Excel Datei auslesen. Dabei habe ich den Befehl dlmread verwendet.

Ich muss nur den Wert B2 der Excel Datei auslesen:

Code:

M=dlmread(test.csv,';',[2 2 0 0])


Aber irgendwie verstehe ich den Befehl nicht da ich immer eine Fehlermeldung bekomme. Was stimmt da nicht?

Den Wert habe ich versucht so im Befehl auszulesen [2 2 0 0] Zeile 2 und Spalte 2

Vielen Dank Smile

Unbenannt.JPG
 Beschreibung:

Download
 Dateiname:  Unbenannt.JPG
 Dateigröße:  20.67 KB
 Heruntergeladen:  186 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.04.2020, 23:25     Titel:
  Antworten mit Zitat      
Hallo,

min. 2 Probleme:
' ' oder " " um den Dateinamen fehlen
Du willst 1 Element, also solltest du 1,1 angeben und nicht 0,0

Generell bitte die Fehlermeldung angeben und Daten als solche anhängen und nicht als Screenshot.

Übrigens wird in der Doku readmatrix statt dlmread empfohlen.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jasmin_89
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 08.04.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.04.2020, 08:02     Titel:
  Antworten mit Zitat      
Ok, ich wollte auch die Excel Datei hochladen aber ich habe bemerkt dass ich die .csv Datei nicht hochladen kann.

Ich habe den Befehl in einer function drin stecken und den Dateinamen als Variable definiert sodass ich die '' ja nicht mehr eingeben muss.



Code:

function [ data_t_raw ] = create_time (filename , n_samples )
filename_extended = [filename '.csv'];
M = dlmread(filename_extended,';',[1 1 1 1]);
end


Habe Gestern noch lange herumprobiert aber ich komme nicht drauf wie ich aus dem Befehl dlmread nur eine Zelle aus der .csv Datei auslesen kann. Es kommt dann immer diese Fehermeldung:

Code:
Error using dlmread (line 147)
Mismatch between file and format character vector.
Trouble reading 'Numeric' field from file (row number 1, field number 3) ==> ,00E-03;s;-10,8;;Sample
Interval;2,00E-03;s;-4,24E-01\n
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

du kannst die Datei zippen und dann hochladen.

In der Doku von dlmread steht nicht nur, dass man stattdessen readmatrix nutzen sollte, sondern auch:
Zitat:
Read ASCII-delimited file of numeric data into matrix

Du hast aber halt auch nichtnumerische Daten drin.

Ich würde es halt wirklich mal mit readmatrix versuchen. Die Entwickler von MATLAB machen solche Empfehlungen ja nicht ohne Grund.

Etwa so:
Code:
M = readmatrix(filename_extended,'Range', 'B2:B2');


Wenn man die Datei in Notepad oder so öffnet, ist das Dezimaltrennzeichen dann . oder , ? Im Fall von , würde ich zusätzlich über detectImportOptions gehen.

Alternativen wäre noch textscan oder fgetl.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jasmin_89
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 08.04.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.04.2020, 08:50     Titel:
  Antworten mit Zitat      
Ok erstmals danke für die Antwort. Ich habe mein m.file und die Excel Datei hochgeladen.

Dein Code scheint offenbar nicht zu funktionieren da nun folgender Fehler steht:

Code:
Error using readmatrix (line 148)
Line ranges specified in 'DataLines' must be in increasing order and non-overlapping.


Ich habe bei meinen m.File den auszulesenden Wert (in B2) per Hand eingegeben und deinen Code mit % gespeichert.

create_time.zip
 Beschreibung:

Download
 Dateiname:  create_time.zip
 Dateigröße:  724 Bytes
 Heruntergeladen:  171 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

so funktioniert's auf jeden Fall mal:

Code:
fid = fopen('test.csv');
line1 = fgetl(fid);
line2 = fgetl(fid);
cols = strsplit(line2, ';');
M = str2double(replace(cols{2}, ',', '.'))
fclose(fid);


Die for-Schleife ist unnötig:
Code:
data_t_raw = (0:n_samples-1) * M;


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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jasmin_89
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 08.04.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.04.2020, 12:28     Titel:
  Antworten mit Zitat      
Ja super vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen
 
jasmin_89
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 08.04.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.04.2020, 17:25     Titel:
  Antworten mit Zitat      
Jetzt muss ich doch noch was nachfragen. Ich muss noch das Datum in Zelle B17 auslesen.

Ich hab da sowas probiert, aber das ist irgendwie ja vielzu umständlich:
Code:

%find and convert the date string
filename_extended = [filename '.csv'];     % append extension .csv to filename

% read out date

fid = fopen(filename_extended)  ;          
line1 = fgetl(fid)  
line3= fgetl(fid)  
line4= fgetl(fid)
line5= fgetl(fid)  
line6= fgetl(fid)  
line7= fgetl(fid)  
line8= fgetl(fid)  
line9= fgetl(fid)  
line10= fgetl(fid)
line11= fgetl(fid)
line12= fgetl(fid)  
line13= fgetl(fid)  
line14= fgetl(fid)  
line15= fgetl(fid)  
line16= fgetl(fid)  
line17= fgetl(fid)  
line18= fgetl(fid)
cols = strsplit(line18, ';');              
date = str2double(replace(cols{2}, ',', '.')) % read out date
fclose(fid);


Geht das irgendwie kompakter bzw. einfacher?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

wenn du N Zeilen überspringen möchtest:
Code:
for k = 1: N
fgetl(fid);
end


Das Datum sollte man aber nicht in Double, sondern wenn eher in ein datetime umwandeln.

Grüße,
Harald

P.S.: bitte den Status aktuell halten.
_________________

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jasmin_89
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 08.04.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.04.2020, 09:08     Titel:
  Antworten mit Zitat      
Ich habe es nun hinbekommen:

Code:
%find and convert the date string
filename_extended = [filename '.csv'];     % append extension .csv to filename

% read out date
 fid = fopen(filename_extended);            
 for k = 1: 17                  
 fgetl(fid);
 end

cols = strsplit(ans, ';');  
complete_string = cols{2};
date_raw = complete_string(24:33);                           % filter out needed digits
date = datestr(datenum(date_raw,'dd.mm.yyyy'),'yyyy_mm_dd'); % convert to format
 


Der Code ist aber etwas lang und groß, kann man dies nicht noch etwas kompakter machen? Bzw. ich möchte die Variable ans abändern in z.b col_date. Denn ich glaube ja man sollte eine Variable nie ans benennen da diese ja öfters vorkommen kann.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Der Code ist aber etwas lang und groß, kann man dies nicht noch etwas kompakter machen?

Dann kannst du höchstens versuchen, ob du das mit readmatrix, readcell, xlsread o.ä. hinbekommst.

Zitat:
Bzw. ich möchte die Variable ans abändern in z.b col_date.

Code:
currentLine = fgetl(fid); % neuer Name: currentLine


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 ;)
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.