Auslesen Spalte aus ASCIIDatei < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Hallo!
Ich habe eine ASCII Datei mit einem Header und 4 Spalten Daten. Die Spalten sind aber nicht gleich lang:
1,2,3,4
5,7,9,3
2,4,6,7
4,5,7,3
3,4,6,8
.
.
.
3,4,6,8
4,5,4,5
2,4,,
4,5,,
8,4,,
1,4,,
.
.
.
Wie kann ich hier eine einzelne Spalte auslesen?
fscanf bricht leider ab, sobald nicht mehr alle Spalten vollstaendig sind.
Die Spalten sind aber sehr sehr lange, so dass ich sie nicht einfach umschreiben kann.
Vielleicht weiss jemand weiter...
Danke
Gruesse
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Hallo,
versuch es doch mal mit:
fid = fopen('MeineDatei');
data = textscan(fid, '%d%d%d%d', 100, 'Delimiter', ',', 'CollectOutput', true);
fclose(fid);
Die Daten liegen dann komplett in data{1} und können mit a=data{1} bequem als Matrix gespeichert und dann spaltenweise abgefragt werden.
Gruß
Martin
|
|
|
|
|
Danke, aber den Befehl textscan kennt mein matlab (6 R13) ueberhaupt nicht...
|
|
|
|
|
Keine Ahnung, ob es das in Deiner Version schon gibt, aber versuch mal:
1: | daten=dlmread('datei.txt',',')
| 2: | daten=csvread('datei.txt')
| 3: | daten=importdata('datei.txt') |
Importdata würde ich falls möglich bevorzugen, weill es 'NaN' an die Leerstellen schreibt, so dass man zwischen Leerstelle und 0 unterscheiden kann.
|
|
|
|
|
Danke!
Das funktioniert zwar [ebenso wie data = textread('text.txt','','delimiter',',','emptyvalue',NaN)] aber dann mach mein Header Probleme, und den sollte ich schon drinhaben...
|
|
|
|
|
Kannst Du im Current Directory Fenster auf die Datei rechtsklicken und 'Import Data' wählen?
|
|
|
|
|
Nein kann ich nicht, und das waere auch nciht sinnvoll, da ich einige hundert Dateien auslesen will
|
|
|
|
|
Doch, das wäre durchaus sinnvoll, denn dann könntest Du Dir ganz einfach eine Import-Funktion von Matlab erstellen lassen. Ich hab das mal gemacht, vielleicht läuft die Funktion ja auch bei Dir:
1: |
| 2: | function importfile1(fileToRead1)
| 3: | %IMPORTFILE1(FILETOREAD1)
| 4: | % Imports data from the specified file
| 5: | % FILETOREAD1: file to read
| 6: |
| 7: | % Auto-generated by MATLAB on 31-Mar-2008 13:21:43
| 8: |
| 9: | % Import the file
| 10: | newData1 = importdata(fileToRead1);
| 11: |
| 12: | % Create new variables in the base workspace from those fields.
| 13: | vars = fieldnames(newData1);
| 14: | for i = 1:length(vars)
| 15: | assignin('base', vars{i}, newData1.(vars{i}));
| 16: | end
|
Unter importfile1.m speichern und mit importfile('datei.txt') aufrufen.
Klappt das?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 13:26 Mo 31.03.2008 | Autor: | nschlange |
Vielleicht kannst Du ja auch mit fgetl oder fgets den Header auslesen und dann mit textscan die Daten...
|
|
|
|
|
Sorry, dass ich mich so lange nicht gemeldet habe.
Ich habe das Probelem zwar nicht geloest, aber es hat sich in Lust aufgeloest, da ich inzwischen andere Messwerte habe und damit nur noch volle Spalten.
Da ist das Auslesen ja dann mit fscanf kein Problem.
DANKE
|
|
|
|