Verfasst am: 20.06.2012, 14:56
Titel: Erste Zeile eines Textfiles (ASCII) löschen
Hallo ihr Matlabgötter,
ich habe ein Problem und hab es zwar lösen können aber die Performance ist katastrophal. Ich habe lauter Bilder die von meiner Messsoftware als Textfile gespeichert werden. In jedem Bild-Textfile steht oben in der ersten Zeile Infos zu dem Bild von dem Programm (Bildnummer usw.) welche ich für die Verarbeitung in Matlab oder anderen Bildbearbeitungsprogrammen nicht brauche bzw. es stört weil ich das Bild als Text-image nicht öffnen kann. Ich habe es schon hinbekommen das ich das File auslese sprich die reine Bildmatrix auslese und in ein neues Textfile ohne störenden Text reinschreibe. Das Funktioniert auch schon jedoch braucht das Performance weil er Pixel für Pixel liest und kopiert bzw. schreibt und ich habe über 500 Bilder zu bearbeiten. Gibt es denn nicht die Möglichkeit das man ein Textfile öffnet und einfach nur die erste Zeile rauslöscht??
Hier ein Screenshot einer solchen Text-image Datei mit der störenden Zeile und mein Quellcode wie ich das bis jetzt gelöst habe füge ich auch bei (der Quellcode ist im Moment nur für ein einzelnes Bild ohne Schleife für viele Bilder eines Ordners).
Vllt kann mir jemand helfen denn ich finde irgendwie nicht passendes.
Nochmal die Fragestellung : Kann man aus einem Textfile was löschen und somit quasi das File bearbeiten und überschreiben ohne was rauskopieren zu müssen.
Verfasst am: 26.06.2012, 15:00
Titel: Re: Erste Zeile eines Textfiles (ASCII) löschen
Hallo Maxthemachine,
Wie ist denn der Teil definiert, den du abtrennen möchtest? Die erste Zeile? Dann würde ich zunächst die File-Position suchen, und den Rest als Byte-Stream einlesen, so dass man sich die zeitraubende Umwandlung String->Zahl->String sparen kann:
Code:
fid = fopen(FileName, 'r');
if fid < 0 error('Cannot open file for reading: %s', FileName);
end
dummy = fgetl(fid); % Skip first line
data = fread(fid, Inf, 'uint8=>uint8');
fclose(fid);
fid = fopen(NewFileName, 'w');
if fid < 0 error('Cannot open file for writing: %s', NewFileName);
end fwrite(fid, data, 'uint8');
fclose(fid);
Falls die Files riesig sind, z.B. 500 MB, ist es effizienter, das Input-File blockweise zu kopieren, also z.B. immer nur 64kB Blöcke einzulesen und zu schreiben, bis FREAD nichts mehr findet.
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
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.