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 file mit fscanf oder textscan?

 

Wusel
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2012, 15:02     Titel: txt file mit fscanf oder textscan?
  Antworten mit Zitat      
Hallo zusammen,

und sorry vorab, dass schon wieder einer zu dösig ist ne txt-file einzulesen, ich hab vorgestern mit matlab angefangen. Ich habe diverse Dinge ausprobiert, komme aber seit Stunden nicht zu einem Ergebnis. Ich möchte aus einer Textdatei mit mehreren Überschriftzeilen Werte einlesen und jede Spalte einem array übergeben. Die Textzeilen brauche ich nicht, ich will sie lediglich überspringen.

Mein txt hat folgendes Format:

text..
text...

1 2 3 4 5
6 7 8 9 10
etc...

Am Ende soll a = [1,6] , b=[2,7] etc. beinhalten.

Code:

fid = fopen('test.txt','r')
[daten, count] = fscanf(fid, repmat('%f',1,5))             %oder doch textscan??
spalten = 5;
zeilen = length(daten)/spalten;

for i=1:zeilen
a = daten(1,i);
b = daten(2,i);
c = daten(3,i);
d = daten(4,i);
e = daten(5,i);
end

print(a);
 



In einer textfile mit nur einer numerischen Zeile hat das so wunderbar funktioniert (leider musste ich aber auch dort die Überschriften löschen, das will ich vermeiden). Bin ich mit fscanf auf dem Holzweg? Wo ist überhaupt der Unterschied zum textscan? Die Matlabhilfen waren mir hier leider keine wirkliche Hilfe, außer, dass fscanf wohl auch unformatierte files einlesen kann.

Vielen Dank für eure Hilfe

Katrin
Private Nachricht senden Benutzer-Profile anzeigen


dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2012, 15:33     Titel:
  Antworten mit Zitat      
Kennst du die Anzahl der Überschriftszeilen? Wenn ja dann kannst du die einfach mit fgetl überspringen (je Aufruf wird eine Zeile gelesen).
Private Nachricht senden Benutzer-Profile anzeigen
 
Wusel
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2012, 15:58     Titel:
  Antworten mit Zitat      
Hey, das klappt, vielen Dank!

Gibt es eine elegantere Lösung als das 6 Zeilen lang zu wiederholen?

Was die arraybildung betrifft, bastel ich noch eine Runde weiter...
Private Nachricht senden Benutzer-Profile anzeigen
 
dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2012, 16:24     Titel:
  Antworten mit Zitat      
z=daten(:,i)

Gibt dir die i-te Spalte, Zugriff ist dann möglich via z(1), z(2) usw...

Solche Zusammenhänge aufzulösen und als einzelne Variablen (a,b,c,d,e,f) zu speichern ist meist ungünstig.
Private Nachricht senden Benutzer-Profile anzeigen
 
Wusel
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2012, 16:45     Titel:
  Antworten mit Zitat      
Wenn ich die Daten so einlesen, liest er zeilenweise in eine 1xn-Matrix ein. (n=Anzahl alle Daten)

Sagen wir, ich habe an

Stelle 1 eine Zeit
Stelle 2 eine Spannung
Stelle 3 eine Dehnung
..


Was habe ich für andere Möglichkeiten? Wäre textscan doch die richtige Wahl oder hat das damit erstmal nichts zu tun?

Bei z=daten(:,i) (innerhalb einer Schleife, sonst kennt er i ja nicht, oder?) bekomme ich übrigens: 'Index exceeds matrix dimensions.'
Private Nachricht senden Benutzer-Profile anzeigen
 
Wusel
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2012, 17:21     Titel:
  Antworten mit Zitat      
Code:

j=1;
k=2;

for i=1:zeilen

    t(i) = daten(j);
    eps(i) = daten(k);
...
   
    j=j+4;
    k=j+1;

end
 



So gehts.... glaub ich jedenfalls... nur kommen jetzt Werte drin vor, die es nicht gibt.
Ich vermute, dass double für einen Wert von 500E-06 ein wenig zu kurz ist, jedenfalls bastelt er mir an dieser Stelle einen negativen Wert...
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.