Verfasst am: 27.10.2012, 00:54
Titel: Einlesen von einer "asc" Datei
Hallo Community,
tut mir leid dass ich mich hier mit einer für euch wahrscheinlich sehr banalen Fragestellung melde!!!
Ich habe folgendes Problem:
Ich soll in Matlab ein Programm/Script erstellen, das einen File im "*.asc" Format einlesen kann. Soweit auch so gut! Die Suche hat mir dabei grandios weiter geholfen =
Jetzt hab ich ein neues Kriterium bekommen. Ich soll die Zeitwerte x (ungerade Zeilen) aus der Datei probe.asc einlesen und die Zeit in Stunden als Vektor abspeichern.
Einheiten:
Stunden: H, h, hour
Minuten: M, m, minute
Sekunden: S, s, second
(siehe dazu File)
Mein Problem ist, dass ich mich zwar mit der Suchfunktion super zurecht finde, jedoch hilft es nichts wenn ich generell keine Idee habe wonach ich suchen soll.
Mit Beispielen wäre mir sehr geholfen - Wie gesagt, mir fehlt komplett der Plan!!
Vielen Dank schon im Voraus für eure Bemühungen!!!
bei welchem Schritt hast Du Probleme?
Beim Lesen von jeweils 2 Zeilen?
Beim Umwandeln der ersten Zeile mit str2double?
Beim String-Vergleichen mit strcmp?
Hallo Sirius3,
tut mir leid dass ich mich erst so spät melde!! Hab bereits über mein Handy eine Antwort auf deine Fragen formuliert, dann aber irgendwie Probleme gehabt diese zu posten. Somit war mir eine Antwort erst jetzt wieder möglich.
Um auf das eigentliche Thema zurück zu kommen! Ich habe sowohl beim Einlesen, als auch beim Sortieren keine Idee wie ich das machen soll. Meine Daten zeigen ja, dass es sich bei der ersten Zeile um Zahlen handelt, in der zweiten rein um Buchstaben. Da müsste ich doch irgendwie unterscheiden können ob es sich beim Einlesen um einen char oder z.B. um einen int float double etc. handelt. Dann könnte man ja schon mal beim Einlesen vorsortieren und somit zwei Arrays bilden! Vielleicht lieg ich da mit meiner Überlegung aber auch komplett falsch!? LG
So, jetzt hab ich es so lange mit allen möglichen und komplizierten Varianten probiert, dass ich es aus Gründen des Zeitaufwandes mit der Holzhackermethode (if) versucht habe.
clear all
close all
clc
vector= [1:10];
fid= fopen('beginner.txt','r+');
if fid== -1
fprintf('File konnte nicht geöffnet werden');
else
fprintf('File konnte geöffnet werden');
end
linereader= fgetl(fid);
for i= 1:10
if linereader== 'M'
linereader= fgetl(fid);
vector(1,i)= linereader/60;
else if linereader== 'm'
linereader= fgetl(fid);
vector(1,i)= linereader/60;
else if linereader== 'minute'
linereader= fgetl(fid);
vector(1,i)= linereader/60;
else if linereader== 'H'
linereader= fgetl(fid);
vector(1,i)= linereader;
else if linereader== 'h'
linereader= fgetl(fid);
vector(1,i)= linereader;
else if linereader== 'hour'
linereader= fgetl(fid);
vector(1,i)= linereader;
else if linereader== 'S'
linereader= fgetl(fid);
vector(1,i)= linereader/3600;
else if linereader== 's'
linereader= fgetl(fid);
vector(1,i)= linereader/3600;
else if linereader== 'second'
linereader= fgetl(fid);
vector(1,i)= linereader/3600;
else
linereader= fget(fid);
end
end
end
end
end
end
end
end
end
end
disp(vector);
könnte mir hierbei noch mal kurz einer von euch drüber schauen?? Irgendwie läuft das Ding noch nicht ganz!
jedes Mal wenn ich den Wert der Variable 'linereader' an eine Position des vectors übergeben möchte taucht eine Fehlermeldung auf! Aber bitte seht selbst.
Hallo,
hier noch die Lösung ohne Schleifen und Switch:
Code:
Scale = [16003600];
Data = fileread('beginner.txt');
Data = regexp(Data, '\n', 'split');
Unit = char(Data(1:2:end-1));
vector = str2double(Data(2:2:end))./Scale(bitand(int8(Unit(:,1)),3)+1);
% Umformung der Einheiten: % Vom erste Buchstabe als ASCII-Code werden die niedrigsten 2 Bit genommen. % H, Hour -> H -> 72 -> 0 % h, hour -> h -> 104 -> 0 % M, Minute -> M -> 77 -> 1 % m, minute -> m -> 109 -> 1 % S, Second -> S -> 83 -> 3 % s, second -> s -> 115 -> 3
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.