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

probleme beim .txt einlesen mit headerlines

 

Tschublickl

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.11.2010, 01:16     Titel: probleme beim .txt einlesen mit headerlines
  Antworten mit Zitat      
hi leute,

bin mit matlab erst seit einigen tagen beschäftigt, deswegen noch anfänger und muss euch profis mal ne ganz einfache sache fragen, ich sitz jetzt aber echt schon so lang hier dran: auf den folgenden code bin ich gekommen, der klappt auch. meine datei ist eine .txt-datei mit vielen spalten und 2 zeilen. nun möchte ich aber noch 1 headerline der textdatei hinzufügen, aber hier krieg ich das net hin. wie kann ich meinen code MODIFIZIEREN, so dass ich in der textdatei noch zwei überschriften ergänzen kann und es trotzdem noch eingelesen werden kann?

Code:

function test(fileToRead1)
DELIMITER = ' ';
HEADERLINES = 0;
rawData1 = importdata('d.txt', DELIMITER, HEADERLINES);
x=rawData1(:,1);
y=rawData1(:,2);
[unused,name] = fileparts('d.txt');
newData1.(genvarname(name)) = rawData1;
vars = fieldnames(newData1);
for i = 1:length(vars)
    assignin('base', vars{i}, newData1.(vars{i}));
end
 


thx


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.11.2010, 02:55     Titel: Re: probleme beim .txt einlesen mit headerlines
  Antworten mit Zitat      
Hallo Tschublickl,

Zitat:
Code:

function test(fileToRead1)
DELIMITER = ' ';
HEADERLINES = 0;
rawData1 = importdata('d.txt', DELIMITER, HEADERLINES);
 

Ich bin sehr verwirrt. Du möchtest, dass IMPORTDATA eine Zeile als Headerline ignoriert, oder? Dann musst Du in Deinem Code-Beispiel "HEADERLINE" nicht auf 0, sondern auf 1 setzen.
Das wirkt allerdings irgendwie so trivial, dass ich vermute, dass Dein Problem irgendwo anders liegt.

Der Rest der Programms ist merkwürdig: Du definierst "x" und "y", benutzt sie aber gar nicht. "fileToRead1" ist auch ungenutzt.
Code:

x=rawData1(:,1);
y=rawData1(:,2);
[unused,name] = fileparts('d.txt');
newData1.(genvarname(name)) = rawData1;
vars = fieldnames(newData1);
for i = 1:length(vars)
    assignin('base', vars{i}, newData1.(vars{i}));
end
 

Dann verschiebst Du die Variablen per ASSIGNIN in den Base-Workspace. Wie bist Du auf die Idee gekommen, gerade diese unsichere und ausgesprochen schwer debugbare Methode der Variablen-Austauschs zu wählen?
Wenn Deine Datein z.B. "return.txt" heisst, macht GENVARNAME daraus die Variable "xReturn". Wieso dann diese Variable im Base-WorkSpace erscheint, läßt sich später kaum nachvollziehen!

Ich empfehle dringend, Variablen ganz normla per Input- und Output-Argument zu übergeben. Schau Dir mal als Beispiel die Funktionen an, die Matlab in seinen Toolboxen ausliefert.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
tschublickl

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.11.2010, 19:08     Titel: einlesen
  Antworten mit Zitat      
thx erstma für deine antowrt! ja klar, das ist nur ein auszug aus meinem quellcode. die variablen werden später verwendet. auf die idee mit dem

HEADERLINES = 1;

setzen bin auch gekommen, aber es folgt daraufhin die meldung:

Error in ==> b at 9
y=newData1(:,2);

woran liegt das? wie kann ich das umgehen? wenn ich den wert auf 0 setze, dann klappt es logischerweise, warum aber nciht mit ne 1 drin?

mfg
 
tschublickl

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.11.2010, 19:13     Titel: einlesen
  Antworten mit Zitat      
wie kann denn das mit dem

GENVARNAME

umgehen? das hat mir matlab automatisch gemacht bei der importfunktion.
 
tschublickl

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.11.2010, 19:27     Titel: einlesen
  Antworten mit Zitat      
ah, ok das mit dem GENVARNAME wegnehmen klappt nach probierne nun doch... aber das plotten klappt immer ncoh nciht wenn ich eine überschrift habe (trotz HEADERLINES = 1)

Code:

DELIMITER = ' ';
HEADERLINES = 1;
newData1 = importdata('b.txt', DELIMITER, HEADERLINES);
x=newData1(:,1);
y=newData1(:,2);
plot(x,y)
title('Darstellung der Daten aus der Textfile "b.txt"' ,'FontSize',14)
xlabel('x-Achse')
ylabel('y-Achse')
 


warum geht das nciht? wie kann ich den ersten vektor als x definieren, aber ohne dass die "überschrift im wege ist"?
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.11.2010, 18:34     Titel: Re: einlesen
  Antworten mit Zitat      
Hallo tschublickl,

Zitat:
...aber das plotten klappt immer ncoh nciht wenn ich eine überschrift habe (trotz HEADERLINES = 1)

Dieses Forum kann sehr gut helfen, Probleme zu lösen. Es ist aber nur mäßig gut darin, Probleme zu finden. Deshalb ist es immer eine gute Idee statt "klappt nicht" auch dazu zu schreiben, welche Probleme auftreten: Fehlermeldung? Weichen die Ergebnisse von den Erwartungen ab? Bitte schreibe also noch die Details.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
tschublickl

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.11.2010, 19:54     Titel:
  Antworten mit Zitat      
ok sorry; dann mach ichs nochmal:

-----------------------------------------------------------------
ich hab eine .txt-datei mit einer überschrift. ich will die werte plotten, ohne berücksichtigung der überschriften.

hier ist mein quellcode:

Code:

DELIMITER = ' ';
HEADERLINES = 1;
newData1 = importdata('b.txt', DELIMITER, HEADERLINES);
x=newData1(:,1);
y=newData1(:,2);
plot(x,y)
title('Darstellung der Daten aus der Textfile "b.txt"' ,'FontSize',14)
xlabel('x-Achse')
ylabel('y-Achse')
 


aber es kommt folgende fehlermeldung:

Zitat:

??? Index exceeds matrix dimensions.
Error in ==> b at 9
y=newData1(:,2);


warum kann ich denn die werte nicht einlesen und plotten, wenn ich überschriften in der textdatei habe?
thx
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 29.11.2010, 21:39     Titel:
  Antworten mit Zitat      
Hallo tschublickl,

Code:
newData1 = importdata('b.txt', DELIMITER, HEADERLINES);
x=newData1(:,1);
y=newData1(:,2);

??? Index exceeds matrix dimensions.
Error in ==> b at 9
y=newData1(:,2);
 

Das bedeutet, dass "newData" nur ein Element hat. Und wenn ich die Hilfe von IMPORTDATA lese, wird newData auch höchstwahrscheinlich ein STRUCT sein, oder?!
In solchen Situationen ist der Debugger sehr hilfreich:
Code:

Dann stoppt Matlab, wenn ein Fehler auftritt, und Du kannst die Werte und Typen aller Variabelen im CommandWindow oder im WorkSpace Browser untersuchen.

Viel Erfolg, Jan[/i]
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.