Datenstruktur konvertieren

  • Allgemein

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Eierlein.

    Datenstruktur konvertieren

    Hallo liebes VB-Paradise Team,

    ich habe wieder ein Problem. Ich möchte wieder einmal Dateninhalte ändern.
    Mit dem Mapeditor habe ich rund 400 Objekte hinzugefügt und muss diese nun in ausführbare Form meines Phyton-Objectstreamer konvertiert werden.

    So sollte aus:

    Quellcode

    1. rem *** hotel ***
    2. Object.create hotel
    3. Object.absolutePosition -15.920/50.417/-23.059
    4. Object.rotation 8.0/0.0/0.0
    5. Object.layer 1


    Der ausführbare Code der Phyton Engine:

    Quellcode

    1. host.rcon_invoke("ObjectTemplate.active hotel")
    2. host.rcon_invoke("ObjectTemplate.setNetworkableInfo BasicInfo")
    3. host.rcon_invoke("ObjectTemplate.create ObjectSpawner hotel_01")
    4. host.rcon_invoke("ObjectTemplate.activeSafe ObjectSpawner hotel_01")
    5. host.rcon_invoke("ObjectTemplate.hasMobilePhysics 0")
    6. host.rcon_invoke("ObjectTemplate.setObjectTemplate 1 hotel")
    7. host.rcon_invoke("Object.create hotel_01")
    8. host.rcon_invoke("Object.absolutePosition -15.920/50.417/-23.059")
    9. host.rcon_invoke("Object.rotation 8.0/0.0/0.0")
    10. host.rcon_invoke("Object.team 1")
    11. host.rcon_invoke("Object.delete")


    Man beachte das ich über 400 Objekte habe, die umgewandelt werden müssen!
    Ein Script zum Konverten der Daten wäre nicht schlecht.
    Ihr würdet mir sehr weiterhelfen, denn sonst müsste ich Tage verbringen dies umzuwandeln.


    Mit freundlichen Grüßen,

    Kes
    Ein Script zum Konverten der Daten wäre nicht schlecht.
    Ihr würdet mir sehr weiterhelfen, denn sonst müsste ich Tage verbringen dies umzuwandeln.

    Hallo erstmal im Forum.

    Abgesehen davon, dass du dein Problem nicht verständlich/vollständig erklärt hast, werden wir nicht die komplette Arbeit für dich machen.
    Wir können dir Code Beispiele geben oder dir zeigen wie du strings suchen und ersetzen kannst.
    Es klingt so, als könntest du die Regex Klasse gebrauchen (Link z.B. in meiner Singnatur).

    Wenn du eine konkrete Frage hast helfen wir dir gerne. Ein bisschen Eigeninitiative kann man schon verlangen.
    Tut mir leid wegen der nicht konkreten Frage :)

    Also,

    ich habe einen Battefield 2 Server, bei dem ich die Gulf von Oman Karte modifiziert habe.
    Ich habe mit dem EA Map Editor einige Objekte hinzugefügt und möchte diese nun beim Start des Server serverseitig erstellen indem das Script beim Start abgearbeitet wird. Dies erfolgt indem das Battlefield 2 Python Kernel diese mit "host.rcon_invoke" ausführt.
    Der Mapeditor erstellt beim abspeichern eine Datei namens "staticobjects.con" in der meine neu gesetzten Objekte mit koodinaten stehen:

    Quellcode

    1. rem *** hotel ***Object.create hotel
    2. Object.absolutePosition -15.920/50.417/-23.059
    3. Object.rotation 8.0/0.0/0.0 Object.layer 1
    4. # Next Object
    5. rem *** housemec ***
    6. Object.create housemec
    7. Object.absolutePosition -25.920/54.417/-21.059
    8. Object.rotation 8.0/0.0/0.0 Object.layer 1



    Dann muss ich dies hier vom Mapeditor ausgespuckte in das vom Python zu lesende umwandeln:


    Quellcode

    1. host.rcon_invoke("ObjectTemplate.active hotel")
    2. host.rcon_invoke("ObjectTemplate.setNetworkableInfo BasicInfo")
    3. host.rcon_invoke("ObjectTemplate.create ObjectSpawner hotel_01") # Mit _01 am Ende des Objektnamen wird ein neues Template definiert
    4. host.rcon_invoke("ObjectTemplate.activeSafe ObjectSpawner hotel_01")
    5. host.rcon_invoke("ObjectTemplate.hasMobilePhysics 0")
    6. host.rcon_invoke("ObjectTemplate.setObjectTemplate 1 hotel")
    7. host.rcon_invoke("Object.create hotel_01")
    8. host.rcon_invoke("Object.absolutePosition -15.920/50.417/-23.059")
    9. host.rcon_invoke("Object.rotation 8.0/0.0/0.0")
    10. host.rcon_invoke("Object.team 1")
    11. host.rcon_invoke("Object.delete")
    12. # Next Object
    13. host.rcon_invoke("ObjectTemplate.active housemec")
    14. host.rcon_invoke("ObjectTemplate.setNetworkableInfo BasicInfo")
    15. host.rcon_invoke("ObjectTemplate.create ObjectSpawner housemec_01")
    16. host.rcon_invoke("ObjectTemplate.activeSafe ObjectSpawner housemec_01")
    17. host.rcon_invoke("ObjectTemplate.hasMobilePhysics 0")
    18. host.rcon_invoke("ObjectTemplate.setObjectTemplate 1 housemec")
    19. host.rcon_invoke("Object.create housemec_01")
    20. host.rcon_invoke("Object.absolutePosition -15.920/50.417/-23.059")
    21. host.rcon_invoke("Object.rotation 8.0/0.0/0.0")
    22. host.rcon_invoke("Object.team 1")
    23. host.rcon_invoke("Object.delete")


    Eigentlich Simpel, denn ich möchte das ganze ja nur in ein anderes Format umwandeln. ich weis nur nicht wie.
    Ich habe rund 420 Ojekte und bin erst bei ~70 und es ist mühsam das umzuwandeln. Ich Danke für jede kleine Hilfe die mir gegeben wird :)

    Mit freundlichen Grüßen
    Eigentlich Simpel

    Stimmt, wenn man die einfachsten Grundlagen beherscht.

    Ich bin ja nicht so.
    Hier ein Beispiel als VBS-Script:

    VB.NET-Quellcode

    1. Option Explicit
    2. Dim fso, Datei_in, datei_out, t, create, hri
    3. Const For_Input = 1, ForOutput = 2
    4. hri = "host.rcon_invoke(" & Chr(34) & "Object"
    5. Set FSO = CreateObject("Scripting.FileSystemObject")
    6. Set Datei_in = FSO.OpenTextFile("staticobjects.con", For_Input)
    7. Set datei_out = fso.OpenTextFile("python.txt", ForOutput, True)
    8. Do Until Datei_in.AtEndOfStream
    9. t = Datei_in.ReadLine
    10. If InStr(1, t, "Object.create") Then
    11. create = Mid(t, InStr(t, "create") +7)
    12. datei_out.WriteLine(hri & "Template.active " & create & Chr(34) & ")")
    13. datei_out.WriteLine(hri & "Template.setNetworkableInfo BasicInfo" & Chr(34) & ")")
    14. datei_out.WriteLine()
    15. datei_out.WriteLine(hri & "Template.create ObjectSpawner " & create & "_01" & Chr(34) & ")")
    16. datei_out.WriteLine(hri & "Template.activeSafe ObjectSpawner " & create & "_01" & Chr(34) & ")")
    17. datei_out.WriteLine(hri & "Template.setObjectTemplate 1 " & create & Chr(34) & ")")
    18. datei_out.WriteLine()
    19. datei_out.WriteLine(hri & ".create " & create & "_01" & Chr(34) & ")")
    20. End If
    21. If InStr(t, "absolutePosition") Then
    22. datei_out.WriteLine(hri & Mid(t, 7) & Chr(34) & ")")
    23. End If
    24. If InStr(t, "rotation") Then
    25. datei_out.WriteLine(hri & Mid(t, 7, 21) & Chr(34) & ")")
    26. datei_out.WriteLine(hri & ".team 1" & Chr(34) & ")")
    27. datei_out.WriteLine(hri & ".delete" & Chr(34) & ")")
    28. End If
    29. If InStr(t, "# Next Object") Then
    30. datei_out.WriteLine(t & vbCrLf)
    31. End If
    32. Loop
    33. Datei_in.Close
    34. datei_out.Close


    Damit du auch etwas zu tun hast, fehlt in der Ausgabedatei eine Zeile.
    Ich hoffe, das du weißt, was ein VBS-Script ist. :D