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

Teilweises Einlesen ungleichmäßiger *.txt

 

jasicha
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 22.10.12
Wohnort: ---
Version: 2014a
     Beitrag Verfasst am: 13.07.2014, 16:53     Titel: Teilweises Einlesen ungleichmäßiger *.txt
  Antworten mit Zitat      
Hallo,
ich habe folgendes Problem.

Zur Weiterverarbeitung von Simulationsdaten aus MSC ADAMS mit dem Reifenmodell FTire werden Daten diskreter Punkte der Reifenaufstandsfläche (Latsch) in einem file (ftire.cfo) gespeichert. Je nach Simulationsdauer ist die Datenflut "riesig". Das führt zu dem Problem das ein komplettes Einlesen in Matlab seeeehr lange dauert.

Zudem kommt, dass das *.cfo file nicht nur aus Datennwerten in Tabellenform besteht, sondern nach Zeitschritten (immer unterschiedlich, da Integrationszeit) in Blöcken sortiert ist. Diese Blöcke sind je nachdem wieviele Punkte in Kontakt mit dem untergrund stehen unterschiedliche groß.

Die jeweiligen Blöcke haben immer die selbe Spaltenreihenfolge. Also z.B. 1. Spalte=pos_x, 2. Spalte=pos_y, usw. --> siehe angehängte *.txt



Das Einlesen und Sortieren in ein Struct-Array funktioniert. Nur dauert es ewig.
Außerdem fehlt mir noch eine elegange Lösung nur einzelne Spalten wie z.B. pos_x und pos_y einzulesen sodass ich sie anschließend plotten kann.

Code:
%% Laden der Zeitschritte & Zugehörigen Blockstärke
% Timer Starten
tic

% Löschen des Workspace
clc, clear

% Öffnen des *.cfo-files
fidT = fopen('FTire\ftire001.cfo');

i=1;

% While schleife zum finden der Zeitschritte & Anzahl der Zeilen im Block
while ~feof(fidT) % Lesen bis zum Ende der Datei
    stringT = fgetl(fidT); % Zeile auslesen
   
    if length(stringT)>2 && strcmpi(stringT(3),'t') % Wenn Zeilenlänge größer 2 & drittes char-Element ein t ist -> weitermachen!!
        formatSpec1 = '%*s %*s %f %d %*[^\n]'; % Definition des Formats zum Einlesen
        T(i,:) = textscan(stringT, formatSpec1); % Einlesen der Zeit und Blockgröße und Abspeichern in C, Weiter wird die Position des Suchers festgehalten
       
        FTire(i).time = cell2mat(T(i,1)); % Zeit ins Struct-Array schreiben
        FTire(i).size = cell2mat(T(i,2)); % Blockgröße ins Struct-Array schreiben
   
        i=i+1; % Zähler für das Array
    end
end

fclose(fidT); % Schließen der *.cfo

toc

%% Laden der Daten aus dem File
% öffnen des Files
tic

fidA = fopen('FTire\ftire001.cfo'); % Öffnen der *.txt

a=1;

% Schleife zum Auslesen der Daten
while ~feof(fidA) % Bis das Ende erreicht ist...
    stringA = fgetl(fidA); % Lesen eine Zeile
           
        if length(stringA)>2 && strcmpi(stringA(1),' ') % Wenn Zeilenlänge größer als 2 & erstes element ist ein Leerzeichen      
            formatSpec2 = '%f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f'; % Einleseformat
            A(a,:) = textscan(stringA, formatSpec2); % Einlesen der Daten und Ablegen in Matrix A
           
            a=a+1; % Zeilen-Zähler    
        end
end
 
% Schließen des *.cfo-Files
fclose(fidA);

toc


%% Sortieren der Daten in das im ersten Block angelegte Struct-Array
% ...

start=1; % Start-Zeile zum Auslesen der Werte aus der Matrix
ende=0; % Letzte-Zeile zum Auslesen der Werte aus der Matrix
p=1; % Variable als Abbruchbedingung des Struct-Arrays

while p ~= length(FTire)+1
   
    ende=ende+FTire(p).size;  
   
    FTire(p).matrix=cell2mat(A(start:ende,:));
     
    start=ende+1;
   
    p=p+1;
   
end

toc


Habe meinen Matlab code nochmals unten angehängt.

test3.txt
 Beschreibung:
Hier ein Beipiel des Formates vom *.cfo file. Das eigentliche file ist 700MB groß.

Download
 Dateiname:  test3.txt
 Dateigröße:  19.53 KB
 Heruntergeladen:  325 mal
