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

Daten aus xml / txt Datei lesen

 

newbie82
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 10.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.06.2010, 12:53     Titel: Daten aus xml / txt Datei lesen
  Antworten mit Zitat      
Hallo,

ich habe diese txt Datei (könnte sie auch als XML speichern lassen, je nachdem was einfacher ist):

Code:

<?xml version="1.0"?>

<!-- generated on 6/4/2010 12:10:59 PM by SUMO guisim Version 0.11.1
<configuration>

    <input>
        <net-file value="C:\Diplomarbeit\SUMO\install\sumo-winbin-0.11.1\teststrecke.net.xml"/>
        <route-files value="C:\Diplomarbeit\SUMO\install\sumo-winbin-0.11.1\teststrecke.rou.xml"/>
        <additional-files value="C:\Diplomarbeit\SUMO\install\sumo-winbin-0.11.1\teststrecke.add.xml"/>
    </input>

    <time>
        <begin value="0"/>
        <end value="10000"/>
    </time>

    <gui_only>
        <gui-settings-file value=""/>
    </gui_only>

</configuration>
-->

<vehicle-type-probes>
    <timestep time="0" id="vtype1" vtype="">
        <vehicle id="vehicle0" lane="1to2_0" pos="34.37" x="34.37" y="-1.65" speed="7.46"/>
    </timestep>
    <timestep time="10" id="vtype1" vtype="">
        <vehicle id="vehicle0" lane="1to2_0" pos="151.10" x="151.10" y="-1.65" speed="13.90"/>
        <vehicle id="vehicle1" lane="1to2_0" pos="9.80" x="9.80" y="-1.65" speed="3.88"/>
    </timestep>
    <timestep time="20" id="vtype1" vtype="">
        <vehicle id="vehicle0" lane="1to2_0" pos="290.10" x="290.10" y="-1.65" speed="13.90"/>
        <vehicle id="vehicle1" lane="1to2_0" pos="96.42" x="96.42" y="-1.65" speed="12.32"/>
    </timestep>
    <timestep time="30" id="vtype1" vtype="">
        <vehicle id="vehicle0" lane="1to2_0" pos="429.10" x="429.10" y="-1.65" speed="13.90"/>
        <vehicle id="vehicle1" lane="1to2_0" pos="234.50" x="234.50" y="-1.65" speed="13.90"/>
        <vehicle id="vehicle2" lane="1to2_0" pos="42.68" x="42.68" y="-1.65" speed="8.31"/>
    </timestep>
    <timestep time="40" id="vtype1" vtype="">
        <vehicle id="vehicle0" lane="1to2_0" pos="568.10" x="568.10" y="-1.65" speed="13.90"/>
        <vehicle id="vehicle1" lane="1to2_0" pos="373.50" x="373.50" y="-1.65" speed="13.90"/>
        <vehicle id="vehicle2" lane="1to2_0" pos="165.00" x="165.00" y="-1.65" speed="13.90"/>
    </timestep>
    <timestep time="50" id="vtype1" vtype="">
        <vehicle id="vehicle0" lane="1to2_0" pos="707.10" x="707.10" y="-1.65" speed="13.90"/>
        <vehicle id="vehicle1" lane="1to2_0" pos="512.50" x="512.50" y="-1.65" speed="13.90"/>
        <vehicle id="vehicle2" lane="1to2_0" pos="304.00" x="304.00" y="-1.65" speed="13.90"/>
    </timestep>
    <timestep time="60" id="vtype1" vtype="">
        <vehicle id="vehicle0" lane="1to2_0" pos="846.10" x="846.10" y="-1.65" speed="13.90"/>
        <vehicle id="vehicle1" lane="1to2_0" pos="651.50" x="651.50" y="-1.65" speed="13.90"/>
        <vehicle id="vehicle2" lane="1to2_0" pos="443.00" x="443.00" y="-1.65" speed="13.90"/>
    </timestep>
    <timestep time="70" id="vtype1" vtype="">
        <vehicle id="vehicle0" lane="1to2_0" pos="985.11" x="985.11" y="-1.65" speed="13.90"/>
        <vehicle id="vehicle1" lane="1to2_0" pos="790.50" x="790.50" y="-1.65" speed="13.90"/>
        <vehicle id="vehicle2" lane="1to2_0" pos="582.00" x="582.00" y="-1.65" speed="13.90"/>
    </timestep>
    <timestep time="80" id="vtype1" vtype="">
        <vehicle id="vehicle0" lane="1to2_0" pos="1124.11" x="1124.11" y="-1.65" speed="13.90"/>
        <vehicle id="vehicle1" lane="1to2_0" pos="929.51" x="929.51" y="-1.65" speed="13.90"/>
        <vehicle id="vehicle2" lane="1to2_0" pos="721.00" x="721.00" y="-1.65" speed="13.90"/>
    </timestep>
    <timestep time="90" id="vtype1" vtype="">
        <vehicle id="vehicle0" lane="1to2_0" pos="1263.11" x="1263.11" y="-1.65" speed="13.90"/>
        <vehicle id="vehicle1" lane="1to2_0" pos="1068.51" x="1068.51" y="-1.65" speed="13.90"/>
        <vehicle id="vehicle2" lane="1to2_0" pos="860.00" x="860.00" y="-1.65" speed="13.90"/>
    </timestep>
    <timestep time="100" id="vtype1" vtype="">
        <vehicle id="vehicle0" lane="1to2_0" pos="1402.11" x="1402.11" y="-1.65" speed="13.90"/>
        <vehicle id="vehicle1" lane="1to2_0" pos="1207.51" x="1207.51" y="-1.65" speed="13.90"/>
        <vehicle id="vehicle2" lane="1to2_0" pos="999.01" x="999.01" y="-1.65" speed="13.90"/>
    </timestep>
