ersetzen von timestamps in xml-datei

Von: , Frage gestellt am Mo, 16. Mai 2005

Das Chatprogramm Trillian erzeugt log-files in XML-form.
Die Zeiten werden dabei immer im Format

time="0123456789" angegeben, wobei es sich sich um das unix timestamp-format handelt, also die sekunden, die seit dem 1.1.1970 um 0:00 uhr vergangen sind...

Da ich dummerweise für wenige Tage das Datum meines PCs um einen Monat vorgestellt habe, stimmen nun viele dieser Timestamps in den xml-files nicht mehr.

Das Problem liegt also darin: Ich möchte alle timestamps, die über
1118330356 liegen um 2678400 verkleinern, da dies der rücksetzung um einen Monat entspricht.

Kann mir jemand einen verständlichen Lösungsvorschlag geben?

Notfalls könnte ich auch vorher die fehlerhaften Timestamps herauskopieren und somit müsste ich dann einfach alle timestamps um 2678400 verkleinern, aber selbst dass ist mir mit meinem bisherigen Wissensstand nicht möglich ;)

Ich würde mich sehr auf eure Hilfe freuen :) gruß mo

6 Antworten zu dieser Frage

  1. Antwort von nach einer Stunde 0 hilfreich
    Re: ersetzen von timestamps in xml-datei

    Das Problem liegt also darin: Ich möchte alle timestamps, die
    über
    1118330356 liegen um 2678400 verkleinern, da dies der
    rücksetzung um einen Monat entspricht.

    Kann mir jemand einen verständlichen Lösungsvorschlag geben?

    Notfalls könnte ich auch vorher die fehlerhaften Timestamps
    herauskopieren und somit müsste ich dann einfach alle
    timestamps um 2678400 verkleinern, aber selbst dass ist mir
    mit meinem bisherigen Wissensstand nicht möglich ;)

    Ich würde mich sehr auf eure Hilfe freuen :) gruß mo
    Wie ist denn dein Wissensstand?

    Wenn das wirkllich gültiges XML ist und du in der Programmiersprache deiner Wahl weisst, wie man damit umgehen kann, sollte das doch garkein Problem sein. Jede halbwegs gängige Sprache hat mittlerweile irgendwelche Zusatzpakete, die mit XML richtig umgehen können. In Pseudocode dürfte das dann so aussehen:

    logfile = open_XML_Document( "logfile" );
    // Das Element finden, das alle Log-Einträge als child-Elemente hat
    // Dieses Element sei mal LogContainer
    LogEntry = LogContainer.getFirstChild();
    while( LogEntry ) { // solange wir einen gültigen Eintrag haben
    time = LogEntry.getAttribute( "time" );
    // muss evtl. erst nach integer umgewandelt werden...
    if( time > 1118330356 ) {
    time = time - 2678400;
    LogEntry.setAttribute( string(time) );
    }
    LogEntry = LogEntry.nextSibling(); // nächster Eintrag
    }
    // jetzt das komplette Dokument wieder in eine Datei speicherm und wenn
    // das Ergebnis korrekt ist, die alte Datei damit überschreiben
    

    • Antwort von nach 3 Stunden 0 hilfreich
      Re^2: ersetzen von timestamps in xml-datei

      Wie ist denn dein Wissensstand?

      Wenn das wirkllich gültiges XML ist und du in der
      Programmiersprache deiner Wahl weisst, wie man damit umgehen
      kann, sollte das doch garkein Problem sein. Jede halbwegs
      gängige Sprache hat mittlerweile irgendwelche Zusatzpakete,
      die mit XML richtig umgehen können. In Pseudocode dürfte das
      dann so aussehen:

      logfile = open_XML_Document( "logfile" );
      // Das Element finden, das alle Log-Einträge als
      child-Elemente hat
      // Dieses Element sei mal LogContainer
      LogEntry = LogContainer.getFirstChild();
      while( LogEntry ) { // solange wir einen gültigen Eintrag
      haben
      time = LogEntry.getAttribute( "time" );
      // muss evtl. erst nach integer umgewandelt werden...
      if( time > 1118330356 ) {
      time = time - 2678400;
      LogEntry.setAttribute( string(time) );
      }
      LogEntry = LogEntry.nextSibling(); // nächster Eintrag
      }
      // jetzt das komplette Dokument wieder in eine Datei speicherm
      und wenn
      // das Ergebnis korrekt ist, die alte Datei damit
      überschreiben
      

      Vielen Dank erst einmal.. Leider ist mein Wissensstand in Sachen Programmierung so ziemlich 0.. Deshalb müsste ich mich wohl erst mal in die Materie einarbeiten... Schon schlimm was eine kleine Sache wie ein falsch eingestelltes Datum für Folgen haben kann *g*

      gruß, mo

      PS: Falls aber jemand Lust haben sollte, mir so ein kleines Programm zu schreiben, wäre ich natürlich sehr dankbar *g* ;)

  2. Antwort von nach 22 Stunden 0 hilfreich
    Re: ersetzen von timestamps in xml-datei

    time="0123456789" angegeben, wobei es sich sich um das unix
    timestamp-format handelt, also die sekunden, die seit dem
    1.1.1970 um 0:00 uhr vergangen sind...
    Das Problem liegt also darin: Ich möchte alle timestamps, die
    über
    1118330356 liegen um 2678400 verkleinern, da dies der
    rücksetzung um einen Monat entspricht.
    Hi Moritz,
    kenne keine xml-Dateien, wenn du Excel hast oder jmd anderes, lass mal das Excel-Makro laufen und poste mal hier so 20 zeilen was da so in Spate A drinsteht, sprich wie diese timestamps exakt nach dem Einlesen aussehen.
    Gruß
    Reinhard

    • Antwort von nach 22 Stunden 0 hilfreich
      ups, mit Makro gehts besser*g

      Sub tt()
      nr = FreeFile
      Open "c:\test\xyz.xml" For Input As #nr
      While Not EOF(nr)
      zei = zei + 1
      Input #nr, Satz ' entweder so oder so: "Line Input #nr, Satz"
      Cells(zei, 1) = Satz
      Wend
      Close
      End Sub
      

      • Antwort von nach 7 Tagen 0 hilfreich
        Re: ups, mit Makro gehts besser*g

        Hallo Reinhard,
        Ich habe leider keinerlei erfahrung mit makros (bin überhaupt nicht mit programmierung beschäftigt) und habe dein makro einfach mal eingefügt, so dass das dann so aussah:

        Sub tt()
        nr = FreeFile
        Open "C:\Dokumente und Einstellungen\Moritz\Desktop\test2.xml" For Input As #nr
        While Not EOF(nr)
        zei = zei + 1
        Input #nr, Satz ' entweder so oder so: "Line Input #nr, Satz"
        Cells(zei, 1) = Satz
        Wend
        Close
        End Sub
        


        Wie du siehst habe ich eine testdatei auf dem desktop und habe in dem makro also entsprechend den pfad angepasst und dann auf Sub/Userform ausführen geklickt. Muss ich sonst noch etwas im Makro anpassen?

        Eigentlich ist die xml-datei einfach strukturiert, nämlich nach folgendem schema:

        <session type="start" time="1116927403" medium="MSN" to="d***%40web%2Ede" from="m***%40hotmail%2Ecom"/>
        <message type="incoming_privateMessage" time="1116927403" medium="MSN" to="m***%40hotmail%2Ecom" from="d***%40web%2Ede" from_display="Rike" text="hi"/>
        <message type="outgoing_privateMessage" time="1116927426" medium="MSN" to="d***%40web%2Ede" from="m***%40hotmail%2Ecom" from_display="mo" text="hi"/>
        <session type="stop" time="1116930456" medium="MSN" to="d***%40web%2Ede" from="m***%40hotmail%2Ecom"/>
        


        Eigentlich sind diese Angaben nun ja eindeutig.. ich hoffe jemand kann mir (nicht-prgrammierer) in einer verständlichen Weise helfen :)

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!