Imp_FTire_cfo.m
 Beschreibung:
Einlese-Skript

Download
 Dateiname:  Imp_FTire_cfo.m
 Dateigröße:  2.41 KB
 Heruntergeladen:  251 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

Zitat:
Das führt zu dem Problem das ein komplettes Einlesen in Matlab seeeehr lange dauert.

Dass das Einlesen von 700 MB Daten lange dauert, verwundert mich nun nicht. Wie lange ist denn "seeeehr" lange? Minuten? Stunden? Tage?

Zitat:
Außerdem fehlt mir noch eine elegange Lösung nur einzelne Spalten wie z.B. pos_x und pos_y einzulesen sodass ich sie anschließend plotten kann.

Für die nicht benötigten Spalten ein * in das Format einfügen, also z.B. %*f als %f.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 22.10.12
Wohnort: ---
Version: 2014a
     Beitrag Verfasst am: 15.07.2014, 08:10     Titel:
  Antworten mit Zitat      
Hi Harald.

Das einlesen der Zeitschritte (erste while Schleife) dauer i.d.R. zw. 70-90 Sekunden. Das ist auch völlig ok.

Der Zweite Teil. Also das Einlesen der Daten und Abspeichern in Matrix A dauert allerdings ca. 18 Stunden.

Das anschließende Sortieren aus Matrix A ins structure dauert wieder ca. 60 Sekunden.

Das Ich durch Ändern der
Code:
formatSpec
meine einzulesenden Spalten auswählen kann ist mir klar. Ich habe das ganze auch in einer Funktion mit unterschiedlichen einleseformaten als Eingang umgesetzt.

Meine Frage ist jetzt, liegt die lange Einlesezeit "auch" daran das meine Skript einfach umständlich geschrieben oder es eine "blöde" Art und Weise der Umsetzung ist?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
jasicha
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 22.10.12
Wohnort: ---
Version: 2014a
     Beitrag Verfasst am: 15.07.2014, 08:15     Titel:
  Antworten mit Zitat      
Hi Harald.

Das einlesen der Zeitschritte (erste while Schleife) dauer i.d.R. zw. 70-90 Sekunden. Das ist auch völlig ok.

Der Zweite Teil. Also das Einlesen der Daten und Abspeichern in Matrix A dauert allerdings ca. 18 Stunden.

Das anschließende Sortieren aus Matrix A ins structure dauert wieder ca. 60 Sekunden.

Das Ich durch Ändern der
Code:
formatSpec
meine einzulesenden Spalten auswählen kann ist mir klar. Ich habe das ganze auch in einer Funktion mit unterschiedlichen einleseformaten als Eingang umgesetzt.

Meine Frage ist jetzt, liegt die lange Einlesezeit "auch" daran das meine Skript einfach umständlich geschrieben oder es eine "blöde" Art und Weise der Umsetzung ist?

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

Forum-Meister


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

wenn ich das richtig sehe, gehst du ja beide Male komplett durch die Datei durch.
Unterscheiden sich die eingelesenen Blöcke stark in der Größe, oder etwas ähnliches?
Wieviel Hauptspeicher (RAM) hast du? Beobachte mal die Speicherauslastung im Task Manager.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 22.10.12
Wohnort: ---
Version: 2014a
     Beitrag Verfasst am: 16.07.2014, 17:53     Titel:
  Antworten mit Zitat      
Hi,
Ja genau. Die Textdatei wird zweimal komplett durchlaufen. Einmal um die Integrationsschritte abzuspeichern und die Blockgrößen festzuhalten. beim zweiten mal werden alle Zeilen außer die, in denen Zeit und Blockgröße steht, nacheinander eingelesen und in Matrix A abgespeichert.

Die Spaltern der unterschiedlichen Blöcke sind gleich. Die Anzahl der Zeilen in den jeweiligen Blöcken unterscheidet sich allerdings. Anzahl Zeilen zwischen 1 - 200 pro Block.

Mein System hat 8GB RAM. Gibt es die Möglichkeit den von Matlab benutzbaren Speicher einzustellen?

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

Forum-Meister


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

für den zweiten Teil könnte etwas dieser Form helfen:

Code:
fid = fopen('test3.txt');
formatSpec2 = '%f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f';
B = textscan(fid, formatSpec2, 'CommentStyle', '%');
fclose(fid);


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 22.10.12
Wohnort: ---
Version: 2014a
     Beitrag Verfasst am: 04.09.2014, 14:38     Titel:
  Antworten mit Zitat      