</time>
 


es handelt sich um 3 Fahrzeuge (vehicle0, vehicle1 und vehicle2), die auf einer Straße fahren. Geschwindigkeit und Position in (x,y) Koordinaten werden gemessen.

Ich möchte diese Datei nun mit Matlab auslesen und die x und y Koordinaten in 3 verschiedenen Matrizen (pro Auto eine) speichern, damit die Position am Ende graphisch angezeigt werden kann.

Das hier hab ich schon versucht, also um nur eine Zeile (vehicle0) auszulesen:

Code:

fid=fopen('vtype.txt','r');
daten=textscan(fid,'%*s %*s %*s %*s %*s" %f" %*s" %f" %*s','Headerlines',25);
fclose(fid);
daten=[daten{:}]
plot(daten)
 


Allerdings funktioniert das schon nicht... und dies für 3 Fahrzeuge hinzukriegen, ist für mich unmöglich Sad

Wer kann mir helfen?

Vielen Dank!

newbie82
Private Nachricht senden Benutzer-Profile anzeigen


quant82
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 97
Anmeldedatum: 30.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.06.2010, 13:14     Titel:
  Antworten mit Zitat      
guck ma hier

http://www.gomatlab.de/xml-datei-auslesen-t1527.html
Private Nachricht senden Benutzer-Profile anzeigen
 
newbie82
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 10.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.06.2010, 14:20     Titel:
  Antworten mit Zitat      
Hmm dieser Link hat mich jetzt nicht viel weiter gebracht Sad

Die xmlread Hilfe habe ich gelesen, aber irgendwie werde ich trotzdem nicht schlau daraus, bin noch ziemlich am Anfang Sad

Kann mir jemand ein Beispiel geben, wie ich es anpacken könnte? Das wäre sehr nett, danke.
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.06.2010, 14:23     Titel: lk
  Antworten mit Zitat      
hallo, sag mal genau was du lesen möchtest, liest du von der datei Oben?
und was willst du eigentlich ploten?

gruss
 
newbie82
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 10.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.06.2010, 14:36     Titel:
  Antworten mit Zitat      
Hi,

ich brauche nur die Zahlen, die hinter x= und y= stehen, und zwar für jeden Zeitschritt (time="10", "20", "30", ...) und für jedes Fahrzeug (id="vehicle0", id="vehicle1", id="vehicle2").

Aber ich weiß nicht, wie ich darauf zugreifen kann...

Geplottet werden sollen dann diese x und y Daten.

Vielen Dank schon mal!
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.06.2010, 14:53     Titel: lk..
  Antworten mit Zitat      
kannst du die txt-datei hier hochladen dass ich auch experimentieren kann?

danke
 
newbie82
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 10.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.06.2010, 15:02     Titel:
  Antworten mit Zitat      
Hier ist die Datei, die ich habe.

In diesem Fall ist erst nur 1 Fahrzeug anwesend, Fahrzeug 2 und 3 kommen später dazu.

Kann man trotzdem alle x und y Werte für jedes Fahrzeug einzeln speichern?

Danke!!

vehicles.txt
 Beschreibung:

Download
 Dateiname:  vehicles.txt
 Dateigröße:  30.95 KB
 Heruntergeladen:  610 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 10.06.2010, 15:56     Titel:
  Antworten mit Zitat      
hi,

das hat mir mein nervenvorrat von heute und morgen gekostet ;)
Code:

file='C:\Documents and Settings.....deinedatei.txt';

