WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Einlesen von einer "asc" Datei

 

toughman
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 27.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2012, 00:54     Titel: Einlesen von einer "asc" Datei
  Antworten mit Zitat      
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 =

Code:
fid= fopen('probe.asc','r+');

if fid== -1
 
fprintf('Der File konnte nicht geöffnet werden\n');

else
    fprintf('Der File wurde ordnungsgemäß geöffnet\n');

line= fgets(fid);

tline = fgets(fid);
while ischar(tline)
    disp(tline)
    tline = fgets(fid);
end

fclose(fid);
 

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!!!

[EDITED, Jan, Bitte Code-Formatierung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen


toughman
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 27.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2012, 00:59     Titel:
  Antworten mit Zitat      
PS: Anbei noch der File (zwar im *.txt - Format) aber das is ja eigentlich egal

probe.txt
 Beschreibung:

Download
 Dateiname:  probe.txt
 Dateigröße:  6.22 KB
 Heruntergeladen:  462 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2012, 10:59     Titel:
  Antworten mit Zitat      
Hallo Toughman,

bei welchem Schritt hast Du Probleme?
Beim Lesen von jeweils 2 Zeilen?
Beim Umwandeln der ersten Zeile mit str2double?
Beim String-Vergleichen mit strcmp?

Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
toughman
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 27.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2012, 16:47     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.10.2012, 18:49     Titel:
  Antworten mit Zitat      
Hallo toughman,
Code:
DataChar = fileread('probe.txt');
DataCell = regexp(DataC, '\n', 'split');
EverySecond = DataCell(1:2:end);

Du könntest auch für jeden String in der DataCell testen, ob sie mit einem Buchstaben oder einer Zahl beginnt, siehe STRPROP oder ISLETTER.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
toughman
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 27.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2012, 18:50     Titel:
  Antworten mit Zitat      
vielen Dank für deine rasche Antwort!!! Werd mich gleich dahinter kelmmen und mich mal darüber schlau machen!

LG Helmuth
Private Nachricht senden Benutzer-Profile anzeigen
 
toughman
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 27.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.10.2012, 13:33     Titel:
  Antworten mit Zitat      
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.

(File ist im Anhang)

beginner.txt
 Beschreibung:

Download
 Dateiname:  beginner.txt
 Dateigröße:  73 Bytes
 Heruntergeladen:  443 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2012, 18:28     Titel:
  Antworten mit Zitat      
Hallo toughman

Die Funktion fgetl liefert eine Chararray zurück, und keine Zahl.
Statt der vielen if schau Dir mal switch an.

Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
toughman
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 27.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2012, 00:12     Titel:
  Antworten mit Zitat      
Vielen Dank für die Info! Hab gerade eben den Befehl str2num entdeckt und die if's wurden schon durch switch ersetzt! LG
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2012, 12:01     Titel:
  Antworten mit Zitat      
Hallo,
hier noch die Lösung ohne Schleifen und Switch:
Code:
Scale = [1 60 0 3600];
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
 

Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
toughman
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 27.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2012, 15:20     Titel:
  Antworten mit Zitat      
Coole Sache!!

Vielen Dank für die gute Betreuung!

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.