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 ungünstig aufgebautem *.txt verarbeiten

 

navpp
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 14.12.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2009, 12:22     Titel: Daten aus ungünstig aufgebautem *.txt verarbeiten
  Antworten mit Zitat      
Das ist mein erster Forumseintrag hier darum erstmal:

Hallo Leute! Smile

Vielen Dank für die zahlreichen Male bei denen mir dieses Forum schon geholfen hat, ohne dass ich etwas posten musste. Diesmal ist es leider anders, ich kann mein Problem mit der Suche nicht vollständig lösen!

Worum gehts? Ich muss Daten auswerten, die leider etwas ungewöhnlich abgelegt wurden:

Ein 27 Zeilen langer header, dessen Inhalt nicht gespeichert werden muss Danach gehts so weiter:
String
Leerzeichen Kommazahl Leerzeichen
(^ wiederholt sich ca 4000 mal - Anzahl bekannt und fix)
String
Leerzeichen Kommazahl Leerzeichen
(^ wiederholt sich ca 4000 mal - Anzahl bekannt und fix)
.
.
.

siehe Attachment.

Ich habe schon verschiedene Lösungen (importdata, textread, load. etc.) probiert und scheitere spätestens daran, wenn ich ein 32kx1 großes "Cell-Array" das mit "Char"s gefüllt ist vorliegen habe. Ich bräuchte lediglich Zugriff auf die Werte als double und nicht char in dem File. Diese können ruhig alle hintereinander aufgelistet werden, ohne die Strings die dazwischen stehen. Die Daten kann ich ja dann, da Anzahl bekannt, durch simples abzählen wieder logisch trennen.

Hoffentlich habe ich mein Problem ausreichend genau geschildert!
Dank auf jeden Fall schon im Vorfeld an alle die bis hierher gelsen haben! Smile

Hoffentlich kann mir jemand weiterhelfen!

mfg, navpp

test_kalib.txt
 Beschreibung:

Download
 Dateiname:  test_kalib.txt
 Dateigröße:  315.94 KB
 Heruntergeladen:  619 mal
Private Nachricht senden Benutzer-Profile anzeigen


LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2009, 12:32     Titel:
  Antworten mit Zitat      
Hallo,

ich denke mal Dein Problem ist das leidige Komma statt Dezimalpunkt.
Falls es kein Problem ist, wenn auch im Header/String die Kommas durch Punkte ersetzt werden, kannst Du folgende Funktion (comma2point) aus dem Forum verwenden:

http://www.gomatlab.de/komma-als-de.....ighlight,comma2point.html


Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
navpp
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 14.12.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2009, 13:37     Titel:
  Antworten mit Zitat      
Hallo, Danke für deine Antwort! Leider habe ich die gleichen Probleme wenn ich das File vorher im Texteditor bearbeite und alle Kommas mit Punkten ersetzen lasse.

Ich habe zwischenzeitlich schon versucht den Header händisch im Texteditor zu löschen. Das Problem ist dann, dass ich auch während des Files "strings" in den daten habe. Leider habe ich sehr viele solcher Files, daher ist das händische rauslöschen keine wirkliche Option.

Ich habe mir schon eine Vorgangsweise überlegt die funktionieren könnte, nur weiß ich nicht wie ich sie umsetzen kann:

Beim Einlesen Header auslassen (Funktioniert bei mir nicht richt, anscheinend wird Matlab dadurch gestört, dass der Delimiter auch im Header vorkommt)

dann 1. Spalte = String, 2. Spalte = double, 3. Spalte = egal da eh keine Zeichen drinnen stehen

Funktioniert sowas in Matlab?

mfg, navpp
Private Nachricht senden Benutzer-Profile anzeigen
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2009, 14:24     Titel:
  Antworten mit Zitat      
Hallo,

ich würde folgendes machen:
Code:

%% ersetze , durch .
copyfile('test_kalib.txt','test_kalib_old_txt')
file    = memmapfile('test_kalib.txt','Writable',true);
comma   = uint8(',');
point   = uint8('.');
file.Data( file.Data== uint8(',')) = uint8('.');
delete(file)

%%
fid = fopen('test_kalib.txt','rt');
data = textscan(fid,'%f','headerlines',28);
data2 = textscan(fid,'%f','headerlines',1);
status = fclose(fid);
 


textscan macht immer dort weiter wo es aufgehört hat (weil das Format nicht mehr stimmt). Damit könntest Du um den textscan Teil herum eine Schleife bauen und die Daten blockweise einlesen.

Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
navpp
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 14.12.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2009, 14:31     Titel:
  Antworten mit Zitat      
Danke Smile Ich werd das heute Abend gleich ausprobieren!
Private Nachricht senden Benutzer-Profile anzeigen
 
navpp
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 14.12.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2009, 17:32     Titel:
  Antworten mit Zitat      
Mir fehlt leider das memmapfile.m
mfg, navpp
Private Nachricht senden Benutzer-Profile anzeigen
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.12.2009, 10:37     Titel:
  Antworten mit Zitat      
dann hast Du eine zu alte MATLAB Version. memmapfiles sind mit MATLAB 7.0.4. R14SP2 dazugekommen.

Du hast ja geschrieben, dass Du eine Datei hast, in der Kommas durch Punkte ersetzt wurden. Hast Du mit der Datei wenigstens den zweiten Teil ausprobiert? Liefert es das passende Ergebnis?
Private Nachricht senden Benutzer-Profile anzeigen
 
navpp
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 14.12.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.12.2009, 11:00     Titel:
  Antworten mit Zitat      
Hallo!
Sorry, hab gestern schlecht gearbeitet, mir ist ein ziemlich peinlicher Fehler passiert (hatte irgendwann im händisch geänderten file blanks durch ; ersetzt, darauf vergessen und nicht mehr nachgesehen) Bin erst heute draufgekommen Smile

Ich erhalte mit deiner Methode zwei 1x1 Cell-arrays die ich mit

Code:
A = data{:};
B = data2{:};


im format double verwenden kann. Ab da komm ich alleine weiter.

Vielen Dank für deine TOP Unterstützung! Smile

lg, navpp
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.