Ersetzen von timestamps in xml-datei

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 :wink:

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

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 :wink:

Ich würde mich sehr auf eure Hilfe freuen :smile: 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

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* :wink:

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

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

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:

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

Hi Moritz,
habe das Brett verwechselt, schau mal hier:
http://www.wer-weiss-was.de/cgi-bin/forum/showarticl…
Gruß
Reinhard