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

Exception fürs Dateien einlesen

 

Laika_1988
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 04.12.14
Wohnort: Mannheim
Version: R2010b
     Beitrag Verfasst am: 23.02.2015, 14:47     Titel: Exception fürs Dateien einlesen
  Antworten mit Zitat      
Hallo Leute,

ich stehe gerade vor einem Problem, wo ich den Wald vor lauter Bäumen nicht mehr sehe.

Ich lese mehrere Dateien ein, wie folgt:

Code:
% Select several csv-files
[filename, pathname] = uigetfile('*.csv','Bitte csv-Dateien auswählen','MultiSelect','on');

% If filename not cell, then convert to cell
if ~iscell(filename)
    filename = {filename};
end

% number of csv-files selected
anzahl = numel(filename);

% Several files open and read in
for index = 1:1:anzahl
    fid = fopen(fullfile(pathname,filename{index}),'r');

    % csv-files split up into structure parts
     structure(index).header = textscan(fid,'%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s',4,'Delimiter','\t','EmptyValue',-Inf);


Jetzt möchte ich abfangen, wenn keine Datei ausgewählt wurde.
Ich habe zwei Möglichkeiten versucht, aber beides hat leider nicht funktioniert:

Code:
% If no csv-file selected
if isempty(filename)
     a = msgbox('Es wurde keine csv-Datei ausgewählt','Upps...');
end


Code:
% If no csv-file selected
if anzahl == 0
     a = msgbox('Es wurde keine csv-Datei ausgewählt','Upps...');
end


Was mache ich falsch ?

Danke für jede Hilfe Very Happy Very Happy

Viele Grüße
Laika
_________________

Was nicht fliegt, stürzt auch nicht ab !!!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

du kannst dir ja ansehen, was dann in filename bzw. pathname steht. Wenn das Fenster weggeklickt wird, enthalten die Variablen 0.

Also:
Code:


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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 04.12.14
Wohnort: Mannheim
Version: R2010b
     Beitrag Verfasst am: 23.02.2015, 15:04     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für die Hilfe.

Muss ich das an eine bestimmte Stelle schreiben ?
Ich habe jetzt folgendes probiert:

Code:
% Select several csv-files
[filename, pathname] = uigetfile('*.csv','Bitte csv-Dateien auswählen','MultiSelect','on');

% If filename not cell, then convert to cell
if ~iscell(filename)
    filename = {filename};
end

% number of csv-files selected
anzahl = numel(filename);

% If no csv-file selected
if isequal(filename,0)
     a = msgbox('Es wurde keine csv-Datei ausgewählt','Upps...');
end

% Several files open and read in
for index = 1:1:anzahl
    fid = fopen(fullfile(pathname,filename{index}),'r');

    % csv-files split up into structure parts
     structure(index).header = textscan(fid,'%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s',4,'Delimiter','\t','EmptyValue',-Inf);
 


Code:
??? Error using ==> textscan
Invalid file identifier.  Use fopen to generate a valid file identifier.