Hi Harald,
hatte die Aufgabe erstmal ein wenig verschoben. Hänge jetzt aber immer noch an dem Zeitfaktor fest.

Das mit dem
Code:
'CommentStyle'
hilft leider nicht viel, da ich sowohl außer den unwichtigen mit % beginnenden Zeilen auch Leerzeilen vorhanden sind. Die muss ich ja auch durchsuchen...

Gibt es nicht die möglichkeit die Position in der Textdatei exakt zu definieren, also in der Art: Springe an die Position 350 im Textfile und lese dann 10 Zeichen aus.

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

Forum-Meister


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

Zitat:
hilft leider nicht viel, da ich sowohl außer den unwichtigen mit % beginnenden Zeilen auch Leerzeilen vorhanden sind. Die muss ich ja auch durchsuchen...

Was meinst du damit? Insbesondere: was willst du in den Leerzeilen suchen?
Die werden einfach übersprungen.

Zitat:
Gibt es nicht die möglichkeit die Position in der Textdatei exakt zu definieren, also in der Art: Springe an die Position 350 im Textfile und lese dann 10 Zeichen aus.

Mit Headerlines kannst du Zeilen überspringen. Mit ftell/fseek kannst du in der Datei beliebig springen. Ich frage mich aber, was das hier bringen soll.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 22.10.12
Wohnort: ---
Version: 2014a
     Beitrag Verfasst am: 07.09.2014, 12:46     Titel:
  Antworten mit Zitat      
Hi Harald, das mit den Leereichen überspringen klappt. Hatte einen Denkfehler an der Stelle. Das ganze funktioniert auch schneller als meine erste Methode. Danke dafür.

Habe jetzt ein weiteres kleines Problem. Je nach Simulationsverlauf kann es dazu kommen, dass am ende meiner *.cfo Datei mehrer Zeilen mit Leerzeichen sind. Aus diesem Grund kommt es zu Fehlern in meinem Skript, wenn ich nicht vorher die Leerzeichen am Ende lösche.

Gibt es einen Befehl den ich vorschalten kann, sodass zunächst alle Leerzeichen am Ende bis zum ersten richtigen Zeichen Gelöscht werden?

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

Forum-Meister


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

ich würde es umgekehrt machen: alles einlesen und eventuelle ungültige Zeilen nachträglich entfernen.
Ansonsten wie immer: bitte konkretes Beispiel, welcher Code verwendet wird und warum es dabei zu Problemen kommt.

Rein aus Neugierde: wie ist die Dauer im Vergleich vorher/nachher?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 22.10.12
Wohnort: ---
Version: 2014a
     Beitrag Verfasst am: 08.09.2014, 10:41     Titel:
  Antworten mit Zitat      
Hi Harald,
der Unterschied ist enorm. Bei meinem Alten Skript wurde ja die Datei Zeile für Zeile in einer Schleife eingelesen. Da dauerte das Einlesen der etwa 500MB (wenn ich die Leerzeichen manuell entfernt habe) 18h

Mit der jetzigen Methode nur etwa 2Minuten! Besser gehts nicht.

Das Problem das ich jetzt beim Einlesen der *.cfo habe wird mit folgendermaßen angezeigt


Error using cat
Dimensions of matrices being concatenated are not consistent.

Error in cell2mat (line 75)
m{n} = cat(2,c{n,:});

Error in Imp_FTire_cfo_Vers2 (line 70)
B = cell2mat(A);


Der Betreffende Code ist dieser hier:

Code:
%% Laden der Daten aus dem File
% Starten des Timers
tic

% Öffnen des Files
fidA = fopen(file); % Öffnen der *.txt

% Variable für die Spalte der Matrix A
a=1;

% Auslesen der Daten
A = textscan(fidA, Format, 'CommentStyle','%','HeaderLines',4); % Einlesen der Daten und Ablegen in Matrix A

% Schließen des Files
fclose(fidA);

B = cell2mat(A);

% Timer Stopp
toc
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.09.2014, 13:12     Titel:
  Antworten mit Zitat      
Hallo,

was ist Format bei diesem Code? Damit das funktioniert, muss das Format einheitlich sein, darf also nicht verschiedene Datentypen enthalten.

Hast du auch eine Testdatei dazu?

Achte auch mal bei A, ob die Anzahl der Elemente in den einzelnen Zellen gleich ist:
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
midomidi2013
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 16.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.09.2014, 21:53     Titel: Re: Teilweises Einlesen ungleichmäßiger *.txt
  Antworten mit Zitat      
jasicha hat Folgendes geschrieben:
Hallo,
ich habe folgendes Problem.

