Matroids Matheplanet Forum Index
Moderiert von mire2
Mathematische Software & Apps » Matlab » Textfile einlesen mit unterschiedlich langen Header
Autor
Ausbildung Textfile einlesen mit unterschiedlich langen Header
Markus_Sw
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 21.03.2015
Mitteilungen: 80
  Themenstart: 2020-12-11

Hallo, ich möchte gerne Textfiles einlesen, bei denen der Header unterschiedlich lang ist, diesen möchte ich überspringen. Die Files sehen so aus: #.. #blabla #blabla.... #blabla... So geht das ca. 50-60 Zeilen lang, danach kommen dann meine Messwerte(29 Spalten, unterschiedlich Zeilenlänge), wie kann ich sagen, dass ich das alle Zeilen überspringen möchte die mit "#" anfangen? Danke Gruß Markus


   Profil
rlk
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 16.03.2007
Mitteilungen: 11603
Wohnort: Wien
  Beitrag No.1, eingetragen 2020-12-11

Hallo Markus_Sw, eine sehr ähnliche Frage wurde unlängst in https://matheplanet.at/matheplanet/nuke/html/viewtopic.php?topic=250049 beantwortet. Servus, Roland


   Profil
Markus_Sw
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 21.03.2015
Mitteilungen: 80
  Beitrag No.2, vom Themenstarter, eingetragen 2020-12-12

Hallo Roland, danke für den link, leider funktioniert das bei mir nicht.Bei dem Befehl cell2mat, meckert er, liegt wahrscheinlich daran das ich ein paar „nan“ in der 1.Reihe (und auch sonst zwischendurch )stehen habe? Wenn ich den Befehl cell2mat lösche, bekomme ich als data ein cell als Ergebnis in dem am Anfang 0xsingle steht, und irgendwo in der Mitte die Daten stehen. Kannst du mir erklären was diese Weile Schleife genau macht? Danke und Gruß Markus


   Profil
Folgende Antworten hat der Fragensteller vermutlich noch nicht gesehen.
rlk
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 16.03.2007
Mitteilungen: 11603
Wohnort: Wien
  Beitrag No.3, eingetragen 2020-12-15

Hallo Markus_Sw, hier ist das von Majoka in https://matheplanet.at/matheplanet/nuke/html/viewtopic.php?topic=250049&post_id=1820048 vorgeschlagene Programm. \sourceon Matlab \numberson fid = fopen('dateiname.txt'); data = []; while 1 line = fgetl(fid) if line == -1 break; end if ~isempty(line) C = textscan(line, '%f32%f32%f32%f32%f32%f32%f32%f32%f32%f32%f32%f32%f32%f32%f32%f32%f32%f32'); data = [data; cell2mat(C)]; end end data \sourceoff In der while-Schleife wird eine Zeile nach der anderen in die Variable line eingelesen und falls sie nicht leer ist wird versucht, die Daten mit textscan (Zeilen 10-13) zu extrahieren und an das Feld data anzuhängen. Ich würde es etwas anders machen, die folgende Funktion ist ungetestet: \sourceon Matlab \numberson function mData = read_file_skipping_header(sFilename, iColumns) iFid = fopen(sFilename, 'r'); if (iFid == -1) error('cannot read %s\n', sFilename); end iPos = ftell(iFid); sLine = fgetl(iFid); while (sLine(1) == '#') iPos = ftell(iFid); sLine = fgetl(iFid); end iStatus = fseek(iPos, 'bof'); if (iStatus == -1) error('cannot seek position %d in %s\n', iPos, sFilename); end mData = fscanf(iFid, '%f', [iColumns, Inf]); fclose(iFid); end \sourceoff In den Zeilen 6-11 werden Zeilen gelesen und überprüft, ob sie mit # beginnen. Das ist etwas umständlich, weil Matlab keine Schleife mit Test am Ende anbietet. Nach dem Verlassen der Schleife wurde bereits die erste Zeile mit Daten gelesen, deshalb wird die Position das Zeilenbeginns in iPos gespeichert und die Datei in Zeile 12 auf diese Stelle zurückgespult. In Zeile 16 werden dann endlich die Daten gelesen. Die Erkennung und Behandlung von Fehlern bei den Aufrufen von fgetl überlasse ich Dir. Servus, Roland


   Profil

Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]