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 einlesen welche mehrere Trennzeichen haben

 

Tio
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2008, 16:52     Titel: Daten einlesen welche mehrere Trennzeichen haben
  Antworten mit Zitat      
Hallo zusammen,

ich bin neu hier und hoffe ich habe das richtige Unterforum gefunden.

Mein Problem ist folgendes: Ich habe eine Textdatei wo erst etwas Text kommt und nach einer Weile meine Daten. Diese will ich mit dlmread('filename', delimiter, R, C) in eine Matrix einlesen. Jetzt habe ich das Problem, das die Daten einmal mit Leerzeichen und manchmal nur mit Tabulator voneinander getrennt sind. Leider kann man meines Wissens nur einen delimiter angeben und so führt die Texteingabe immer zu fehlern. Gibt es eine Möglichkeit 2 delimiter anzugeben, wovon immer nur einer von beiden zutreffen muss?

Ich habe mir jetzt als Alternative den tetscan()-Befehl angeschaut. Gibt es bei dem Befehl eine Möglichkeit die Zeilen anzugeben, die er auslesen soll? Wie schon gesagt enthält meine Textdatei am Anfang Sachen die mich nicht interessieren, und die auch ein ganz anderes Format haben als die Daten die ich auslesen will (z.B. nur eine Stringzeile usw.).

Schonmal im vorraus danke für Eure Bemühungen Smile
Private Nachricht senden Benutzer-Profile anzeigen


Tio
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.10.2008, 12:10     Titel:
  Antworten mit Zitat      
Ok, direkt mehrere Trennzeichen anzugeben scheint wohl nicht möglich zu sein.
Ich habe zwischenzeitlich noch etwas herumprobiert und herausgefunden, das Matlab die Daten trotz der 2 verschiedenen Trennzeichen korrekt einliest, wenn die Nachkommastellen mit einem '.' angegeben werden. Nun ist es bei mir aber deutsch und dementsprechend ein ','. Gibt es eine Möglichkeit Matlab beizubringen, das Nachkommastellen mit einem Komma und keinem Punkt angegeben werden?
Ansonsten sehe ich nur die Möglichkeit die Daten einzulesen, zu bearbeiten und wieder zu speichern. Und dann erst alle Daten mit dlmread() als Array einzulesen. Diese Möglichkeit gefällt mir aber irgendwie so garnicht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 13.10.2008, 12:22     Titel:
  Antworten mit Zitat      
bei kommas hab ichs bisher so gehandhabt, dass ich z.b. bei folgender Dateistruktur:

Code:

0,00 15
0,05 20
0,10 13
 


einfach die 1. und 2. spalte zusammengefasst habe.

Code:

A=load('Test.txt');
B(:,1)=A(:,1)+A(:,2)/100;
B(:,2)=A(:,3);

 


Funktioniert allerdings nur bei konstanter Nachkommastellenanzahl.
_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
Tio
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2008, 20:58     Titel:
  Antworten mit Zitat      
Danke erstmal für deine Antwort. Leider hilft es mir nicht weiter. Zum einen gibt es mit load wohl keine Möglichkeit die ersten Zeilen zu überspringen, zum anderen hab ich zwischen 0 und 2 Nachkommastellen.

Ich habe noch etwas probiert und komme per direkter Eingabe nicht zum Ziel. Deswegen will ich die Daten erstmal als string einlesen, die Kommas durch Punkte ersetzen und das dann in einer neuen Textdatei speichern. So hab ich nur die für mich interessierenden Daten in einer Datei und will die mit dlmread einlesen. Hier mal mein Quelltext dafür.

Code:

clear;clc;
fid = fopen('T.txt', 'r');
fid2 = fopen('buffer.txt', 'w');
i = 0; k = [];
while 1
    if ~(size(k) == [0 0])
        i=1;  
    end;  
    tline = fgetl(fid);
    if ~ischar(tline),   break,   end    
    k = strfind(tline, 'Series');
    if i==1
        tline = strrep(tline,',','.');
        tline = strcat(tline,'\n');
        fwrite(fid2,tline);
    end;
end;
fclose(fid);
fclose(fid2);
 


'Series' ist mein Schlüsselwort, es steht in der Zeile bevor meine Daten kommen und tacht nur einmal in der Datei auf. Alle Zeilen die danach kommen will ich einlesen, bearbeiten und in einer neuen Datei speichern. Leider speichert er mir aber alle Zeilen nebeneinander und das '\n' hilft da auch nicht. Obwohl das doch die Kodierung für ein 'enter' ist. Was muss ich tun damit er mir die Zeilen schön untereinander speichert?

Außerdem hatte ich erst probiert die Tabulatoren, die ein Teil meine Daten trennen mittels strrep() zu Leerzeichen umzuändern.
Code:
strrep(tline,'\t',' ');

Leider hatte dies keinen sichtbaren Erfolg, woran kann das liegen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Tio
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.10.2008, 15:21     Titel:
  Antworten mit Zitat      
Ich hab den Fehler gefunden. fwrite() schriebt nur binär, fprintf() dagegen formatiert, dort geht es dann mit dem '\n'.
Naja, vllt hilfts später mal wem.
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.