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

header info in Spalte schreiben

 

stevorino
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 95
Anmeldedatum: 06.12.11
Wohnort: ---
Version: R2007b
     Beitrag Verfasst am: 03.02.2014, 10:21     Titel: header info in Spalte schreiben
  Antworten mit Zitat      
Hallo,

Ich habe eine .asc Datei, in der zwischen den Werten immer wieder header vorkommen, allerdings nicht im gleichen Abstand.

Die Datei sieht in etwa so aus:

***
*A : 24
*B : 46
*C : 33
***
32 44 55
22 21 89
32 12 75
54 27 85
***
*A : 22
*B : 36
*C : 29
***
44 99 64
43 26 35
76 43 23
***
*A : 22
*B : 25
*C : 62
***
45 55 52
75 34 76
23 54 23
76 38 35
85 35 85
...

Ich möchte nun die Werte einlesen.
Für den ersten header + folgende Werte schaffe ich das auch:

Code:

fid=fopen('C:\Test.asc','r');
data=textscan(fid,'%f %f %f,'headerlines',5);
 


Allerdings weiß ich nicht, wie ich die weiteren header anspreche.
Mein Ziel ist es, dass am Ende nur die Werte untereinander stehen, und die headerinfo in extra Spalten, also:

32 44 55 24 46 33
22 21 89 24 46 33
32 12 75 24 46 33
54 27 85 24 46 33
44 99 64 22 36 29
43 26 35 22 36 29
76 43 23 22 36 29
45 55 52 22 25 62
75 34 76 22 25 62
23 54 23 22 25 62
76 38 35 22 25 62
85 35 85 22 25 62
...

Hat jemand einen Vorschlag, wie ich das lösen könnte?

Viele Grüße,
Stno
Private Nachricht senden Benutzer-Profile anzeigen


stevorino
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 95
Anmeldedatum: 06.12.11
Wohnort: ---
Version: R2007b
     Beitrag Verfasst am: 04.02.2014, 15:48     Titel:
  Antworten mit Zitat      
Hallo,

Ich schaffe es nun, dass nur die Werte untereinander in ein neues File geschrieben werden, und die headers gelöscht werden.

Code:
readData=fopen('C:\test.asc', 'r');
writeData=fopen('C:\test1.asc', 'w');
while feof(readData)==0
    currLine=fgetl(readData);
    if isempty(strfind(currLine,'*') )
         fprintf(writeData,'%s\n',currLine);
    end
end
fclose(readData);
fclose(writeData);


Allerdings habe ich leider noch keine Lösung, wie ich die Werte aus den headern in Extra-Spalten schreiben kann.

Hat jemand einen Vorschlag, wie ich das lösen könnte?

Viele Grüße,
Stno
Private Nachricht senden Benutzer-Profile anzeigen
 
stevorino
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 95
Anmeldedatum: 06.12.11
Wohnort: ---
Version: R2007b
     Beitrag Verfasst am: 12.02.2014, 11:25     Titel:
  Antworten mit Zitat      
Hallo,

Leider habe ich dieses Problem noch nicht gelöst.

Ein anderer Ansatz wäre es, nur die Zeilen unter einem header einzulesen, wenn im header eine bestimmte bedingung erfüllt wird (z.B. *B : 36).

Dann würde die Matrix so aussehen:

44 99 64
43 26 35
76 43 23

Hat jemand eine Idee, wie ich das in meinen Code einbauen könnte?

Viele Grüße,
Stno
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 12.02.2014, 16:50     Titel:
  Antworten mit Zitat      
Zitat:

Allerdings weiß ich nicht, wie ich die weiteren header anspreche.
Mein Ziel ist es, dass am Ende nur die Werte untereinander stehen, und die headerinfo in extra Spalten, also:

Hallo,
ich denke so, die Dateinamen bei FOPEN bitte anpassen:
Der Code bezieht sich auf das obere Text-Beispiel
Code:

fidr = fopen('headertext.txt');
fidw = fopen('headerall.txt', 'wt+');
%
headerstart = false;

while(~feof(fidr))
   txtline = fgetl(fidr);
   
   if strcmp(txtline,'***')
      headerstart = ~headerstart;
   end
   
   if headerstart
      header = textscan(fidr, '*%*[ABC] : %d', 3, 'delimiter','\n');
      header = [header{:}];
   else
      data   = textscan(fidr,'%d %d %d','delimiter','\n','CollectOutput', true);
      data   = [data{:}];
      header = repmat(header',size(data,1),1);
      data   = cat(2, data, header);
      %
      % rausschreiben
      for k = 1:size(data,1)
         newline = sprintf('%d\t', data(k,:));
         fprintf(fidw, '%s\n', newline(1:end-1));
      end
   end
   
end

fclose(fidr);
fclose(fidw);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
stevorino
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 95
Anmeldedatum: 06.12.11
Wohnort: ---
Version: R2007b
     Beitrag Verfasst am: 13.02.2014, 11:22     Titel:
  Antworten mit Zitat      
Hallo denny,

Danke für die Antwort.
Ich werde das gleich mal ausprobieren.

Viele Grüße,
Stno
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.