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

Daten aus txt ab bestimmter Zeile lesen

 

scoobydo
Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 23.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.11.2013, 12:32     Titel: Daten aus txt ab bestimmter Zeile lesen
  Antworten mit Zitat      
Hallo, ich weiss das solche Fragen schon des öfteren gestellt wurden. Nur leider haben mich die Antworten nicht weiter gebracht.

Ich habe eine recht große txt. Datei die ich einlesen möchte.
Dabei sollen die ersten 3 Zeilen übersprungen werden, da dort nur strings drin stehen, der Rest sind double Werte. Mein Versuch sah wie folgt aus:

Code:

file=fopen('P001.DAT');
fgetl(file);
fgetl(file);
fgetl(file);

i=1
z=1;
while z~=5
    B{:,i}=textscan(file,'%f',665970);
   
    i=i+1;
    z=z+1;
end

fclose(file);
 


Die dabei entstehende Zelle hat zwar die richtige Größe, nur leider liest er dabei lediglich die erste Zeile ein und die anderen drei bleiben ohne Inhalt. Würde am liebsten die Daten geschmeidig mit load einlesen. Aber das geht nicht da die Werte in den ersten 3 Zeilen strings sind. Kann man mit load auch Zeilen überspringen, bzw. wie kann man das Problem am einfachsten lösen?

Vielen Dank schon einmal
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 13.11.2013, 12:45     Titel:
  Antworten mit Zitat      
Hallo

das kann man mit TEXTSCAN ganz gut machen, da brauch man auch keine Schleife.
Aber aus dem Code kann ich kein Format deines Texts erkennen.
Also bitte Spaltenanzahl angeben, Wie werden die Werte von einander getrennt usw..
Am besten ein Beispielfile dazu anhängen, ansonsten in der Doku zu TEXTSCAN schauen, dort gibt es sehr viele erläternde Beispiele.
Code:

file=fopen('P001.DAT');

B = textscan(file,'%f', 'HeaderLines' , 3, 'delimiter', ',');

fclose(file);



 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.11.2013, 12:45     Titel:
  Antworten mit Zitat      
Hallo,

du kannst auch die 'HeaderLines'-Option von textscan verwenden.

Mit
Code:
B{:,i}=textscan(file,'%f',665970);
liest du 665970 Doubles.

Kommen danach nochmal Textzeilen oder nicht? Ansonsten sollte in den weiteren Iterationen auch weitere 665970 Doubles gelesen werden - sofern in der Datei so viele stehen.

Falls das nicht weiterhilft: Kannst du die Datei anhängen bzw. falls sie zu groß ist ein kleineres Beispiel machen, anhanddessen man die Problematik nachvollziehen kann?

load ist nicht zum Einlesen von Textdateien gedacht, sondern für .mat-Dateien.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
scoobydo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 23.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.11.2013, 10:28     Titel:
  Antworten mit Zitat      
Schon einmal besten dank für die schnellen Antworten.
Die Version von denny habe ich zuvor schon probiert. Da liest er merkwürdiger weise nur eine Zeile ein und hört dann auf.

Nach den ersten drei Zeilen kommen nur noch Zahlen.
Getrennt sind die Zahlen durch eine unregelmäige Anzahl an Leerzeichen,
das eigentliche Problem ist glaube ich, dass die Zeilen merkwürdig getrennt sind. Denn eigentlich müsste er mir ja wenn die Zeilen wie üblich mit einem Break getrennt sind alles einlesen mit:

Code:

B = textscan(file,'%f \n', 'HeaderLines' , 3);
 


Die Datei hat exklusive den drei string Zeilen am Anfang 1404 Zeilen und 665970 Spalten.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

hänge doch bitte die Datei oder einen Ausschnitt davon an, damit man das Problem nachvollziehen kann.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
scoobydo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 23.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.11.2013, 11:07     Titel:
  Antworten mit Zitat      
Die Datei muss in WordPad geöffnet werden, damit man seine Struktur sieht. In txt sind die Spalten verschoben.

New Text Document (2).txt
 Beschreibung:

Download
 Dateiname:  New Text Document (2).txt
 Dateigröße:  8.28 MB
 Heruntergeladen:  522 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.11.2013, 11:40     Titel:
  Antworten mit Zitat      
Hallo,

die Datei hat nicht 665970 Spalten, sondern insgesamt 665970 Einträge und "nur" 474 Spalten. Mit deiner Vorgehensweise werden alle Einträge in einen langen Vektor eingelesen. Den kann man mit reshape umformatieren oder das gleich folgendermaßen einlesen:

Code:
file=fopen('New_Text_Document_(2).txt');
B = textscan(file,repmat('%f', 1, 474), 'HeaderLines' , 3, 'delimiter', '\t');
B = cell2mat(B);
fclose(file);


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
scoobydo
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 23.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.11.2013, 14:45     Titel:
  Antworten mit Zitat      
Ah ok dann hatte er alles eingelesen, nur eben alles in eine Spalte.
Habt besten Dank, auf repmat wäre ich nie gekommen^^

Top Service hier Wink
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.