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

textscan, Probleme mit Delimiters und leeren Zellen

 

User123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2012, 11:58     Titel: textscan, Probleme mit Delimiters und leeren Zellen
  Antworten mit Zitat      
Hallo zusammen,

erst mal ein dickes Lob an das Forum, habe schon viele nützliche Sachen hier nachschlagen können, doch jetzt komme ich nicht mehr weiter.

Ich versuche die Datei http://celestrak.com/SpaceData/sw19571001.txt mit textscan einzulesen.

Dabei verwende ich folgenden Code:

Code:
[Datendatei,Pfad]=uigetfile('*.txt','Wählen Sie die Datendatei');
cd(Pfad);
fid=fopen(Datendatei);
fmt='%4d %2d %2d %4*d %2*d %2*d %2*d %2*d %2*d %2*d %2*d %2*d %2*d %3*d %2d %2d %2d %2d %2d %2d %2d %2d %2d %3*f %1*d %3*d %5*f %1*d %5*f %5*f %5f %5f %5f';
data=textscan(fid,fmt,'delimiter',' ','MultipleDelimsAsOne',2,'headerlines',19);
fclose(fid);


Ich benötige nur einige Spalten (siehe Code). Ergebniss ist, dass die Spalten soweit stimmen, mir aber zuviele Zeilen ausgegeben werden (20.632 anstatt von 20.000 die es eigentlich nur sein dürften), das heißt irgendwo ist ein Fehler und die Zellen werden nicht klar von einander getrennt. Wenn ich mir die ausgewerteten Daten angucke sehe ich auch das zwischendurch Werte auftauchen, die nicht in das Schema passen, also falsch eingelesen wurden.

Meiner Meinung nach liegt das Problem enwtweder daran, dass ich die variierenden Delimiter (mal 1 mal 2 Leerzeichen) im Code falsch umsetze, vereinzelt vorkommende leere Zellen das Durcheinander verursachen oder ich den Zeilenumbruch am Ende einer jeden Zeile mitberücksichtigen muss. Integriere ich die Option 'EndOfLine','\n', werden mir die richtigen Werte ausgegeben, aber nur die der ersten Zeile. Außerdem geht das nur solange gut solange keine leeren Zellen auftauchen. Sobald leere Zellen vorhanden sind, kommt textscan durcheinander.

Ich hoffe jemand weiß eine Antwort.

Vielen Dank


User123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2012, 13:12     Titel:
  Antworten mit Zitat      
kleines Update:

mit folgendem Code

Code:
[Datendatei,Pfad]=uigetfile('*.txt','Wählen Sie die CelesTrak Datendatei');
cd(Pfad);
fid=fopen(Datendatei);
fmt='%d %d %d %*d %*d %*d %*d %*d %*d %*d %*d %*d %*d %*d %d %d %d %d %d %d %d %d %d %*f %*d %*d %*f %*d %*f %*f %f %f %f';
data=textscan(fid,fmt,'delimiter',' ','MultipleDelimsAsOne',2,'headerlines',19);
fclose(fid);


komme ich zumindest schon mal auf die richtige Anzahl an Zeilen, jetzt muss ich nur noch das Problem mit den Leerstellen lösen. Bsw. das textscan irgendwie beibringen.
 
User123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2012, 13:58     Titel:
  Antworten mit Zitat      
Das Problem ist ja jetzt, dass ich in der Datei die Option MultipleDelimsAsOne aktivieren muss, da sowohl ein als auch zwei Leerzeichen genutzt werde.

Gleichzeitig bestehen aber auch leere Felder aus mehreren Leerzeichen, sodass textscan diese als Delimiter erkennt und am "Ende" der Zeile Inhalte fehlen, die dann verständlicher Weise mit NaN aufgefüllt werden.

Weiß jemand ob es eine Möglichkeit gibt diese "Doppelbelegung" zu umgehen?

Vielen Dank.
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 03.07.2012, 14:37     Titel:
  Antworten mit Zitat      
Hallo User123,

Verstzehe ich das richtig: Zwei Leerzeichen können einerseits in einzelner Trenner sein, aber auch ein leeres Daten-Feld? In dem Fall ist die Bearbeitung einfach: Lösche das Daten-File, weil man leider nichts mehr damit anfangen kann. Die wichtige Information, zu welcher Spalte ein Element gehört, ist dann nämlich verloren gegangen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
User123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2012, 14:49     Titel:
  Antworten mit Zitat      
Hallo Jan,

erst mal vielen Dank für die Antwort. Ich glaube prinzipiell hast du mit deiner Aussage recht und wenn sich das durch die ganze Datei ziehen würde wären die Daten wirklich nicht mehr zuordbar.

Allerdings taucht dieses Phänomen ja nur bei den ca. letzten 30 Zeilen auf, da hier noch nicht alle Daten eingetragen sind (siehe Datei, den Link hatte ich oben gepostet).

Meine Frage ist jetzt ob ich textscan das irgenwie beibringen kann, leere Felder zu erkennen und zu überspringen, oder ob ich bei den betroffenen Feldern zuerst manuell eine 0 in die Datei schreiben muss.
 
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.