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

Text File einlesen, Double im Header,

 

Nesta

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.05.2013, 19:00     Titel: Text File einlesen, Double im Header,
  Antworten mit Zitat      
Hallo Zusammen,

folgendes Problem habe ich:
Ich habe eine .txt Datei die vom Prinzip her so aussieht:

Text 1.2 2.4 3.71
0 0 0 0 0 0
1 1 1 1 1 1
2 2 2 2 2 2
3 3 3 3 3 3

Trennunszeichen: Whitespace. Die Erste Zeile ist so etwas wie eine Headerline, die neben Text auch doubles enthält, die ich später im Code dann auch verwenden möchte. In den Zeilen 2-5 kommen dann ganz normal meine Daten. Die Anzahl der Spalten in der Headerzeile stimmt natürlich nicht notwendigerweise mit der Anzahl der Spalten im Datenblock überein.

Ich hätte gerne so was in der Art
Code:

my = importdata (my.txt', '  ', 1);
a  = my.textdata(1,2);
b  = my.data;
 


a wäre dann ein Double mit Wert 1.2
und b eine Matrix mit den Daten.


Vielen Dank schon mal im voraus für eure Hilfe


Harald
Forum-Meister

Forum-Meister


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

ist der Text vor der Zahl immer gleich oder hat er irgendwelche Besonderheiten?

Ich würde mit textscan statt importdata arbeiten, da textscan deutlich flexibler ist.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.05.2013, 20:28     Titel:
  Antworten mit Zitat      
Hallo Harald,

der Text ist ein einfacher String, der aber nicht immer gleich ist.
textscan hab ich auch schon versucht, ich bin bis jetzt aber noch nicht auf eine einfache und gute Lösung gekommen (ein kleines Beispiel wäre sehr hilfreich für mich)

Im Prinzip möchte ich erst mal nur die erste Zeile (können auch mehr von der gleichen Art sein) einlesen, so dass ich dann ein Array mit den Einträgen arr = [Text, 1.2, 2.4, 3.71] habe und dann mit arr(i) auf die einzelnen Elemente zugreifen kann.

Der Datenblock ist dann kein Problem mehr, den kann ich ich dann mit importdata holen und einfach die erste Zeile als header behandeln.

Viele Grüße

Nesta
 
Harald
Forum-Meister

Forum-Meister


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

sind in diesem "einfachen String" Leerzeichen enthalten?

Im Zweifelsfall helfen reguläre Ausdrücke, aber vielleicht kommt man hier auch ohne aus.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.05.2013, 10:18     Titel:
  Antworten mit Zitat      
Hallo Harald,

der String hat keine Leerzeichen und wirklich nix anderes besonderes. Einfach nur ein Wort genau so wie "Text". (Ich schreibe den Text selber in mein File und kann das daher so festlegen.)

Mein Problem ist folgendes:
Wenn ich importdata(my.txt, ' ', 1) verwende, dann steht in einer Zelle der gesamte Ausdruck: 'Text 1.2 2.4 3.71' als ein String. Ich möchte aber ein 1x4 Array mit [Text, 1.2, 2.4, 3.71], wo ich auf die einzelnen Einträge zurgreifen kann.
Idealerweise wären die Zahlen hinter dem Text dann schon doubles, so dass ich sie nicht mehr extra konvertieren muß.

Viele Grüße und Danke für deine Hilfe

Nesta
 
Harald
Forum-Meister

Forum-Meister


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

dann sollte folgendes funktionieren:
Code:
fid = fopen('myfile.txt');
firstline = fgetl(fid);
firstnumber = textscan(firstline, '%*s %f', 1);
firstnumber = firstnumber{1};
...
fclose(fid);


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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.05.2013, 11:07     Titel:
  Antworten mit Zitat      
Genau, so was hab ich gesucht.

Vielen Dank!
 
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.