nun möchte ich hieraus gern nur die zeilen mit den frequenzen 100 bis 10000 hz auslesen und zugehörig dann jeweils die fünf letzten zeichen (schallintensität) speichern, also z. b.:
Zitat:
...
[8000 63.64]
...
wie lese ich meine daten korrekt ein? bisher habe ich folgendes versucht um mit der eingabe von 1 alle dateien eines ordners einzulesen:
Code:
clc;
auswahlart = input('Ordner (1) oder einzelne Datei (2) einlesen? [12]');
if auswahlart == 1
directoryname = uigetdir('C:\Users\', 'Wähle einen Ordner');
else % Code checkt, ob Benutzer Dialog abbricht [filename, directoryname] = uigetfile('txt.m', 'Wähle');
ifisequal(filename,0) || isequal(directoryname,0) disp('User pressed cancel') else disp(['User selected ', fullfile(directoryname, filename)]) end end % Wechseln in ausgewählten Ordner cd(directoryname) % Anzahl der Dateien bestimmen
count = length(dir('*.txt'));
names = dir('*.txt') for n = 1:count
% Daten einlesen
fid = fopen(names(n).name,'r');
data{n} = char(fread(fid))';
fclose(fid) end
er macht mir dann ein 1x144 cell mit 3045 zeichen pro zelle, wo in selbiger zelle dann der gesamte inhalt jeweils einer txt-datei als string drinsteht. wie muss ich jetzt weiter vorgehen, damit ich den gewünschten datenbereich in eine matrix bekomme. am liebsten wäre mir am ende eine große matrix, welche in der ersten spalte die frequenzen von 100 bis 10000 hz und in den weiteren spalten dann die zugehörigen werte aus den 144 einzelnen textdateien.
Hallo pfeili,
also wenn ich dein Code mit der Textdatei durchführe, ist data bei mir eine <1x1 cell> und dort steht die komplette Datei drin.
Wenn du dies so lassen willst, müsstest du dann den cellstring nach den Frequenzen durchsuchen...wobei ich mir nicht sicher bin, ob man die Zeilen zuordnen kann. (Sprich wann eine Zeile zu Ende ist)
Alternativ wäre jede Zeile einzelnd einzulesen und zu untersuchen.
Somit kannst du jede Zeile durchsuchen. (Im ersten Schritt müsstest du nach dem Wort "Frequency" suchen, um zu wissen ab wann der interessante Bereich startet und dann die Werte untersuchen.)
Eine weitere Möglichkeit, wäre es mit textscan zu arbeiten.
Weiterhin würde ich nicht die Schallintensität auf die letzten 5 Zeichen beschränken, sondern entweder alles nach dem letzten Komma nehmen, oder wenn du textscan verwendest, dann eventuell direkt mit %f es als float einlesen.
Hoffe das hilft dir erstmal weiter.
_________________
vielen dank erstmal für deine antwort. ich hatte immer "1" gewählt, um gleich alle txt-dateien des ausgewählten ordners einzulesen, weshalb ich auf die 1x144 cell-struktur kam.
wenn ich es so mache, wie du es beschreibst, erhalte ich jedoch keine daten:
Code:
clearall clc;
auswahlart = input('Alle Dateien eines Ordners (1) oder einzelne Datei (2) einlesen? [12]');
if auswahlart == 1
directoryname = uigetdir('C:\Users', 'Wähle einen Ordner');
else % Code checkt, ob Benutzer Dialog abbricht [filename, directoryname] = uigetfile('C:\Users\*.txt', 'Wähle eine Datei');
ifisequal(filename,0) || isequal(directoryname,0) disp('User pressed cancel') else disp(['User selected ', fullfile(directoryname, filename)]) end end % Wechseln in ausgewählten Ordner cd(directoryname) % Anzahl der Dateien bestimmen
count = length(dir('*.txt'));
names = dir('*.txt');
fid = fopen(names(1).name);
zwar zeigt er mir wegen disp() den gesamten inhalt des txt-files an, aber eigentlich müsste ich ja dann zeilenweise auf zugriff darauf haben, d. h. in einem cell-array speichern. dann müsste man es nach meinen gewünschten kriterien filtern und die zahlen als float und nicht als string haben, um sie in die gewünschte matrix zu packen. irgendwie verstehe ich noch nicht, wie ich da hingelangen kann.
for i = 1:length(data.Frequenz)
value = str2num(data.Frequenz{i});
if value >= 100 & value <= 1000
data_filtered(count, 1) = value;
data_filtered(count, 2) = data.Schallintensitaet(i);
count = count + 1;
end end fclose(fid);
bin im Rahmen meines Studiums auch relativ neu im Umgang mit Matlab und bekomme es einfach nicht hin, eine Datei auszulesen.
Ich habe vor, eine txt. datei auszulesen, und diese dann wieder als txt. Datei zu speichern.
dabei sollen alle Zahlenwerte der Ursprungsdatei genommen werden, die A, B oder C entsprechen.
Als kleines Bsp meine 'Test.txt':
hier soll nichts stehen
Irgendwelches Zeugs
A = 1
B = 3
Gar nix
C = 6
mein erstes Problem ist schon das auslesen. Wie bekomme ich es hin, dass matlab nur die Zeilen mit A, B und C nimmt und die Zahlenwerte Speichert? Leider hat die Suche auch nicht geholfen
Wäre sehr dankbar über Hilfe
Beste Grüße
Inferno87
Einstellungen und Berechtigungen
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
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.