Verfasst am: 15.04.2013, 21:51
Titel: Kurze Änderung einer Textdatei
Hallo zusammen,
ich habe ein kleines Problem, das ich irgendwie nicht gelöst bekomme. Ich habe mich schon an einem eigenen Code gesetzt, aber war nicht sehr erfolgreich, vielleicht kann mir einer von euch kurz helfen.
Ich habe eine txt Datei, wie unten aufgebaut in der Objekte definiert sind (Traffic.0., Traffic.1. etc.). Derzeit besteht jedes Objekt aus einer Anfangsdefinition, einzelnen Manövern und einer Endcondition beim letzten Manöver. Statt diese Endcondition nur beim letzten Manöver zu haben hätte ich Sie gerne hinter jedem einzelnen Manöver. Also statt
Zitat:
Traffic.0.Man.5.Limit = t 0.0997
Traffic.0.Man.5.LongDyn = v 0.00
Traffic.0.Man.5.Visib = 1
Traffic.0.Man.6.Limit = t 0.1000
Traffic.0.Man.6.LongDyn = v 0.00
Traffic.0.Man.6.Visib = 1
Traffic.0.Man.6.Endcondition = Vhcl.sRoad >=100.31586
dann
Zitat:
Traffic.0.Man.5.Limit = t 0.0997
Traffic.0.Man.5.LongDyn = v 0.00
Traffic.0.Man.5.Visib = 1
Traffic.0.Man.5.Endcondition = Vhcl.sRoad >=100.31586
Traffic.0.Man.6.Limit = t 0.1000
Traffic.0.Man.6.LongDyn = v 0.00
Traffic.0.Man.6.Visib = 1
Traffic.0.Man.6.Endcondition = Vhcl.sRoad >=100.31586
Und das gleiche bei "Traffic.0.Man.4." usw.
Die Endcondition ist bei jedem Objekt verschieden. Ich bekomme es hin die Objekte rauszulesen und die jeweilige Endcondition, aber irgendwie habe ich Probleme damit die Textdatei neu zu schreiben. Kann mir jemand weiterhelfen, wie das oben genannte Problem leicht in Matlab zu lösen ist?
Hier der Aufbau einer typischen Textdatei. In echt habe ich teilweise mehr als 50 Objekte, wodurch die manuelle Anpassung sehr aufwendig wird.
Zitat:
Traffic.N = 2
Traffic.SpeedUnit = ms
Traffic.0.Name = 00
Traffic.0.Info = ACC Object0
Traffic.0.Movie.Geometry = B2003_lq.mobj
Traffic.0.Color = 1.0 0.0 0.0
Traffic.0.Basics.Dimension = 4.1 1.7 1.2
Traffic.0.Basics.Offset = 0.2 0.0
Traffic.0.Init.Orientation = 0.0 0.0 0.0
Traffic.0.Init.v = 0.00
Traffic.0.Init.Road = 25.2162
Traffic.0.Man.StartCondition = Vhcl.sRoad >=0.0000
Traffic.0.Man.N = 7
Traffic.0.Man.0.Limit = t 0.0998
Traffic.0.Man.0.LongDyn = v 0.00
Traffic.0.Man.0.Visib = 1
Traffic.0.Man.1.Limit = t 0.0999
Traffic.0.Man.1.LongDyn = v 0.00
Traffic.0.Man.1.Visib = 1
Traffic.0.Man.2.Limit = t 0.1002
Traffic.0.Man.2.LongDyn = v 0.00
Traffic.0.Man.2.Visib = 1
Traffic.0.Man.3.Limit = t 0.1000
Traffic.0.Man.3.LongDyn = v 0.00
Traffic.0.Man.3.Visib = 1
Traffic.0.Man.4.Limit = t 0.1000
Traffic.0.Man.4.LongDyn = v 0.00
Traffic.0.Man.4.Visib = 1
Traffic.0.Man.5.Limit = t 0.0997
Traffic.0.Man.5.LongDyn = v 0.00
Traffic.0.Man.5.Visib = 1
Traffic.0.Man.6.Limit = t 0.1000
Traffic.0.Man.6.LongDyn = v 0.00
Traffic.0.Man.6.Visib = 1
Traffic.0.Man.6.Endcondition = Vhcl.sRoad >=100.31586
Traffic.1.Name = 01
Traffic.1.Info = ACC Object1
Traffic.1.Movie.Geometry = B2003_lq.mobj
Traffic.1.Color = 1.0 0.0 0.0
Traffic.1.Basics.Dimension = 4.1 1.7 1.2
Traffic.1.Basics.Offset = 0.2 0.0
Traffic.1.Init.Orientation = 0.0 0.0 0.0
Traffic.1.Init.v = 9.29
Traffic.1.Init.Road = 316.6380 -100
Traffic.1.Man.StartCondition = Vhcl.sRoad >=284.0934
Traffic.1.Man.N = 5
Traffic.1.Man.0.Limit = t 0.1000
Traffic.1.Man.0.LongDyn = v 9.29
Traffic.1.Man.0.LatDyn = y 99
Traffic.1.Man.0.Visib = 0
Traffic.1.Man.1.Limit = t 0.1000
Traffic.1.Man.1.LongDyn = v 9.42
Traffic.1.Man.1.Visib = 1
Traffic.1.Man.2.Limit = t 0.1000
Traffic.1.Man.2.LongDyn = v 9.41
Traffic.1.Man.2.Visib = 1
Traffic.1.Man.3.Limit = t 0.1000
Traffic.1.Man.3.LongDyn = v 9.48
Traffic.1.Man.3.Visib = 1
Traffic.1.Man.4.Limit = t 0.1000
Traffic.1.Man.4.LongDyn = v 9.48
Traffic.1.Man.4.Visib = 1
Traffic.1.Man.4.Endcondition = Vhcl.sRoad >=407.8171
was hast Du bisher geschrieben. Wenn Du es geschafft hast, die Datei zu lesen und ein struct daraus zu erzeugen dürfte das Schreiben eigentlich das Einfachste der Probleme sein:
Code:
fout = fopen('datei','w');
fprintf(fout, 'Traffic.N = %i\n', length(traffic));
fprintf(fout, 'Traffic.SpeedUnit = %s', speedunit);
for i=0:length(traffic)-1
tra = traffic(i+1);
fprintf(fout, 'Traffic.%i.Man.N = %i', i, length(tra.Man));
for j=0:length(tra.Man)-1
man = tra.Man(j+1);
fprintf(fout, 'Traffic.%i.Man.%i.Limit = t %.4f', i, j, man.Limit);
end end fclose(fout);
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.