Error in ==> Auswertesoftware>csvLaden_Callback at 168
     structure(index).header = textscan(fid,'%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s
    %s',4,'Delimiter','\t','EmptyValue',-Inf);


Crying or Very sad Crying or Very sad Crying or Very sad Crying or Very sad
Muss ich vielleicht das index abfangen ?
_________________

Was nicht fliegt, stürzt auch nicht ab !!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Laika_1988
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 04.12.14
Wohnort: Mannheim
Version: R2010b
     Beitrag Verfasst am: 23.02.2015, 15:09     Titel:
  Antworten mit Zitat      
Okay, ich habe es durch probieren heraus gefunden.

Das if isequal muss gleich nach dem uigetfile befehl, dann klappts.

Vielen Dank Harald Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy
_________________

Was nicht fliegt, stürzt auch nicht ab !!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Laika_1988
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 04.12.14
Wohnort: Mannheim
Version: R2010b
     Beitrag Verfasst am: 23.02.2015, 15:31     Titel:
  Antworten mit Zitat      
Wie kann ich jetzt abfangen, ob wirklich eine csv-Datei ausgewählt wurde ?

Ich steht zwar dar, aber man kann trotzdem beim Fenster all files auswählen und ein jpg oder ähnliches auswählen.

Wie kann ich neben dem, ob überhaupt was ausgewählt wurde, noch überprüfen, ob wirklich das format ausgewählt wurde, was verlangt ist ?
_________________

Was nicht fliegt, stürzt auch nicht ab !!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Code:
[pathstr,name,ext] = fileparts(filename);
if ~strcmp(ext, 'csv')
...
end


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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 04.12.14
Wohnort: Mannheim
Version: R2010b
     Beitrag Verfasst am: 23.02.2015, 16:13     Titel:
  Antworten mit Zitat      
Hallo Harald,

genau das habe ich gesucht und es funktioniert, nur akzeptiert er jetzt keine datei mehr, die ich einlesen will.

die dateien haben kein csv im namen, sind aber vom format csv.
ich habe eine datei auch umbenannt, dass csv im namen steht,
aber auch die werden abgeblockt, dass es das falsche format sei.

ich hab es an folgende stelle reingesetzt:

Code:
% Select one or more csv-files
[filename,pathname,ext] = uigetfile('*.csv','Bitte csv-Dateien auswählen','MultiSelect','on');

% If no csv-file selected
if isequal(filename,0)
     a = msgbox('Es wurde keine csv-Datei ausgewählt','Upps...');
end

[filename, pathname,ext] = fileparts(filename);

% If no csv selected
if ~strcmp(ext,'csv')
     b = msgbox('Falsches Format. Bitte csv-Datei auswählen','Upps...');
end  

% If filename not cell, then convert to cell
if ~iscell(filename)
    filename = {filename};
end

% number of csv-files selected
anzahl = numel(filename);

% Read in selected files
for index = 1:1:anzahl
    fid = fopen(fullfile(pathname,filename{index}),'r');

    % Split up csv-files into structure parts

_________________

Was nicht fliegt, stürzt auch nicht ab !!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Laika_1988
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 04.12.14
Wohnort: Mannheim
Version: R2010b
     Beitrag Verfasst am: 25.02.2015, 15:54     Titel:
  Antworten mit Zitat      
Okay. Den Fehler habe ich gefunden.

Ich musste den String '.csv' vergleichen und nicht 'csv' Laughing Laughing Laughing

Wenn ich eine Datei einlese, klappt das super und die Meldung kommt, dass eine falsches format gewählt wurde.

Jetzt ist mein Problem, dass es bei mehreren Dateien nicht mehr funktioniert Sad Sad Sad Sad
Sobald ich mehr als eine auswähle, kommt folgender Fehler:

Code:
??? Error using ==> fileparts at 31
Input must be a row vector of characters.

Error in ==> Auswertesoftware>csvLaden_Callback at 170
[pathstr,name,ext] = fileparts(filename);


Ich weiß allerdings noch nicht, wieviele ich eingelesen habe, dass kommt anschließend. Wenn ich es hinterhersetze, überprüft er garkeine mehr.

Wo liegt mein Fehler ? ich sehe ihn nicht Confused Confused Confused Confused

Danke für jede Hilfe Wink Wink Wink
_________________

Was nicht fliegt, stürzt auch nicht ab !!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.02.2015, 20:28     Titel:
  Antworten mit Zitat      
Hallo,

was möchtest du denn erreichen, wenn z.B. 5 .csv-Dateien und eine andere Datei ausgewählt wird? Willst du dann die 5 verarbeiten und die andere nicht, oder soll gleich ein Fehler ausgegeben werden?
Falls ersteres, würde ich die Abfrage mit fileparts in die for-Schleife ziehen und auf jede Datei einzeln anwenden. Auch im anderen Fall wird eine for-Schleife (dann aber vor der eigentlichen for-Schleife) die einfachste Lösung sein.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 04.12.14
Wohnort: Mannheim
Version: R2010b
     Beitrag Verfasst am: 25.02.2015, 22:34     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für die Nachricht.

Ich möchte eher zweiteres.
Mein Problem dabei ist, dass ich zu Beginn dieser Abfrage noch garnicht weiß, wieviele Dateien ich eingelesen habe.
Dies wird erst darunter durch anzahl bestimmt.

Wenn ich die abfrage unter anzahl schreibe, kommt der gleiche Fehler ...

Code:

??? Error while evaluating uicontrol Callback

??? Error using ==> fileparts at 31
Input must be a row vector of characters.

Error in ==> Auswertesoftware>csvLaden_Callback at 170
[pathstr,name,ext] = fileparts(filename);

_________________

Was nicht fliegt, stürzt auch nicht ab !!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

wie gesagt: man kann mit fileparts anscheinend nur die Endung einer Datei (also z.B. von filename{index} ) gleichzeitig bekommen.

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