|
|
Laufzeitoptimierung - für Einlesen der letzten Textzeile? |
|
Mmmartina |

Forum-Meister
|
 |
Beiträge: 745
|
 |
|
 |
Anmeldedatum: 30.10.12
|
 |
|
 |
Wohnort: hier
|
 |
|
 |
Version: R2020a
|
 |
|
|
 |
|
Verfasst am: 11.11.2015, 12:08
Titel: Laufzeitoptimierung - für Einlesen der letzten Textzeile?
|
 |
|
 |
|
Hallo,
heute mal eine Optimierungsfrage.
Gegeben:
Ordner mit unterschiedlich vielen Textdateien (Ascii).
Es sind nur die Textdateien für die weitere Verarbeitung interessant, welche in der letzten Zeile der jeweiligen Datei eine error-anzahl != 0 eingetragen haben.
Beispiel:
Die Zeilenanzahl ist von Datei zu Datei unterschiedlich!
Gibt es in Matlab eine Art Zeilenanzahlrückgabe, ohne die gesamte Datei einzulesen? Also nur eine Art Scan?
Somit könnte ich in textscan die Headerzeilenanzahl auf [Zeilenzahl-1] setzten.
Oder eine Funktion, mit der ich elegant nur auf die letzte Zeile zugreifen kann?
feof bringt mir leider nicht den Zugriff auf die letzte Zeile.
Derzeit lese ich alles per textscan ein, verwerfe dann alles, wenn Schlüsselwort nicht in letzter Zeile enthalten, oder behalte alles, da ich damit arbeiten muss, wenn Schlüssel enthalten.
Ich kann mittels fgetl natürlich durchparsen und erst die letzte Zeile auswerten. Aber die Zeilen [1:end-1] sind ja überflüssig. Zumal so in jeder Zeile der Vergleich auf das Schlüsselwort "error" hinzukommt.
Den Lesezugriff auf jede Zeile habe ich mit beiden Methoden.
Auch für dlmread müsste ich wissen, wie viele Zeilen ich überspringen muss. Denn nur die letzte Zeile enthält als ersten Wert eine Ziffer.
Übersehe ich eine Möglichkeit?
_________________
LG
Martina
"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 12.11.2015, 00:18
Titel:
|
 |
Hallo,
eine Möglichkeit:
Ich bin gespannt, ob das was hinsichtlich Geschwindigkeit bringt und wieviel.
Vielleicht kann man lastline sogar analysieren, ohne in char umzuwandeln.
Falls die letzte Zeile immer "x errors " lautet, ginge z.B.
Grüße,
Harald
|
|
|
Mmmartina |
Themenstarter

Forum-Meister
|
 |
Beiträge: 745
|
 |
|
 |
Anmeldedatum: 30.10.12
|
 |
|
 |
Wohnort: hier
|
 |
|
 |
Version: R2020a
|
 |
|
|
 |
|
Verfasst am: 12.11.2015, 10:04
Titel:
|
 |
Guten Morgen,
danke für die Antwort. Diese Möglichkeit hatte ich tatsächlich nicht auf dem Schirm!
Leider bringt es aber hinsichtlich Laufzeit nix, sondern es wird sogar langsamer.
Ich hab jetzt sogar nur mal das reine (fopen+textscan+fclose) der Variante memmapfile gegenübergestellt. Also _ohne_ irgendwas mit den Daten zu machen. Und auch da ist die erste Variante mit Textscan schneller.
Bei ca. 450files nur für Einlesen jeweils:
Textscan = [0,089 ... 0,11]sec
memmapfile = [0,21 ... 0,25]sec
Also vernachlässigbar. Da "frisst" die restliche Verarbeitung der gewählten Files dann deutlich mehr.
Vermutlich ist mein Ausgangspunkt, dass es doch umständlich und somit zeitfressend sein _muss_, wenn so viele Zeilen umsonst durchsucht werden, nicht korrekt.
_________________
LG
Martina
"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 12.11.2015, 10:26
Titel: Re: Laufzeitoptimierung - für Einlesen der letzten Textzeil
|
 |
Hallo Mmmartina,
Versuche mal dies:
Läuft das? Falls eine oder mehrere leere Zeilen am File-Ende stehen:
Gruß Jan
[EDITED, Jan] Argumente fon
fseek
waren vertauscht.
Zuletzt bearbeitet von Jan S am 14.11.2015, 01:03, insgesamt einmal bearbeitet
|
|
|
Mmmartina |
Themenstarter

Forum-Meister
|
 |
Beiträge: 745
|
 |
|
 |
Anmeldedatum: 30.10.12
|
 |
|
 |
Wohnort: hier
|
 |
|
 |
Version: R2020a
|
 |
|
|
 |
|
Verfasst am: 13.11.2015, 15:12
Titel:
|
 |
|
 |
|
Hallo Jan,
jetzt komm ich endlich dazu, deinen Vorschlag mal zu testen.
Dein Vorschlag funktioniert so nicht, sondern bringt für die fseekzeile:
??? Error using ==> fseek
Invalid origin.
Was ich seltsam finde, da ich die Anleitung dazu so verstehen würde, dass man eben tatsächlich z.B. -20 einsetzen könnte. Aber scheinbar akzeptiert er für origin nur bof, cof und eof.
Wenn ich die Zahl aber unter offset eintrage, funzt es.
Nun muss ich den Offset aber größer machen, da die Anzahl der Fehler natürlich mehrstellig sein könnte. Daher ist die Zeilenlänge der letzten Zeile nicht fest. Bewirkt, dass ich teilweise auch die vorletzte Zeile durchsuche, aber das ich immer noch besser, als von Anfang an zu suchen.
Laufzeitmäßig bringt es auch tatsächlich unterschiede! Wie zu erwarten vor allem, wenn viele lange Dateien vorhanden sind!
Sehr schön, genau das, was ich gesucht habe!
_________________
LG
Martina
"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 14.11.2015, 01:05
Titel:
|
 |
Hallo Mmmartina,
Ja, ich hatte die letzten beiden Argumente von
fseek
vertauscht.
Gruß, Jan
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|