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

Datei durchsuchen und Daten extrahieren

 

Stefsn
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 13.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.05.2018, 11:14     Titel: Datei durchsuchen und Daten extrahieren
  Antworten mit Zitat      
Edit: Beitrag war zuvor in der falschen Schublade erstellt

Moin Moin ihr fleißigen Helfer.

Ich habe folgendes Problem, in abgewandelten Formen schon öfter behandelt, aber die helfen mir nicht ganz weiter, da mein Problem ein wenig komplexer ist.

Ziel: Ich möchte eine .trk Datei bzw. .txt Datei. Diese ist aufgebaut. Eine kleine Wiederholung gibt es. Es wird eine Variable mit ihren Eigenschaften initialisiert, und danach werden in diese Variabel Informationen abgelegt. Die Informationen bestehen grob aus einem "Frame" und zugehöriger x,y Position. Zum Schluss wird ein Array mit allen Frames erstellt. Das ganze sieht dann so aus:

Code:

<object class="org.opensourcephysics.cabrillo.tracker.PointMass">
            <property name="mass" type="double">1.0</property>
            <property name="name" type="string">MuskelAnfangA</property>
            <property name="color" type="object">
            <object class="java.awt.Color">
                <property name="red" type="int">255</property>
                <property name="green" type="int">0</property>
                <property name="blue" type="int">0</property>
                <property name="alpha" type="int">255</property>
            </object>
            </property>
            <property name="footprint" type="string">Footprint.BoldDiamond</property>
            <property name="visible" type="boolean">true</property>
            <property name="trail" type="boolean">false</property>
            <property name="framedata" type="array" class="[Lorg.opensourcephysics.cabrillo.tracker.PointMass$FrameData;">
                <property name="[166]" type="object">
                <object class="org.opensourcephysics.cabrillo.tracker.PointMass$FrameData">
                    <property name="x" type="double">297.5</property>
                    <property name="y" type="double">198.0</property>
                </object>
                </property>
                <property name="[167]" type="object">
                <object class="org.opensourcephysics.cabrillo.tracker.PointMass$FrameData">
                    <property name="x" type="double">296.45248133259315</property>
                    <property name="y" type="double">197.48258388018564</property>
                </object>
                </property>
                <property name="[168]" type="object">
                <object class="org.opensourcephysics.cabrillo.tracker.PointMass$FrameData">
                    <property name="x" type="double">296.1740943746288</property>
                    <property name="y" type="double">197.09049819642235</property>
                </object>
                </property>
                <property name="[169]" type="object">
                <object class="org.opensourcephysics.cabrillo.tracker.PointMass$FrameData">
                    <property name="x" type="double">295.94470284330055</property>
                    <property name="y" type="double">197.03928719492654</property>
                </object>
                </property>
                <property name="[170]" type="object">
                <object class="org.opensourcephysics.cabrillo.tracker.PointMass$FrameData">
                    <property name="x" type="double">295.2770892104212</property>
                    <property name="y" type="double">197.17640378668244</property>
                </object>
                </property>
                <property name="[171]" type="object">
                <object class="org.opensourcephysics.cabrillo.tracker.PointMass$FrameData">
                    <property name="x" type="double">294.40744888145014</property>
                    <property name="y" type="double">197.4415739283349</property>
                </object>

...
...
...
                </property>
                <property name="[327]" type="object">
                <object class="org.opensourcephysics.cabrillo.tracker.PointMass$FrameData">
                    <property name="x" type="double">326.75154232932755</property>
                    <property name="y" type="double">211.86448309209652</property>
                </object>
                </property>
                <property name="[328]" type="object">
                <object class="org.opensourcephysics.cabrillo.tracker.PointMass$FrameData">
                    <property name="x" type="double">330.51204188111797</property>
                    <property name="y" type="double">211.82066940124935</property>
                </object>
                </property>
                <property name="[329]" type="object">
                <object class="org.opensourcephysics.cabrillo.tracker.PointMass$FrameData">
                    <property name="x" type="double">332.8694394204915</property>
                    <property name="y" type="double">211.95953404897517</property>
                </object>
                </property>
            </property>
            <property name="keyFrames" type="array" class="[I">
                <property name="array" type="string">{166,167,168,169,170,171,...,327,328,329}</property>
            </property>
        </object>
 


Die punkte habe ich manuell eingefügt, weil der Quelltext sonst zu groß sein würde.

