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

Problem bei mehrfacher Verwendung von "headerlines"

 

jojo1848

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.02.2011, 09:07     Titel: Problem bei mehrfacher Verwendung von "headerlines"
  Antworten mit Zitat      
Hallo zusammen!

Ich habe folgendes Problem: Ich möchte aus einer .txt Datei mehrere Zahlenwerte einlesen. Diese befinden sich aber in unterschiedlichen Zeilen (im vorliegenden Fall in den Zeilen 2, 6, 10, usw.). Dazwischen steht irgendwas geschrieben. Der erste Wert aus Zeile 3 wird noch eingelesen, danach aber funktioniert "headerlines" nicht mehr. Deshalb meine Frage: Wie kann ich dieses Problem lösen bzw. gibt es überhaupt einen Befehl, der mir das ermöglicht?

MfG Jojo


_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 28.02.2011, 10:29     Titel:
  Antworten mit Zitat      
Hallo jojo1848,
wie sehen deine versuche aus? Dein Code? Wie sieht die txt-Datei aus?
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
jojo1848

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.02.2011, 11:01     Titel:
  Antworten mit Zitat      
Hallo Peter!

es handelt sich um ein Programm, welches ca. 20 konstante Werte benötigt, die in einer .txt-Datei abgelegt werden, z.B. so:

Dichte rho
[kg/m^3]
1002

Länge L
[m]
200

Breite B
[m]
50

usw...

Naja und was das programm betrifft, gibt es leider nicht viel zu sagen, außer dass es mit 'headerlines' nicht funktioniert.

Parameter = 'Konstanten.txt'
[rho] = textread(Parameter, '%f','headerlines', 2);
[L] = textread(Parameter, '%f','headerlines', 6);
[B] = textread(Parameter,'%f','headerlines', 10);

rho wird noch eingelesen, die anderen aber leider nicht...
mfg jojo
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 28.02.2011, 11:26     Titel:
  Antworten mit Zitat      
Dann wäre, vielleihct folgendes für dich interessant:

Code:

fid = fopen('Werte.txt', 'r'); % Datei zum lesen öffnen
Konstanten = {}; % Variable für struct anlegen

while 1 %Endlosschleife    
    tline = fgetl(fid); % nächste Zeile einlesen
    if ~ischar(tline),   break,   end % Wenn Dateiende erreicht -> beende Schleife

    if ~isempty(regexp(tline, '\w*\s+\w*', 'match', 'once'))
        index = length(Konstanten)+1; %index für neuen Datensatz
        value_parts = regexp(tline, '\s', 'split'); %Teile den string(die Zeile) bei den Leerzeichen auf
        Konstanten(index).Name = value_parts(1);
        Konstanten(index).Kurz = value_parts(2);
        Konstanten(index).Einheit = fgetl(fid);
        Konstanten(index).Wert = fgetl(fid);
    end
end
fclose(fid);
 


Damit legst du alle Konstanten mit allen Informationen in einem struct ab und kannst bequem drauf zugreifen. Oder eben als einzelne structs anlegen.
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
jojo1848

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.02.2011, 11:51     Titel:
  Antworten mit Zitat      
Eine Frage noch, was soll das "regexp" bedeuten. Da kommt ne Fehlermeldung, dass es nicht definiert sei...
mfg
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 01.03.2011, 10:14     Titel:
  Antworten mit Zitat      
regexp ist eine regular expression.
Code:

was für eine Fehlermeldung kommt genau?
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
jojo1848

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.03.2011, 10:20     Titel:
  Antworten mit Zitat      
Hallo Peter!

??? Undefined function or variable 'regexp'.
Error in ==> ...
On line 20 ==> if ~isempty(regexp(tline, '\w*\s+\w*', 'match', 'once'))

Ich habe Version 6, schätze mal, dass es daran liegt...

mfg
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 01.03.2011, 11:52     Titel:
  Antworten mit Zitat      
Also auf Matlab 6 kann ich leider nichtmehr zugreifen um zu testen was es da für Möglichkeiten gibt. Aber versuch mal dann mal folgendes an deinem Code zu ändern:

Code:

[rho] = textread(Parameter, '%f','headerlines', 2);
[L] = textread(Parameter, '%f','headerlines', 2);
[B] = textread(Parameter,'%f','headerlines', 2);
 


bei textscan(dem Nachfolgerbefehl von textread) wird das Dokument nicht jedesmal von vorne durchsucht, sondern ab dem Punkt wo das letzte mal abgelesen wurde. Deswegen musst du von dort weiterspringen und nicht von vorne anfangen.
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?

Zuletzt bearbeitet von _Peter_ am 01.03.2011, 13:38, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
jojo1848

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.03.2011, 12:54     Titel:
  Antworten mit Zitat      
Das funktioniert leider auch nicht!

Fehlermeldung lautet:

expected ";" , found "numeric value"
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 01.03.2011, 13:41     Titel:
  Antworten mit Zitat      
sorry hatte ausversehen noch
Code:
textread(Parameter, '%f','headerlines', [b]2[/b]);
da stehen, das muss natürlich nur
Code:
textread(Parameter, '%f','headerlines', 2);
heißen.

Oder hattest du das korrigiert?
Vielleicht kannst du das mit textscan versuchen, wenn es das schon bei Matlab 6 gibt.
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
jojo1848

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.03.2011, 13:52     Titel:
  Antworten mit Zitat      
Funktioniert leider beides nicht.

textscan gibt es leider noch nicht und bei 'headerlines' erkennt er wieder nur die erste Variable und ab der zweiten kann ersie nicht mehr einlesen...
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 01.03.2011, 15:23     Titel:
  Antworten mit Zitat      
Welche Version hast du genau?
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
jojo1848

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.03.2011, 15:29     Titel:
  Antworten mit Zitat      
6.1
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 01.03.2011, 16:04     Titel:
  Antworten mit Zitat      
Habe ganz vergessen, dass die 6.1 logischerweise nicht mir Windows7 zusammenspielt. Krieg ich leider nicht zum laufen. Sry.

Vielleicht hat aber noch jemand anderes eine Idee.
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 02.03.2011, 00:12     Titel:
  Antworten mit Zitat      
Hallo,

Hier ist Peter's Code angepasst für Matlab 6.1:
Code:
fid = fopen('Werte.txt', 'r'); % Datei zum lesen öffnen
Konstanten = []; % Variable für struct anlegen  % EDITED

while 1 %Endlosschleife    
    tline = fgetl(fid); % nächste Zeile einlesen
    if ~ischar(tline),   break,   end % Wenn Dateiende erreicht -> beende Schleife

    tline = deblank(tline)
    if ~isempty(tline)
        sep = find(isspace(tline));
        index = length(Konstanten)+1; %index für neuen Datensatz
        Konstanten(index).Name = tline(1:sep - 1);
        Konstanten(index).Kurz = tline(sep + 1:end);
        Konstanten(index).Einheit = fgetl(fid);
        Konstanten(index).Wert = fgetl(fid);
    end
end
fclose(fid);

Gruß, Jan
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 - 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.