|
|
Manipulation einzelner Zeilen/Werte in einer Ascii-Datei |
|
Asterix |

Forum-Newbie
|
 |
Beiträge: 1
|
 |
|
 |
Anmeldedatum: 11.03.15
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.03.2015, 13:01
Titel: Manipulation einzelner Zeilen/Werte in einer Ascii-Datei
|
 |
|
 |
|
Hallo liebe Leute!
Ich hab da ein kleines Problem:
Und zwar möchte ich einzelne Zeilen bzw. Werte über Matlab in einer Ascii Datei manipulieren, OHNE die gesamte Datei zu speichern/schreiben.
Hintergrund ist folgender: ich steuere mit Matlab ein externes Programm, dessen Input-Daten im Ascii Format vorliegen. Wenn nun bestimmte Kriterien im Laufe der Berechnung erfüllt werden, wird der Rechenlauf angehalten, einzelne Werte in der Input-Datei modifiziert und der Rechenlauf fortgesetzt. Da es sich um recht große Ascii-Dateien handelt (~500 MB) und das Schreiben der Ascii mit Matlab recht zeitintensiv ist, würde ein kompletter Rechenlauf ewig dauern.
Die Idee ist nun, die gesamte Ascii zu Beginn einmal einzulesen und lediglich die betroffenen Werte in der Datei zu ändern, ohne dass die komplette Datei neu geschrieben werden muss.
Leider scheitert es massiv an der Umsetzung Hat da jemand zufällig eine Idee??
Vielen Dank im Voraus!
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 12.03.2015, 15:40
Titel: Re: Manipulation einzelner Zeilen/Werte in einer Ascii-Datei
|
 |
|
 |
|
Hallo Asterix,
Das geht prinzipiell nur dann, wenn man die Anzahl der Zeichen nicht ändert. Man kann also aus einer "12.34" eine "13.57" machen oder auch Leerzeichen einfügen, aber ein "3.14159265" lässt sich nicht in eine ASCII-Datai hineinschieben.
Auch wenn Du die Datei in einem "Memory Mapped File" speicherst, also im RAM hältst, ist das Einschieben von Zeichen zeitraubend, denn auch hier muss im Durchschnitt ein Viertel GB verschoben werden.
Das iterative Ändern von Inhalten in einem ASCII-File ist einfach grundsätzlich eine sehr ineffiziente Lösung. Es ist auch nicht trivial die richtige File-Position für eine Änderung zu finden. Dazu müsste man noch einen Index-Vektor im Speicher halten, der die Anfänge jeder Zeichenkette speichert.
Mit einem Binär-File ist das dagegen trivial, denn man kann das File öffnen, zu der bestimtmen Stelle per FSEEK spulen und die Werte neu schreiben. Jede Zahl hat die gleiche Anzahl von Bytes und es muss nichts verschoben werden.
Der ASCII-File-Ansatz ist also prinzipiell schlecht. Wenn Du ihn unbedingt verfolgen willst, lohnt es sich, die Schreib-Vorgänge zu "cachen": Erstelle ein Neues File, in dem nur die Änderungen stehen: Index und neuer Wert. Dann kann man am Schluß das ASCII-File einmal einlesen, alle Änderungen durchführen, und es neu wieder ausschreiben.
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.
|
|