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

Bestimmte Zeilen aus Textfile einlesen

 

Jan S
Moderator

Moderator


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

Ich empfehle nochmal den Code, den ich bereits gepostet habe.
Haralds "data = [data; cell2mat(temp)];" hat das Problem, dass es das Array "data" immer wieder vergrößert, was speichertechnisch sehr aufwändig ist - siehe "pre-allocation".

Zitat:
also ich habe das mit der Vektorgröße hinbekommen, aber bisher wird nur die erste Zahl nach dem | eingelesen. Die zweite Zahl usw. wird aber nicht eingelesen, weil dazwischen ja immer noch ein | kommt.

Das verstehe ich nicht. Dies funktioniert:
Code:
s = ['| 3.8889e-04|  4.729e-03|  2.998e-01|  4.834e-03|  1.407e+00|  5.247e-02| ', ...
   '-3.638e-02|  1.086e+00| 5.798e-01| 3.401e+02|  1.315e+01|  3.333e-03|'];
v = sscanf(s, '|%f');
% >> v is a [12 x 1] vector!


Also nochmal:
Code:
fid = fopen('daten.txt'); % öffne Datei
if fid == -1, error('Cannot open file for reading.'); end

numberOfElements = 12;  % Set as needed
maxNumberOfLines = 100000;  % No error if to small, but slow

data = zeros(numberOfElements, maxNumberOfLines);  % Pre-allocate
cursor = 0;
while ~feof(fid)
    aLine = fgetl(fid);  
    if strncmpi(aLine, '|', 1)
        cursor = cursor + 1;
        data(:, cursor) = sscanf(aLine, '|%g');
    end
end
data = data(:, 1:cursor);  % Crop

Bitte erkläre nocheinmal, was an diesem Programm genau nicht funktioniert.

Eine Antwort auf meine Frage wäre hilfreich:
Zitat:
Kannst Du vorher abschätzen oder sogar genau wissen, wieviele Zeilen eingelesen werden?

Dann könnte ich bei Bedarf weiter Allocation-Strategien zeigen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen


01detlef
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 07.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2012, 14:14     Titel:
  Antworten mit Zitat      
Hallo Jan,

also es gibt immer die Fehlermeldung mit der Datei, die ich gepostet habe:

??? Subscripted assignment dimension mismatch.

Error in ==> Einlesen_log2 at 13
data(:, cursor) = sscanf(aLine, '|%g');

detlef
Private Nachricht senden Benutzer-Profile anzeigen
 
01detlef
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 07.05.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2012, 14:20     Titel:
  Antworten mit Zitat      
ach sorry mein Fehler....es geht!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

@ Jan:
wie aufwändig die Verschiebung im Speicher im Vergleich zur Gesamtlaufzeit ist, hängt entscheidend davon ab, wieviele solcher Zeilen in der Datei vorhanden sind und ob sie in Blöcken vorliegen.
Es sollte gegebenenfalls kein Problem sein, meinen Code so umzuschreiben, dass er (blockweise) vorbelegt.

@ detlef:
Wird die Datei nun auch schnell genug gelesen, oder gibt es noch Performance-Probleme? Falls es noch Probleme gibt, bitte eine Datei posten, die wenigstens 1000 Zeilen hat (besser 10000) und die Struktur deiner Originaldatei hat, damit man eine vernünftige Grundlage zum Testen von Code hat.

Grüße,
Harald
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: 17.06.2012, 22:05     Titel:
  Antworten mit Zitat      
Hallo Harald,

Zitat:
wie aufwändig die Verschiebung im Speicher im Vergleich zur Gesamtlaufzeit ist, hängt entscheidend davon ab, wieviele solcher Zeilen in der Datei vorhanden sind und ob sie in Blöcken vorliegen.
Es sollte gegebenenfalls kein Problem sein, meinen Code so umzuschreiben, dass er (blockweise) vorbelegt.

Genau.
Wenn Detlef sagt, dass das Programm bei nur 1e6 Zeilen stundenlang läuft, scheint eine blockweise Pre-Allocation sinnvoll.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.