nach langem verzweifelten Probieren und erfolgloser Suche im Internet habe ich dieses Forum hier gefunden und hoffe, dass ihr mir vielleicht weiterhelfen könnt.
Um es gleich vorweg zu nehmen: Ich bin noch relativ unvertraut mit MATLAB, da ich erst angefangen habe es zu verwenden. Nichtsdestotrotz muss ich ein Program schreiben, dass .ps4 Dateien einliest.
Zu dem Dateiformat: Es ist möglich diese Post Scripts mit einem Texteditor zu öffnen und das ganze dann zu dorchforsten. Deshalb habe ich zum öffnen in MATLAB:
text = fopen('/Users/---/---/---/1_1.ps4','r');
verwendet.
Nun sehen die Datein so aus, dass sich im Quelltextkopf Angaben zum Erstellungszeitpunkt des Files befinden, die für mich uninteressant sind.
Desweiteren folgt der Code für das in der Datei eingebettete Bild, der wiederrum nicht interessiert.
Ab Zeile 20000 oder so (variiert von Datei zu Datei) befinden sich jetzt die Textzeilen, die von Interesse sind.
Und zwar handelt es sich bei den Dateien um Satellitenbildaufnahmen, aus denen Orbit und Frame extrahiert werden und später in den Filename des aus der Datei ausgeschnittenen Bildes eingebunden werden sollen.
Code:
%Hier ist mal ein kleiner Textauszug:
(ERS-1 SAR PRI) show grestore gsave 42027027 translate 00 M
2.12132 dup scale
(Andaman Sea) show grestore gsave 42026136 translate 00 M
1.06066 dup scale
(orbit: 24884) show grestore gsave 42025542 translate 00 M
1.06066 dup scale
(frame: 3129) show grestore gsave 42024948 translate 00 M
1.06066 dup scale
(date: 04.04.1997) show grestore gsave 42024354 translate 00 M
1.06066 dup scale
(time: 04:15 UTC) show grestore gsave 42023463 translate 00 M
0.848528 dup scale
(tape: CD1/1) show grestore gsave 1050026136 translate 00 M
0.707107 dup scale -1811.660 N
(corner coordinates:) show grestore gsave 1050025690 translate 00 M
0.601041 dup scale -3374.360 N
Was ich jetzt möchte ist, Die Zahl hinter Orbit, Frame, Date, Time, Tape usw. abzuspeichern, wobei deren Länge variieren kann.
Da ich mich mit dem Befehl textscan und dessen format leider noch gar nicht auskenne bitte ich euch um einen kleinen Tipp, wie ich an die Sache rangehen kann.
Hallo nochmal,
was ich bis jetzt im Forum ruasgefunden habe, ist, dass ich ja evtl. strmatch benützen könnte oder findstr um erst mal auf den gewünschten Namen zu kommen und anschließend die Zahl dahinter auszulesen. Aber wie ich das genau machen muss weiß ich nicht....
Hey Peter,
vielen Dank für die schnelle Antwort!!!
Mein Problem ist, dass sich Orbit, Frame, usw. in jedem File ändern.
Geht es vielleicht irgendwie, dass ich mit strmatch quasi die Parameter suche und danach mit textscan den nachfolgenden Wert einlese?
Wie meinst du das? was genau ändert sich jetzt? die Zahl die nach 'orbit' kommt? Dann funktioniert der Code.
Oder ändert sich auch der string 'orbit'? dann wird das auch mti strmatch schwierig wenn das immer anders ist, weil wonach soll man dann suchen wenn die Namen immer anders sind?
_________________
Wie ich das verstanden habe, ist dass dein Code im String str nach den unten deklarierten names sucht und dann den ersten Zahlenstring in number reinschreibt oder?
Wie mache ich das denn bei der Uhrzeit bzw. Datum, also bei den Strings, die mit Zeichen voneinander getrennt sind?
Viele Grüße und Danke!
kilkenny
Code:
(date: 04.04.1996) show grestore gsave 42024354 translate 00 M
1.06066 dup scale
(time: 04:04 UTC) show grestore gsave 42023463 translate 00 M
0.848528 dup scale
Super, vielen Dank dafür!
Was jetzt aber leider noch nicht klappt, ist, dass MATLAB die Zahl nach dem Parameter liest. Vielmehr benützt es die erste Zahl, die es findet und geht auch nicht alle NAMES durch.
Im Moment versuche ich mich damit, aber wie du sehen kannst ist alles noch sehr sehr Laienhaft und ich komm nicht wirklich voran. Was also nicht klappt ist das Einlesen der Datei in einen String....hast du noch einen Tipp für mich?
Vielen vielen Dank!!
Code:
fid = fopen('/Users/---/---/samples/1_1.ps4','r');
if fid < 0, error('Das File ist nicht vorhanden');
end
txt = fscanf(fid, '%s'); % Einlesen der Textdatei als String
%str = '(orbit: 24884) show grestore gsave 42025542 translate 00 M 1.06066 dup scale (frame: 3429) show grestore gsave 42024948 translate 00 M 1.06066 dup scale (date: 04.04.1996) show grestore gsave 42024354 translate 00 M'
Hallo ein weiteres Mal,
ich habe jetzt nach unzähligen Versuchen ein Ergebnis bekommen, allerdings erscheint es mir nicht allzu elegant. Das Problem ist auch, dass ich keine Uhrzeit bzw. kein Datum damit auslesen kann...
Wäre über Hilfe sehr sehr dankbar!
Code:
%%.ps4 importieren
fid = fopen('/Users/-----------------------/500.ps4','r');
if fid < 0, error('Das File ist nicht vorhanden');
end
txt = fscanf(fid, '%s'); % Einlesen der Textdatei als String
Hallo Peter,
vielen herzlichen Dank für die Mühen die du dir gemacht hast!
Mein jetziges Programm sieht so aus:
Code:
%%.ps4 importieren
fid = fopen('/Users/----------------/500.ps4','r');
if fid < 0, error('Das File ist nicht vorhanden');
end
txt = fscanf(fid, '%s'); % Einlesen der Textdatei als String
%%%%%%%%%%%%%%
names = {'orbit', 'frame', 'time', 'tape', 'date'};
for i = 1: 10
tline = fgetl(fid);
first_word = regexp(tline, '[a-z]+', 'match', 'once');
ifismember(first_word, names)
value = regexp(tline, '([A-Z]|[0-9]+)(.|:)?[0-9]+((.|:)?[0-9]+|\s?[A-Z]*)', 'match', 'once');
informations.(first_word) = value;
end end fclose(fid);
disp(informations);
Komischerweise hat der ganze Spaß gestern in der Uni funktioniert, heute zuhause spuckt MATLAb aber jetzt immer eine Fehlermeldung aus, auch wenn ich statt einer .ps4 Datei ein .txt-File einlese.
Hab herausgefunden, dass der Fehler auftritt, wenn die Funktion nicht im gleichen "workingspace" aufgerufen wird wie mein .m file liegt. Allerdings weiß ich nicht warum sich das Ganze geändert hat bzw. wie ich die Funktion vom gleichen .m-File starte.
addpath('/Applications/MATLAB_R2010a.app/toolbox/matlab/strfun/') habe ich schon probiert...ohne Erfolg.
Kann es sei, dass ich die TOOLBOX STRFUN installieren muss obwohl dein erstes Programm am Donnerstag noch lief?
Wäre Dir sehr sehr dankbar, wenn du mir noch einmal helfen könntest!!!
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.