Zur Weiterverarbeitung von Simulationsdaten aus MSC ADAMS mit dem Reifenmodell FTire werden Daten diskreter Punkte der Reifenaufstandsfläche (Latsch) in einem file (ftire.cfo) gespeichert. Je nach Simulationsdauer ist die Datenflut "riesig". Das führt zu dem Problem das ein komplettes Einlesen in Matlab seeeehr lange dauert.

Zudem kommt, dass das *.cfo file nicht nur aus Datennwerten in Tabellenform besteht, sondern nach Zeitschritten (immer unterschiedlich, da Integrationszeit) in Blöcken sortiert ist. Diese Blöcke sind je nachdem wieviele Punkte in Kontakt mit dem untergrund stehen unterschiedliche groß.

Die jeweiligen Blöcke haben immer die selbe Spaltenreihenfolge. Also z.B. 1. Spalte=pos_x, 2. Spalte=pos_y, usw. --> siehe angehängte *.txt



Das Einlesen und Sortieren in ein Struct-Array funktioniert. Nur dauert es ewig.
Außerdem fehlt mir noch eine elegange Lösung nur einzelne Spalten wie z.B. pos_x und pos_y einzulesen sodass ich sie anschließend plotten kann.

Code:
%% Laden der Zeitschritte & Zugehörigen Blockstärke
% Timer Starten
tic

% Löschen des Workspace
clc, clear

% Öffnen des *.cfo-files
fidT = fopen('FTire\ftire001.cfo');

i=1;

% While schleife zum finden der Zeitschritte & Anzahl der Zeilen im Block
while ~feof(fidT) % Lesen bis zum Ende der Datei
    stringT = fgetl(fidT); % Zeile auslesen
   
    if length(stringT)>2 && strcmpi(stringT(3),'t') % Wenn Zeilenlänge größer 2 & drittes char-Element ein t ist -> weitermachen!!
        formatSpec1 = '%*s %*s %f %d %*[^\n]'; % Definition des Formats zum Einlesen
        T(i,:) = textscan(stringT, formatSpec1); % Einlesen der Zeit und Blockgröße und Abspeichern in C, Weiter wird die Position des Suchers festgehalten
       
        FTire(i).time = cell2mat(T(i,1)); % Zeit ins Struct-Array schreiben
        FTire(i).size = cell2mat(T(i,2)); % Blockgröße ins Struct-Array schreiben
   
        i=i+1; % Zähler für das Array
    end
end

fclose(fidT); % Schließen der *.cfo

toc

%% Laden der Daten aus dem File
% öffnen des Files
tic

fidA = fopen('FTire\ftire001.cfo'); % Öffnen der *.txt

a=1;

% Schleife zum Auslesen der Daten
while ~feof(fidA) % Bis das Ende erreicht ist...
    stringA = fgetl(fidA); % Lesen eine Zeile
           
        if length(stringA)>2 && strcmpi(stringA(1),' ') % Wenn Zeilenlänge größer als 2 & erstes element ist ein Leerzeichen      
            formatSpec2 = '%f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f'; % Einleseformat
            A(a,:) = textscan(stringA, formatSpec2); % Einlesen der Daten und Ablegen in Matrix A
           
            a=a+1; % Zeilen-Zähler    
        end
end
 
% Schließen des *.cfo-Files
fclose(fidA);

toc


%% Sortieren der Daten in das im ersten Block angelegte Struct-Array
% ...

start=1; % Start-Zeile zum Auslesen der Werte aus der Matrix
ende=0; % Letzte-Zeile zum Auslesen der Werte aus der Matrix
p=1; % Variable als Abbruchbedingung des Struct-Arrays

while p ~= length(FTire)+1
   
    ende=ende+FTire(p).size;  
   
    FTire(p).matrix=cell2mat(A(start:ende,:));
     
    start=ende+1;
   
    p=p+1;
   
end

toc


Habe meinen Matlab code nochmals unten angehängt.


SimOptions stehen schon in der Funktion.
Code:

simOptions = simset('SrcWorkspace','current');
 


Release ist R2013b

die Function [F_sim] soll ja mit den Parametern das Ergebnis an ydata angleichen? aber aus irgend einem Grund tut es das nicht
_________________

شركة ن.....585;ياض شركة ت.....585;ياض
Private Nachricht senden Benutzer-Profile anzeigen
 
midomidi2013
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 16.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.09.2014, 21:55     Titel: Re: Teilweises Einlesen ungleichmäßiger *.txt
  Antworten mit Zitat      
