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

Datei mit 6 Headerzeilen und Daten einlesen

 

Kopi
Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 28.09.08
Wohnort: weit weg von der Heimat
Version: R2020b
     Beitrag Verfasst am: 17.10.2020, 17:36     Titel: Datei mit 6 Headerzeilen und Daten einlesen
  Antworten mit Zitat      
Hallo,

vielleicht könnt Ihr mir weiterhelfen. Ich habe mehrere Dateien mit Radardaten die immer gleich aufgebaut sind (--> Erläuterung):

ncols 100 --> Wieviel Spalten sind ab Zeile 7
nrows 100 --> Wieviel Zeilen sind ab Zeile 7
xllcorner 123456 --> Beginn Raster x - Koordinate
yllcorner 7896541 --> Beginn Raster y - Koordinate
cellsize 500 --> Kantenlänge eines Rasters
NODATA_value -9999 --> Raster ohne Daten
Zeilen mit ganzen Zahlen (Matrix 100x100)

Ob ich mit dem folgenden Code die richtige Wahl getroffen habe, um die Dateien richtig zu lesen, sein noch dahingestellt.

Code:
fid = fopen([path file]);
fgetl(fid);
s=char(fread(fid));
fclose(fid);



Jetzt wollte ich die Daten mit sscanf lesen. Leider kann der Befehl keine Strings lesen. Muss er auch nicht. Ich muss es nur schaffen, dass die Strings in den ersten sechs Zeilen übersprungen werden.

Code:
sep=' ';
fmt=(['%*s' sep '%d']);
[Test,A] = sscanf(s,[fmt '\n'],[1 5]);


Mit diesem Code werden die Zahlen der zweiten bis zur letzten Zeile eingelesen, nicht aber die erste. Wenn ich die 1 gegen eine 0 ersetze, ist die Variable TEST leer.

Wie kann ich auch die erste Zeile einlesen?

Wie werden die Daten ab Zeile 7 am besten aus "s" gelesen. Dafür müsste ich wissen, welche Position die -9999 hat. Mit einer logischen Funktion wie

Code:
g = ['-''9''9''9''9'];
t = s==g;


bekomme ich zwar meine 1 in einer Matrix aber leider sind immer noch Nullen dazwischen, die ich mir nicht erklären kann.

Der Code soll variabel sein. Deswegen möchte ich die ersten 6 Zeilen einlesen und nicht einfach ab der Zeile 7 die Daten einlesen.

Grüße
Kopi

2000_01_01_00_25_KOM_cccc.txt
 Beschreibung:
Der Name der Datei lautete *.asc. Habe diesen in *.txt geändert, um die Datei hochladen zu können.

Download
 Dateiname:  2000_01_01_00_25_KOM_cccc.txt
 Dateigröße:  21 KB
 Heruntergeladen:  290 mal


Zuletzt bearbeitet von Kopi am 17.10.2020, 18:38, insgesamt 2-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen


Kopi
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 43
Anmeldedatum: 28.09.08
Wohnort: weit weg von der Heimat
Version: R2020b
     Beitrag Verfasst am: 17.10.2020, 17:46     Titel:
  Antworten mit Zitat      
Ich habe den Fehler gefunden. Echt dumm. Die erste Zeile wird beim Einlesen gelöscht mit "fgetl". So kann ich auch nicht die erste Zeile finden.

Könnt Ihr mir beim zweiten Teil der Frage helfen? Wie finde, ich die erste Zahl nach dem Header? Mit dem Folgenden Code lese ich alle Daten ein.

Code:
% Format der Daten, mit Schleife geschrieben
fmt2 = [];
fmt2 = ['%d' sep];
for ii = 1:VALUES(1)-1  
    if ii~=VALUES(1)-1
    fmt2 = [fmt2 '%d' sep];
    else
    fmt2 = [fmt2 '%d'];    
    end    
end

% s(87:91) 1 Zeile nach -9999 --> händisch ermittelt

DATA = sscanf(s(94:end),[fmt2 '\n'],[100 Inf])';
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 - 2024 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.