Forum: PC Hard- und Software Text aus messdatei copieren Matlab 2010b


von Stefan L. (stefan_l79)


Lesenswert?

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?

von J.-u. G. (juwe)


Lesenswert?

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?

von Stefan L. (stefan_l79)


Lesenswert?

nein das weis ich nicht so richtig, wie man formatierte ASCII dateien 
einliest

bin noch ziemlich neu in Matlab

von J.-u. G. (juwe)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.