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

*.txt einlesen - mit error abfangen

 

FrenktheCast
Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 23.11.07
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 06.12.2007, 18:30     Titel: *.txt einlesen - mit error abfangen
  Antworten mit Zitat      
hi
ich möchte eine Datei laden und die Werte einlesen. Das geht ohne Probleme! Nun möchte ich falls die datei die eingelesen wird nicht den Werten entspricht die erwartet werden soll eine Fehler Meldung kommen und die funktion beendet werden.
Code:


waitfor(warndlg('Bei Laden von User Daten werdern die aktuelle Werte überschrieben','!! Warnung !!'))
[datei,pfad]=uigetfile('*.txt','Datei öffnen');
cd(pfad);
korrekturwerte=dlmread(datei);

if  dlmread==1
     set(handles.V_D_G,'string',korrekturwerte(1));
    ...
else
    disp('fehler')
    return
end
 

also irgenwie bekomm ich das nicht hin

PS: korrekturwerte ist eine 1:13 Matrix geschrieben mit dlmwrite
Private Nachricht senden Benutzer-Profile anzeigen


outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 06.12.2007, 22:54     Titel:
  Antworten mit Zitat      
statt
Code:
cd(pfad);
korrekturwerte=dlmread(datei);


besser das verwenden
Code:
korrekturwerte=dlmread(fullfile(pfad, datei));


Dann musst nicht den Current Directory wecheln (falls das nicht gewollt war)


die Zeile verstehe ich nicht
Code:

DLMREAD ist eine Funktion... Du überprüfst ob die Funktion gleich 1 ist???


MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
FrenktheCast
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 23.11.07
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 07.12.2007, 10:40     Titel:
  Antworten mit Zitat      
also ich wollte überprüfen ob die datei richtig in 'korrekturwerte' eingelesen wurde - falls nicht 'error'.

also das lesen funzt ohde jede Probleme - solande die datei dem erwarteten inhalt entspricht. Falls nun aber der User eine andere wählt - eine Datei die nicht dem entspricht was Matlab erwartet heult er rum. und dies will ich abfangen durch:
IF - Ok/
else - disp [bzw fehlermeldung]/
end
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 07.12.2007, 11:08     Titel:
  Antworten mit Zitat      
Hi,
was heißt denn für dich "richtig"? Weil dlmread kann ja nur numerische Werte einlesen und liefert bei nicht-numerischen Werten von sich aus schon eine Fehlermeldung, oder?!

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
FrenktheCast
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 23.11.07
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 07.12.2007, 11:59     Titel:
  Antworten mit Zitat      
also richtig - na ja die werte in 'korrekturwerte'(1:13) eingelesen wird.

Falls das nicht gemacht wird dann soll eine Fehlermeldung ausgegeben werden. Es sind immer 13 Werte. Das heist wenn es entweder 12 od. 14 werte sind oder die werte sonst nciht passen (weil evt. nan) dann eine fehlermeldung ausgegeben wird.
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 07.12.2007, 12:55     Titel:
  Antworten mit Zitat      
Dann würd ich spontan
Code:

if isequal(numel(korrekturwerte),13)
...
end
 

nehmen.

Ich glaube bei nichtnumerischen Werten bricht dlmread sowieso ab?!

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 07.12.2007, 13:22     Titel:
  Antworten mit Zitat      
Oder ausführlicher:

Code:
if any(isnan(korrekturwerte))
.    error('fehler (NaN eingelesen)')

elseif ~isequal(numel(korrekturwerte),13)
.    error('fehler (falsche Anzahl eingelesen)')
 
else
.    set(handles.V_D_G,'string',korrekturwerte(1));
.    ...
end
 


oder was Du sonst noch abprüfen willst. (. ist nur zum Einrücken!)

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 07.12.2007, 13:44     Titel:
  Antworten mit Zitat      
So ähnlich hatte ich auch erst gedacht - aber isnan() funktioniert doch nicht mit cell-Arrays, oder?!
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 07.12.2007, 14:54     Titel:
  Antworten mit Zitat      
Hi Alex,

wieso cell?

Zitat:
dlmread
Read ASCII-delimited file of numeric data into matrix


Die Matrix korrekturwerte=dlmread(fullfile(pfad, datei)) ist ganz normal ohne cells... oder?

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 07.12.2007, 15:43     Titel:
  Antworten mit Zitat      
Embarassed stimmt...