In diesem Beispiel möchte ich gerne nach

<property name="name" type="string">MuskelAnfangA</property>

suchen (da das Wort MuskelAnfangA öfter vorkommt und nur in der vollständigkeit der Zeile einzigartig ist). Dann möchte ich folgende Information in die Variable

MuskelAnfangA = [...]

packen: (nur das Dickgedruckte)
<property name="[166]" type="object"> .
und dazugehörig die Koordinatenwerte
<property name="x" type="double">297.5</property>
<property name="y" type="double">198.0</property>

Die Auslese soll enden, wenn in der Datei alle Frames in das Array geschrieben werden.

<property name="array" type="string">{166,167,168,169,...,328,329}</property>


Meine Idee wäre, zuerst nach
(1)
<property name="name" type="string">MuskelAnfangA</property>

suchen. Dann im folgenden, ab der Zeile von (1), suchen, wo
(2)
<property name="array" type="string">{

auftaucht, da diese Zeile das Ende repräsentiert. Von dieser Zeile direkt das Array mit den Frames abspeichern und dann zwischen (1) und (2) noch den einzelnen Frames suchen und die Koordinaten rausschreiben. Abgelegt in der Form

MuskelAnfangA = [ "Frame" , "x-Koordinate" , "y-Koordinate"]


Wenn etwas unverständlich ist, gerne nachfragen. Ich bin auf eure Ideen und Möglichkeiten mein Vorhaben umzusetzen gespannt. Smile
Private Nachricht senden Benutzer-Profile anzeigen


Stefsn
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 13.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2018, 01:11     Titel:
  Antworten mit Zitat      
Für den, den es interessiert, habe ich erstmal eine Lösung programmiert. Klappt ganz gut, aber sicher könnte man das noch ein wenig komprimieren mit dem nötigen KnowHow. Leider noch nicht so viele Kommentare aber sehr elementar. Smile

Code:


prompt = 'What shall be searched for?';
search = input(prompt,'s');


Str = fileread('OSP_VJ_40_POST_r1.txt');
CStr = regexp(Str, '\n', 'split');
expression = ['<property name="name" type="string">' search '</property>'];
Zeilenanzahl = length(CStr);
%Zeilen zum Start suchen
matchS = ~cellfun('isempty', strfind(CStr, expression));
%Zeilen f&#65533;rs Ende suchen
matchE = ~cellfun('isempty', strfind(CStr, '<property name="array" type="string">{'));
%Zeilen f&#65533;rs Frames
matchF = ~cellfun('isempty', strfind(CStr, '<property name="['));

%Finde Startzeile
go = 1;
index = 1;
while(go)
    if matchS(index) == 1
        Startzeile = index;
        go = 0;
    end
    index = index+1;
end
%Finde Stopzeile
go = 1;
index = 1;
while(go)
    if matchE(index) == 1
        Stopzeile = index;
        if Startzeile < index
            go = 0;
        end
    end
    index = index+1;
end

%Arraygr&#65533;&#65533;e feststellen
lauf = char(CStr(Stopzeile));
ArrayGroesse = 1;
for c = 1:length(lauf)
    if lauf(c) == ','
        ArrayGroesse = ArrayGroesse +1;
    end
end

MuskelAnfangA = zeros(ArrayGroesse, 3);

%Finde den n&#65533;chsten Frame
Counter = 0;
index = 1;

s = char(CStr(145));
SNeu = s(findstr(s,'">')+2:findstr(s,'</p')-1);  

for c = Startzeile:Stopzeile
    if  matchF(c) == 1
        s = char(CStr(c));
        MuskelAnfangA(index,1) = str2num(s(findstr(s,'"[')+2:findstr(s,']"')-1));        
        s = char(CStr(c+2));
        MuskelAnfangA(index,2) = str2num(s(findstr(s,'">')+2:findstr(s,'</p')-1));      
        s = char(CStr(c+3));
        MuskelAnfangA(index,3) = str2num(s(findstr(s,'">')+2:findstr(s,'</p')-1));
        index = index +1;
    end
end

fid = fopen('Mymatrix.txt','wt');

for ii = 1:size(MuskelAnfangA,1)
    fprintf(fid,'%g\t',MuskelAnfangA(ii,:));
    fprintf(fid,'\n');
end
fclose(fid)


 
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 - 2024 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.