2008-11-03 12 views
7

Betrachten Sie die folgende DateiTextwerte in Matlab Variablen aus ASCII-Dateien

var1 var2 variable3 
1  2 3 
11 22 33 

Lesen würde ich die Zahlen in eine Matrix laden möchte, und die Spaltentitel in eine Variable, die gleichwertig sein würde:

variable_names = char('var1', 'var2', 'variable3'); 

Es macht mir nichts aus, die Namen und die Zahlen in zwei Dateien zu teilen, aber Matlab-Code-Dateien vorzubereiten und sie zu überprüfen ist keine Option.

Hinweis, dass es kann eine beliebige Anzahl von Variablen (Spalten) seine

Antwort

9

Ich schlage vor, import für Operationen wie folgt aus:

d = importdata('filename.txt'); 

Die Rückkehr ist ein struct mit den numerischen Feldern in einem Element namens "data" und den Spaltenüberschriften in einem Feld namens "colheaders".

Eine weitere nützliche Schnittstelle zum Importieren von Manipulationsdaten wie diesen ist die Klasse 'Dataset', die in der Statistics Toolbox verfügbar ist.

1

nur textscan mit unterschiedlichen Formatbezeich verwenden.

fid = fopen(filename,'r'); 
heading = textscan(fid,'%s %s %s',1); 
fgetl(fid); %advance the file pointer one line 
data = textscan(fid,'%n %n %n');%read the rest of the data 
fclose(fid); 

In diesem Fall ‚Überschrift‘ wird eine Zelle Array innerhalb der Zellen mit jeder Spaltenüberschrift enthält, so dass Sie sie in die Zelle Array von Strings oder was auch immer es ist, dass Sie wird sich ändern müssen. 'data' ist ein Zellen-Array, das für jede gelesene Spalte ein numerisches Array enthält. Daher müssen Sie sie zu einer Matrix zusammenfassen.

+0

Es kann eine beliebige Anzahl von Variablen (Spalten) geben –

+0

Wenn Sie die Anzahl der Spalten nicht im Voraus wissen, müssen Sie die Datei Zeile für Zeile lesen. Wenn Sie textscan mit einem einzelnen% s und keiner begrenzenden Zahl aufrufen, liest es N Anzahl der Strings aus der Zeile. Ich denke, das ist besser/schneller als mit strtok. –

3

Wenn der Header in der ersten Reihe ist dann

A = dlmread(filename,delimString,2,1); 

werden die numerischen Daten in die A. Matrix lesen

Sie dann

fid = fopen(filename) 
headerString = fscanf(fid,'%s/n') % reads header data into a string 
fclose(fid) 

Sie können dann verwenden können strtok, um den headerString in ein Zellenfeld aufzuteilen. Ist ein Ansatz, den ich von Deal mit einer unbekannten Anzahl von Spalten denken kann

bearbeiten

Fest fscanf Funktionsaufruf

Verwandte Themen