fid=fopen(file,'r');
k=1;
while(1)
    line=fgetl(fid);
    if ~ischar(line), break, end
    if(numel(line)<10),continue,
    elseif(line(10)=='v')
        vector(k,:)=sscanf(line,'%*s%*s%*s%*s x="%f" y="%f"',[1 2]);
        k=k+1;
    end
end

x=vector(:,1);
y=vector(:,2);

fclose(fid);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
newbie82
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 10.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2010, 01:33     Titel:
  Antworten mit Zitat      
Vielen Dank für deine Hilfe, jawad!

Ist es auch möglich, vielleicht durch eine if-Schleife, diese Matrizen zu füllen?

Also if id="vehicle0" -> dann speicher den zugehörigen Wert x und y in matrix0.
Und if id="vehicle1" -> dann speicher den zugehörigen Wert x und y in matrix1 usw.

Die ganze Datei wird also durchlaufen und nur die Zahlen, die in Frage kommen (für die angegebenen IDs vehicle0 und vehicle1), werden in der richtigen Matrix abgespeichert.

Das wäre cool, wenn es so irgendwie funktionieren würde, krieg's nur leider nicht hin Sad dafür fehlt mir noch zuviel Wissen Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 17.06.2010, 07:42     Titel:
  Antworten mit Zitat      
Hallo,

sag mal, hats funktioniert für vehicle1?
wenn ja dann wirds auch für beide funktionieren. kannst du jetzt die ganze datei hochladen damit wir experimentieren können? danke.

gruss
Private Nachricht senden Benutzer-Profile anzeigen
 
newbie82
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 10.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2010, 08:20     Titel:
  Antworten mit Zitat      
Hi!

Ja, das hat funktioniert Smile danke!

Meine Datei sieht im Moment so aus (s. Anhang).
Die Autos heißen im Moment "RandX" (X=Zahl), es muss aber immer noch dasselbe ausgelesen werden (x=" " und y= " ").

Vielen Dank!

vtype.txt
 Beschreibung:

Download
 Dateiname:  vtype.txt
 Dateigröße:  1.5 MB
 Heruntergeladen:  578 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 17.06.2010, 08:27     Titel:
  Antworten mit Zitat      
du sagtest vohin vehicle0 und vehicle1, in der datei sehe ich aber Rand0 bis Rand99, willst du jetzt nur Rand0 und rand1 oder alle jede in eigene matrix??
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
newbie82
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 10.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2010, 13:41     Titel:
  Antworten mit Zitat      
Wenn es geht, alle in eine eigene Matrix Embarassed

Oder aber, dass man am Anfang zB 10 Autos eingibt (manuell im Code) und nur diese ausliest..

Oder ist das zu kompliziert?
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 17.06.2010, 14:49     Titel:
  Antworten mit Zitat      
probiel mal diesen Code,
die zeile mit eval verbraucht 83% der Zeit insgesamt ca. 90 sekunden
das kann bestimmt optimiert werden, weiss aber nicht wie, frag einen Forum-Meister ;)
Code:

clear all
file='C:\Documents and Settings\........\Desktop\tt.txt';

fid=fopen(file,'r');
k=1;
while(1)
    line=fgetl(fid);
    if ~ischar(line), break, end
    if(numel(line)<10),continue,
    elseif(line(10)=='v')
        vector=sscanf(line,'%*s%*s%*s%*s x="%f" y="%f"',[1 2]);
        vehicle=sscanf(line,'%*s id="Rand%f" ');

   eval(sprintf('matrix%g(k,:)=[%f %f]',vehicle,vector));
   if(vehicle==99)
      k=k+1;
   end
    end
end



fclose(fid);
 

_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
newbie82
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 10.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2010, 16:35     Titel:
  Antworten mit Zitat      
Hmm, sorry Confused funktioniert leider nicht ganz.. (oder ich kapier's einfach nicht...)

Gebe ich deinen Code ein, erhalte ich:

Code:

matrix =

  1.0e+003 *

    4.1426   -0.0050


matrix =

  1.0e+003 *

    4.1674   -0.0050


matrix =

  1.0e+003 *

    4.1923   -0.0050
 


Und wenn ich im Workspace auf "matrix" oder "vektor" klicke, krieg ich jeweils nur zwei Werte.

Ich brauch alle x und y Werte in einer Matrix, zB so:

matrix_vehicle0:
Code:

1178.91     1526.83
1177.62     1527.37
1174.46     1528.69
1170.01     1530.55
1163.97     1533.07
1156.58     1536.16
1147.77     1539.84
    .           .
    .           .
    .           .
 


Das letzte Mal hattest du es so, wie ich es wollte Very Happy
Nur brauch ich jetzt noch irgendwas, damit ich viel mehr vehicles (oder auch Rand) abarbeiten kann und die Zahlen gleich der richtigen Matrix zuweise...
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.