Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

Verkehrssimulation: Modell aus Buch mit Simulink nachstellen

Fachkräfte:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

String von Txt-File einlesen und in double-Werte umwandeln

 

jm
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 30.12.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2018, 12:37     Titel: String von Txt-File einlesen und in double-Werte umwandeln
  Antworten mit Zitat      
Hallo,
ich bin noch Anfänger und komme nicht weiter

mein Problem:
ich lese von einer Textdatei mit fgetl eine Datenzeile mit 4 Werten (Spaltentrenner = Tab) in den String tline ein.
tline =
0.0007731 1 0 0 0.04

mit strsplit bekomme ich dann eine String-Matrix Zeile

Zeile = strsplit(tline, '\t');

Zeile=
'0.0007731' '1' '0' '0' '0.04'

jetzt möchte ich diese String-Matrix in 4 double-Wert z.B. in a, b, c, d umwandelm !


mit dem Befehl a = str2double(Zeile{1}); bekomme ich auch den richtigen double-Wert ohne Fehlermeldung

bei str2double(Zeile{2}); str2double(Zeile{3}); str2double(Zeile{4});
bekomme ich auch die richtigen Werte aber die Fehlermeldung:

Index exceeds Matrix Dimension
b = str2double(Zeile{2});


was mach ich da falsch

vielen Dank im Voraus
Josef
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

ich vermute mal, dass du letztlich mehr als die 4 Werte einlesen willst? Dann gibt es Befehle, die sich besser eignen, z.B. dlmread , readtable oder textscan .

Falls du bei dem Ansatz bleiben willst: Die Fehlermeldung verwundert mich.
Welchen Datentyp und welche Dimensionen hat die Variable Zeile?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jm
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 30.12.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2018, 14:36     Titel:
  Antworten mit Zitat      
Welchen Datentyp und welche Dimensionen hat die Variable Zeile?

Im Workspace steht 1x4 cell , muss die Variable Zeile extra deklariert werden ?

Gruß
Josef
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 23.000
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.12.2018, 15:46     Titel:
  Antworten mit Zitat      
Hallo,

nein, daran sollte es nicht liegen.

Bei einer 1x4-Cell sollte der Zugriff so an sich funktionieren.
Kannst du ein reproduzierbares Beispiel posten?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jm
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 30.12.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2018, 19:58     Titel:
  Antworten mit Zitat      
Beispiel:


Code:
fid = fopen( 'Daten.dat', 'r' );

weiter = 1;                                % Flag als Merker, ob Datei-Ende erreicht

while( weiter )                           % so lange weiter, bis Datei-Ende
    tline = fgetl( fid );                  % nächste Zeile einlesen
    if( tline == -1 )                      % Datei-Ende erreicht
        weiter = 0;                        % Flag zum Beenden setzen
    else
        Zeile = strsplit(tline, '\t');
     
        a = str2double(Zeile{1});
        b = str2double(Zeile{2});
        c = str2double(Zeile{3});
        d = str2double(Zeile{4});
 
        whos Zeile;
 
    end
end

fclose( fid );




Ergebnis:


Name Size Bytes Class Attributes

Zeile 1x4 474 cell

Index exceeds matrix dimensions.

Error in Test (line 13)
b = str2double(Zeile{2});

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

um das reproduzieren zu können, bräuchte man die Daten.

Ein Problem könnte sein, wenn nicht alle Zeilen 4 Werte enthalten. Dann müsste die Variable aber auch entsprechend kürzer sein.

Momentan werden a-d ständig überschrieben. Ist das beabsichtigt?

Das Einlesen kompletter Dateien geht generell mit den anfangs genannten Befehlen einfacher.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jm
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 30.12.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2018, 21:36     Titel:
  Antworten mit Zitat      
Hallo,

im Anhang die Daten-Datei mit Endung txt !

Das a-d ständig überschrieben wird ist Absicht, ich muss die Zeilen der Datei einzeln einlesen und verarbeiten.

Gruß
Josef

Daten.txt
 Beschreibung:

Download
 Dateiname:  Daten.txt
 Dateigröße:  110 Bytes
 Heruntergeladen:  208 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

bei mir kommt die Fehlermeldung nicht.

Du kannst die Daten auch einzeln verarbeiten, z.B. in einer for-Schleife, wenn du sie wie vorgeschlagen eingelesen hast.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jm
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 30.12.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2018, 21:58     Titel:
  Antworten mit Zitat      
Hallo Harald,
vielen Dank für die Info,

ich habe noch eine Frage: kann Matlab ein Feld mit der Größe 120000 x 14 Werte
einlesen und verarbeiten ?

Gruß
Josef
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 23.000
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.12.2018, 00:18     Titel:
  Antworten mit Zitat      
Hallo,

ja.
MATLAB hat mit Daten kein Problem, solange sie in den Speicher passen. Selbst wenn sie nicht in den Speicher passen würden, gäbe es noch Möglichkeiten.

Da Double 8 Bytes hat:
120000*14*8 = 13.44e6, das sind also gerade mal 13,44 MB.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
jm
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 30.12.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.12.2018, 09:00     Titel:
  Antworten mit Zitat      
Danke für die Info,

habe den Fehler über DEBUG gefunden,

Datei endet mit 2 x CRLF, das heißt, nach dem 1. CRLF wird nochmal eine
Zeile eingelesen:

Wert a = CRLF = NaN
Wert b = Fehler, weil kein Wert vorhanden ist.

Gruß
Josef
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2021 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.