Text aus messdatei copieren Matlab 2010b

OP #3797664
Hallo

ich habe eine Tab separierte Messdateimit drei Zeilen header
in der ersten Zeile stehen die Messnamen in der Zweiten Zeile die 
Einheit und in der dritten Zeile der Messverstärker.
Folgend sin dann die Messdaten.
 ungefähr so

Spannung_1  Spannung_2  Strom_1  Strom_2
V  V  mA  mA
Amp_1.1  Amp_2.1  Amp_1.2  Amp_2.2
10  25  550  660
25  32  230  325
22  12  123  523

nun hätte ich gerne das Matlab mir Variablen erstält die zu den 
Messnamen passen

Spannung_1 10  25  22
Spannung_2 25  32  12
Strom_1 550  230  123
Strom_2 660  325  523

kann mir einer helfen diesbezüglich?
Stefan L. schrieb:
> nun hätte ich gerne das Matlab mir Variablen erstält die zu den
> Messnamen passen

Das erreicht man in Matlab mit der Funktion "genvarname". Also: die 
Elemente der ersten Zeile als Strings einlesen. Dann mit 'genvarname' 
die Variablennamen generieren. Dann die Messwerte einlesen. Zum Schluss 
mit "eval" die Daten den Variablen mit den generierten Namen zuweisen.

Wie formatierter Text aus ASCII Dateien eingelesen wird weißt Du?
Stefan L. schrieb:
> das weis ich nicht so richtig, wie man formatierte ASCII dateien
> einliest

Da bietet Matlab verschiedene Möglichkeiten. Ich würde in Deinem Fall 
die ersten 3 Headerzeilen zeilenweise mit "fgetl" einlesen (natürlich 
erst die Datei mit "fopen" öffnen). Die erste Zeile wird einer 
String-Variablen zugewiesen, da zweite und dritte Zeile nicht benötigt 
werden, kann deren Inhalt gleich wieder verworfen werden:
1
file_id=fopen('daten.txt','r');
2

3
line1=fgetl(file_id);
4
fgetl(file_id);                  
5
fgetl(file_id);

Jetzt die tab-separierten Daten in einem Rutsch mittels "textscan" 
einlesen. Nicht vergessen, die Datei danach wieder zu schließen:
1
data=textscan(file_id,'%d\t%d\t%d\t%d');
2

3
fclose(file_id);
Die Variable "data" repräsentiert ein sogenanntes cell array. Jedes 
Element des cell arrays einen vector mit den Werten der Spalten Deiner 
Datei.

Für die Generierung der Variablennamen jetzt die vorhin eingelesene 
erste Zeile in Einzelstrings zerlegen. Die Matlabfunktion "strread" 
benötigt dafür die Angabe des Trennzeichens, bei Dir tab, also "\t". Aus 
den Strings kannst Du dann mit "genvarname" die Variablennamen 
generieren:
1
s=strread(line1,'%s', 'delimiter', '\t');
2
v=genvarname(s);
Auch die Variable v repräsentiert ein cell array. Diesmal sind die 
Elemente Strings, die als Variablennamen verwendet werden können.

Jetzt noch mit "eval" die Spaltenvektoren den Variablennamenstrings 
zuordnen:
1
for n=(1:4)
2
   eval([v{n} '=data{n}']) ;
3
end

FÜr die Besonderheiten, die bei Verwendung von "genvarname" zu beachten 
sind, und auch für die Beschreibungen der anderen Funktionen empfehle 
ich die ausführliche Hilfe von Matlab.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.