midomidi2013 hat Folgendes geschrieben:
jasicha hat Folgendes geschrieben:
Hallo,
ich habe folgendes Problem. شركة ت.....585;ياض

Zur Weiterverarbeitung von Simulationsdaten aus شركة ت.....585;ياض ADAMS mit dem Reifenmodell شركة م.....585;ياضFTire werden Daten diskreter Punkte der Reifenaufstandsfläche (Latsch) in einem file (ftire.cfo) gespeichert. Je nach Simulationsdauer ist die Datenflut "riesig". Das führt zu dem Problem das ein komplettes Einlesen in Matlab seeeehr lange dauert.

Zudem kommt, dass das *.cfo file nicht nur aus Datennwerten in شركة ج.....585;ياضTabellenform besteht, sondern nach Zeitschritten (immer unterschiedlich, da Integrationszeit) in Blöcken sortiert ist. Diese Blöcke sind je nachdem wieviele Punkte in Kontakt mit dem untergrund stehen unterschiedliche groß.

Die jeweiligen Blöcke haben immer die selbe Spaltenreihenfolge. Also z.B. 1. Spalte=pos_x, 2. Spalte=pos_y, usw. --> siehe angehängte *.txt



Das Einlesen und Sortieren in ein Struct-Array funktioniert. Nur dauert es ewig.
Außerdem fehlt mir noch eine elegange Lösung nur einzelne Spalten wie z.B. pos_x und pos_y einzulesen sodass ich sie anschließend plotten kann.

Code:
%% Laden der Zeitschritte & Zugehörigen Blockstärke
% Timer Starten
tic

% Löschen des Workspace
clc, clear

% Öffnen des *.cfo-files
fidT = fopen('FTire\ftire001.cfo');

i=1;

% While schleife zum finden der Zeitschritte & Anzahl der Zeilen im Block
while ~feof(fidT) % Lesen bis zum Ende der Datei
    stringT = fgetl(fidT); % Zeile auslesen
   
    if length(stringT)>2 && strcmpi(stringT(3),'t') % Wenn Zeilenlänge größer 2 & drittes char-Element ein t ist -> weitermachen!!
        formatSpec1 = '%*s %*s %f %d %*[^\n]'; % Definition des Formats zum Einlesen
        T(i,:) = textscan(stringT, formatSpec1); % Einlesen der Zeit und Blockgröße und Abspeichern in C, Weiter wird die Position des Suchers festgehalten
       
        FTire(i).time = cell2mat(T(i,1)); % Zeit ins Struct-Array schreiben
        FTire(i).size = cell2mat(T(i,2)); % Blockgröße ins Struct-Array schreiben
   
        i=i+1; % Zähler für das Array
    end
end

fclose(fidT); % Schließen der *.cfo

toc

%% Laden der Daten aus dem File
% öffnen des Files
tic

fidA = fopen('FTire\ftire001.cfo'); % Öffnen der *.txt

a=1;

% Schleife zum Auslesen der Daten
while ~feof(fidA) % Bis das Ende erreicht ist...
    stringA = fgetl(fidA); % Lesen eine Zeile
           
        if length(stringA)>2 && strcmpi(stringA(1),' ') % Wenn Zeilenlänge größer als 2 & erstes element ist ein Leerzeichen      
            formatSpec2 = '%f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f'; % Einleseformat
            A(a,:) = textscan(stringA, formatSpec2); % Einlesen der Daten und Ablegen in Matrix A
           
            a=a+1; % Zeilen-Zähler    
        end
end
 
% Schließen des *.cfo-Files
fclose(fidA);

toc


%% Sortieren der Daten in das im ersten Block angelegte Struct-Array
% ...

start=1; % Start-Zeile zum Auslesen der Werte aus der Matrix
ende=0; % Letzte-Zeile zum Auslesen der Werte aus der Matrix
p=1; % Variable als Abbruchbedingung des Struct-Arrays

while p ~= length(FTire)+1
   
    ende=ende+FTire(p).size;  
   
    FTire(p).matrix=cell2mat(A(start:ende,:));
     
    start=ende+1;
   
    p=p+1;
   
end

toc


Habe meinen Matlab code nochmals unten angehängt.


SimOptions stehen schon in der Funktion.
Code:

simOptions = simset('SrcWorkspace','current');
 


Release ist R2013b

die Function [F_sim] soll ja mit den Parametern das Ergebnis an ydata angleichen? aber aus irgend einem Grund tut es das nicht

_________________

شركة ن.....585;ياض شركة ت.....585;ياض
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.