Na gut, hast mich übergezeugt Wink

lg
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 07.12.2007, 15:58     Titel:
  Antworten mit Zitat      
Very Happy Very Happy Very Happy
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
FrenktheCast
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 23.11.07
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 07.12.2007, 16:05     Titel:
  Antworten mit Zitat      
also leider geht es nicht
Code:

??? Error using ==> textscan
Mismatch between file and format string.


Kurz gesagt - ich wechsel vorher das Verzeichniss. Und wenn nun die Datei nicht geöffnet werden kann bzw. die If/ Else nicht abgeschlossen werden kann dann sprint er ja nicht wieder zurück.
hier mal der vollständige quelltext
Code:

waitfor(warndlg('Bei Laden von User Daten werdern die aktuelle Werte überschrieben','!! Warnung !!'))
orginal_cd=pwd; aktuelles_verzeichnis=pwd;
cd(strrep(aktuelles_verzeichnis, '\System', '\Daten'));
[datei,pfad]=uigetfile('*.txt','Datei öffnen');
cd(pfad);
korrekturwerte=dlmread(datei);

if any(isnan(korrekturwerte))
   error('fehler (NaN eingelesen)')

elseif ~isequal(numel(korrekturwerte),13)
   error('fehler (falsche Anzahl eingelesen)')

else
    set(handles.V_D_G,'string',korrekturwerte(1));
    set(handles.KBV_PKW,'string',korrekturwerte(2));
    set(handles.KBV_LKW,'string',korrekturwerte(3));
    set(handles.KBV_Lastzug,'string',korrekturwerte(4));
    set(handles.KBV_Bus,'string',korrekturwerte(5));
    set(handles.VDTW_1,'string',korrekturwerte(6));
    set(handles.VDTW_2,'string',korrekturwerte(7));
    set(handles.VDTW_3,'string',korrekturwerte(8));
    set(handles.VDTW_4,'string',korrekturwerte(9));
    set(handles.VDTS_1,'string',korrekturwerte(10));
    set(handles.VDTS_2,'string',korrekturwerte(11));
    set(handles.preis_super,'string',korrekturwerte(12));
    set(handles.preis_diesel,'string',korrekturwerte(13));
end

cd(orginal_cd);     %%% FEHLER BEIM ABFANGEN WENN FALSCHE DATEI GELADEN WIRD
                    %%% FEHLER WENN ABBRICHT
 


Die sache ist, dass er in der Zeile:
Code:
korrekturwerte=dlmread(datei);

rausspringt und garnicht in die IF/else abfrage reinkommt.
Ich muss ihm sagen - versuche einzulesen - wenn nicht geht heul(error('message')) rum und geh wieder ins orginale Verzeichniss - wenn geht dann weise zu und geh wieder zurück.

... das selbe symtom wenn der User auf "abbrechen" beim auswählen der Datei drückt. Er springt einfach nicht ins Orginalverzeichniss zurück.
(PS: ich möchte, dass dem User der Ordner "Daten" als erstes angezeigt wird.)

Gibt es einen Befehl der sagt - wenn es irgendeinen Fehler gibt mache "dies" - ansonsten wenn alles OK dann mache "das"?
Also der jeden möglichen fehler in der function (datei öffnen/einlesen) abfängt.

dank euch[/quote]
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 07.12.2007, 16:20     Titel:
  Antworten mit Zitat      
Hallo,

lies nochmal, was outsider geschrieben hat. Damit umgehst Du Deine ganzen Probleme, weil Du nicht das Verzeichnis wechseln musst, sondern nur aus einem anderen Verzeichnis die Daten einliest.

Die Funktion, die Du meinst, gibt es aber auch: sie heißt

Code:


Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
FrenktheCast
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 23.11.07
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 07.12.2007, 17:29     Titel:
  Antworten mit Zitat      
danke für den befehl "try" !

jetzt funzt es!

mal noch eine ganz simple Frage
Wie schreibe ich einen zeilen umbruch in ein Popupfenster

Code:
helpdlg('Erstellt von XXX YYY);

es soll so aussehen
das "erstellt von XXX" oben steht und eine Zeile darunter "YYY"

Sonst macht er ja zeilenumbrüche nach gut dünken.[/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 07.12.2007, 17:31     Titel:
  Antworten mit Zitat      
Wie unter C mit '\n' analog dazu '\t' als Tabulator Wink

lg
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
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.