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

Erste Zeile eines Textfiles (ASCII) löschen

 

Maxthemachine
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 05.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.06.2012, 14:56     Titel: Erste Zeile eines Textfiles (ASCII) löschen
  Antworten mit Zitat      
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.

Danke schonmal im voraus

Code:

o=fopen('B00101.txt');
text=textscan(o, '%s', 16,'delimiter', ' ');
zahlen=textscan(o,'%d');
z=zahlen{1,1};
matrix=reshape(z,[512,704]);
matrixd=transpose(matrix);
[m,n]=size(matrixd);
write=fopen('W00101.txt', 'wt');
for i=1:1:m
    for j=1:1:n
       fprintf(write, '%d', matrixd(i,j));
       fprintf(write,'\t');
   end
   fprintf(write,'\n');
end

fclose(write);


Text-image mit störender ersten Zeile.JPG
 Beschreibung:

Download
 Dateiname:  Text-image mit störender ersten Zeile.JPG
 Dateigröße:  114.36 KB
 Heruntergeladen:  553 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.06.2012, 10:15     Titel:
  Antworten mit Zitat      
Hallo,

Warum verwendest du nicht TEXTSCAN mit 'headerlines' auf 1, um die Datei einzulesen? Das Löschen der ersten Zeile erscheint mir unnötig aufwändig.

Grüße,
Harald
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: 26.06.2012, 15:00     Titel: Re: Erste Zeile eines Textfiles (ASCII) löschen
  Antworten mit Zitat      
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
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.