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 Import, Werte-Vertalung auf mehrere Zellen

 

FeLe
Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.12.10
Wohnort: Frankfurt a.M.
Version: Matlab 2013a
     Beitrag Verfasst am: 09.12.2010, 16:47     Titel: Daten Import, Werte-Vertalung auf mehrere Zellen
  Antworten mit Zitat      
Guten Tag
Ich bin unerfahren in Matlab-Programmierung. Ich versuche eine Text-Datei importieren um später im Matlab zu verarbeiten. Die Datei-Struktur sieht folgendermaßen aus:

Line number,Slave/Event ID,Command,Address,Additional Data,Data,Length,Expected Data,Var,CRC,ERR,Result,Time
1,-,---------------------,-,Pressure Measurement Sensata,-,-,-,-,-,-,"",25.11.2010 15:55:13:765
2,-,---------------------,-,P & T results,-,-,-,-,-,-,"",25.11.2010 15:55:13:765
3,0x01,READ,0x77,-,0xAA5413F01C10AAA9,0x08,0xXXXXXXXXXXXXXXXX,-,Falsch,Falsch,OK,25.11.2010 15:55:13:781
4,0x01,READ,0x77,-,0xAA5412F01D10AAA9,0x08,0xXXXXXXXXXXXXXXXX,-,Falsch,Falsch,OK,25.11.2010 15:55:13:781
.
.
.
Usw. 38000 Zeilen

Die erste Zeile ist Tabellenüberschrift, danach kommen die Daten. Für den Import benutze ich die importdata() Funktion.

Code:
% Meine Programm
[chFilename chPath]=uigetfile('*.txt','Select text file');
cd(chPath);
dFid=fopen(chFilename);
[ceData chDelimiter dDataLength]=importdata(chFilename);
 


Als ergebnis kriege ich 38000 x 1 cell

Code:

>> ceData{1:4,1}

ans =

Line number,Slave/Event ID,Command,Address,Additional Data,Data,Length,Expected Data,Var,CRC,ERR,Result,Time


ans =

1,-,---------------------,-,Pressure Measurement Sensata,-,-,-,-,-,-,"",25.11.2010 15:55:13:765


ans =

2,-,---------------------,-,P & T results,-,-,-,-,-,-,"",25.11.2010 15:55:13:765


ans =

3,0x01,READ,0x77,-,0xAA5413F01C10AAA9,0x08,0xXXXXXXXXXXXXXXXX,-,Falsch,Falsch,OK,25.11.2010 15:55:13:781
 


Wie kann ich die Werte aus einer Zelle in einzelne Zellen verteilen. Damit es 38000 x 12 Matrix wird? Oder gibt'es Möglichkeit das gleich beim Import zu machen?

Ich bin wie gesagt Neuling. Wenn jemand Fragen oder Anregungen zu dem Beitrag hat, bitte schreiben Sie!
Private Nachricht senden Benutzer-Profile anzeigen


ppirokke
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 64
Anmeldedatum: 19.11.10
Wohnort: ---
Version: R2010a
     Beitrag Verfasst am: 09.12.2010, 19:48     Titel:
  Antworten mit Zitat      
Hi, Willkommen!

geb mal "doc textscan" ein, dann hast du die Funktion mit Beispielen, die du suchst.

Beispielsweise kannst du so einlesen:

Code:

fid = fopen('test.txt');
C_head = textscan(fid, '%s', 13, 'delimiter', ',');
C_data = textscan(fid, '%u %s %s %s %s %s %s %s %s %s %s %s %s','delimiter',',');
fclose(fid);
 


Ist dir damit geholfen?


Gruß

ppirokke
Private Nachricht senden Benutzer-Profile anzeigen
 
FeLe
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.12.10
Wohnort: Frankfurt a.M.
Version: Matlab 2013a
     Beitrag Verfasst am: 10.12.2010, 11:03     Titel:
  Antworten mit Zitat      
Vielen Dank für schnelle Antwort, aber die Funktion(textscan) habe ich schon früher ausprobiert. Das Problem bei der ist, nach 408 Werten kommt wieder ein Header-String und das führt zu dem Abbruch. Nach der Abarbeitung deines Codes kriegst du nur 408 Werte importiert. Ich nicht nicht hingekrigt die Funktion so zu ändern, dass die bis zur Ende arbeitet.

Zum ausprobieren füge ich die Text-Datei.

100samples.txt
 Beschreibung:

Download
 Dateiname:  100samples.txt
 Dateigröße:  3.86 MB
 Heruntergeladen:  511 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
meiseneisen
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 13.06.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2010, 12:57     Titel:
  Antworten mit Zitat      
Wie wäre es denn mit sowas?
Code:

fid = fopen('100samples.txt');
% Header lesen
C_head = textscan(fid, '%s', 13, 'delimiter', ',');

% Anzahl der Headerzeilen
headerlines=1;
C_data={};
while ~feof(fid)
% file identifier zurücksetzen  
frewind(fid)
% Abschnitt unter unter Verwendung der 'HeaderLines' property einlesen
[C_part,pos] = textscan(fid, '%u %s %s %s %s %s %s %s %s %s %s %s %s',...
    'delimiter',',','HeaderLines',headerlines);
% Abschnitt speichern
C_data=[C_data;C_part];
% Anzahl der bereits eingelesenen Abschnitte
[n,m]=size(C_data);
% Anzahl der eingelesenen Zeilen des letzten Abschnitts
[n,m]=size(C_data{n,1});
% Anzahl zu headerlines addieren
headerlines=headerlines+1+n;
end
fclose(fid)
 


Ist nicht so richtig schön, aber funktioniert.
Private Nachricht senden Benutzer-Profile anzeigen
 
FeLe
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.12.10
Wohnort: Frankfurt a.M.
Version: Matlab 2013a
     Beitrag Verfasst am: 10.12.2010, 14:16     Titel:
  Antworten mit Zitat      
Vielen Dank an alle! Ich habe jetzt die richtige Richtung! Very Happy
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.