Verfasst am: 05.10.2009, 15:10
Titel: Inhalt einer Datei teilweise löschen
Hallo zusammen,
ich habe folgendes Problem:
Zu Beginn habe ich eine ATS - Datei (Magnetotellurische Messung).
Bei dieser Datei beinhalten die ersten 1024 Byte den Header, anschließend kommen die gemessenen Rohdaten.
Das Einlesen der Daten und Teile des Headers habe ich hinbekommen. Nun will ich aber nur die ersten x Daten behalten und den Rest aus der Datei löschen.
Bisheriges Vorgehen:
Daten in Array einlesen ( ca. 10*10^6 Zeilen, 5 Spalten )
Neuen Array erstellen, der nur die ersten x Zeilen obigen arrays enthält.
OriginalDatei kopieren
Kopierte Originaldatei öffnen
Mit fseek zur Position 1024 springen und die neuen Daten einfügen. Leider ist die Datei trotzdem so groß wie vorher, da die restlichen Daten nicht abgeschnitten werden.
Aufgrund der Formatierung der Datei ist es mir nicht möglich einfach einen Editor zu nehmen, oder eine neue Datei zu erstellen und den Header reinzukopieren.
Bisheriger Code:
Code:
%atsreadf: reads some headerinformation and raw data from ats-file to
%variables datalf2,hlf2
clearall disp('start atsreadf');
datalf2=[];
hlf2=[];
channels=[];
types=[];
i=5;
disp('read lf2');
while i>0 switch i %promt to enter channeltype
case5
fileo = input('Input filename Ex serie (press return to skip): ','s');
case4
fileo = input('Input filename Ey serie (press return to skip): ','s');
case3
fileo = input('Input filename Hx serie (press return to skip): ','s');
case2
fileo = input('Input filename Hy serie (press return to skip): ','s');
case1
fileo = input('Input filename Hz serie (press return to skip): ','s');
k=input('display values (y/n)','s');
k=double(k);
if k==121 format short eng; %displays headerinfo(4 values) followed by the first 3 values of data for each band and channel:
ifisempty(hlf2)
i=1;
elsedisp(hlf2);
disp(datalf2(1:5,:)); % left to right: Ex Ey Hx Hy Hz end;
if i==1 disp('no files read');
end;
end;
disp('end of sfatsreadf.m');
disp('start atswrite');
Datenmenge=input('Anzahl der zu behaltenden Datenpunkte: ');
% Datenmenge= while i>0 switch i %promt to enter channeltype
case5
fileo = input('Input filename Ex serie (press return to skip): ','s');
case4
fileo = input('Input filename Ey serie (press return to skip): ','s');
case3
fileo = input('Input filename Hx serie (press return to skip): ','s');
case2
fileo = input('Input filename Hy serie (press return to skip): ','s');
case1
fileo = input('Input filename Hz serie (press return to skip): ','s');
end;
x = 0;
y = double(fileo);
k=input('display values (y/n)','s');
k=double(k);
if k==121 format short eng; %displays headerinfo(4 values) followed by the first 3 values of data for each band and channel:
sorry nächstes mal folgt der Code in einer txt-Datei.
Leider kann ich eben nicht den kompletten Header einlesen und dann einfach eine neue Datei anlegen und dann in diese schreiben. Überschreiben klappt indofern, das der alte Header bestehen bleibt und ddie neuen Daten folgen, allerdings bleiben die alten Daten, die nicht überschrieben werden stehen.
Die Daten sind als LONGINT Binärwert, nach INTEL Ordnung gespeichert ( Aus dem Handbuch )
hab erstmal nur grob angeschaut, ich brauche etwas mehr Zeit um zu verstehen, was dein Programm macht
Kannst du vielleicht in Worten beschreiben, was du in Code versuchst zu erreichen.
In zeilen 112-114 machst die Datei nur in Lesemodus auf, obwohl du etwas Darauf-schreiben versuchst.
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
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.