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

Manipulation einzelner Zeilen/Werte in einer Ascii-Datei

 

Asterix
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 11.03.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.03.2015, 13:01     Titel: Manipulation einzelner Zeilen/Werte in einer Ascii-Datei
  Antworten mit Zitat      
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 Rolling Eyes Hat da jemand zufällig eine Idee??

Vielen Dank im Voraus!
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: 12.03.2015, 15:40     Titel: Re: Manipulation einzelner Zeilen/Werte in einer Ascii-Datei
  Antworten mit Zitat      
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
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
.





 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.