Hallo,
ich brauche mal wieder einen guten Tipp. Ich habe eine xml-Datei. In dieser befinden sich viel Text. Nur folgende Ausdrücke sollen kopiert werden:
<duration>51</duration>
Hier ist es die Zahl 51, aber diese variiert letztendlich 1- bis 5-stellig. Wie man die Zahl ausschneidet, weiß ich und dann würde ich mit FileAppend die Zahlen in eine neue Datei schreiben. Aber wie man alle Ausdrücke in der Datei findet, weiß ich leider nicht. Hat jemand eine Idee?
Viele Grüße,
Alexander
Finden, Kopieren und speichern von Ausdrücken einer Datei
Moderator: jNizM
Re: Finden, Kopieren und speichern von Ausdrücken einer Datei
Moin,
wenn sich die Tags immer komplett in einer Zeile befinden, probiere mal das:
Alternative: Datei zeilenweise einlesen und Treffer ausfiltern.
wenn sich die Tags immer komplett in einer Zeile befinden, probiere mal das:
Code: Select all
#NoEnv
; FileRead, XML, Myxmlfile.xml
XMl = ; als Ersatz für FileRead zum Testen
(Join`r`n
<duration>51</duration>
abc
def<duration>52</duration>
gfh
<duration>53</duration>
)
Treffer := RegExReplace(XML, "Us).*<duration>(\d+)</duration>", "$1`n")
MsgBox, %Treffer%
Re: Finden, Kopieren und speichern von Ausdrücken einer Datei
Super, vielen Dank. Das werde ich mal ausprobieren. Ich habe gerade geshen, dass ich ich die Zeitangaben auch in einer anderen Datei anzeigen lassen kann. Diese sind in Videoframes angegeben. Also hat jede Sekunde 50 frames. Ich habe dann folgende Angaben:
0
596
179151
Ich muss nun die Frame-Angaben in das Format hh.mm.ss.ff ändern. 1 Frame entspricht 0,2 Sekunden
596 entspricht 11 Sekunden und 46 frames
179151 entspricht 3583,02 Sekunden also 59 Minuten 43 Sekunden und 1 Frame.
Von Hand kann ich das ausrechnen, allerdings bekomme ich keine Idee für eine Automatisierung durch Autohotkey. Da manchmal 2 Nachkommastellen da sind und manchmal nur eine. Gibt es die Möglichkeit, mit AHK die Nachkommastellen zu löschen, ohne auf- und abzurunden? Oder den vorderen Teil (vor dem Komma abzuschneiden) und nur mit den Nachkommastellen zu rechnen (Manchmal sind ist die Zahl vor dem Komma dann ein-, zwei- oder dreistellig)? Oder wie könnte man es noch mathematisch lösen?
Ich rechne folgendermaßen:
179151 / 50 = 3583,02 Sekunden
3583,02 / 60 = 59,717 Minuten
0,717 Minuten * 60 = 43,02 Sekunden
0,02 Sekunden * 50 = 1 Frame
Insgesamt also 59:43:01
Viele Grüße und schon mal vielen Dank.
Alexander
0
596
179151
Ich muss nun die Frame-Angaben in das Format hh.mm.ss.ff ändern. 1 Frame entspricht 0,2 Sekunden
596 entspricht 11 Sekunden und 46 frames
179151 entspricht 3583,02 Sekunden also 59 Minuten 43 Sekunden und 1 Frame.
Von Hand kann ich das ausrechnen, allerdings bekomme ich keine Idee für eine Automatisierung durch Autohotkey. Da manchmal 2 Nachkommastellen da sind und manchmal nur eine. Gibt es die Möglichkeit, mit AHK die Nachkommastellen zu löschen, ohne auf- und abzurunden? Oder den vorderen Teil (vor dem Komma abzuschneiden) und nur mit den Nachkommastellen zu rechnen (Manchmal sind ist die Zahl vor dem Komma dann ein-, zwei- oder dreistellig)? Oder wie könnte man es noch mathematisch lösen?
Ich rechne folgendermaßen:
179151 / 50 = 3583,02 Sekunden
3583,02 / 60 = 59,717 Minuten
0,717 Minuten * 60 = 43,02 Sekunden
0,02 Sekunden * 50 = 1 Frame
Insgesamt also 59:43:01
Viele Grüße und schon mal vielen Dank.
Alexander
Last edited by festigrat on 20 Mar 2018, 05:36, edited 1 time in total.
Re: Finden, Kopieren und speichern von Ausdrücken einer Datei
Datum und Zeit in AHK
Code: Select all
#NoEnv
FramesProSekunde := 50
Frames := 179151
Sekunden := Frames // FramesProSekunde
RestFrames := Mod(Frames, FramesProSekunde)
Zeit := A_YYYY ; Zeit auf den 01.01. 00:00:00 Uhr des laufenden Jahres setzen
Zeit += Sekunden, S ; Sekunden addieren
FormatTime, HHMMSSFF, %Zeit%, HH:mm:ss':%RestFrames%'
HHMMSSFF := LTrim(HHMMSSFF, "0:") ; führende Nullen und : Zeichen entfernen, falls gewünscht
MsgBox, %HHMMSSFF%
ExitApp
Re: Finden, Kopieren und speichern von Ausdrücken einer Datei
Vergessen: Das funktioniert so nur bis maximal 23:59:59:49.
Re: Finden, Kopieren und speichern von Ausdrücken einer Datei
Format kann man/frau sich auch mal antun
Und da bin ich noch nicht ganz durchgestiegen: https://autohotkey.com/board/topic/85010-xml-parser/
Und da bin ich noch nicht ganz durchgestiegen: https://autohotkey.com/board/topic/85010-xml-parser/
Re: Finden, Kopieren und speichern von Ausdrücken einer Datei
Hallo,
es funktioniert fast perfekt. Die Angabe müsste 59:43:01 lauten und nicht 59:43:1, wie nun in der MsgBox angezeigt. Gibt es hierfür noch eine Lösung?
es funktioniert fast perfekt. Die Angabe müsste 59:43:01 lauten und nicht 59:43:1, wie nun in der MsgBox angezeigt. Gibt es hierfür noch eine Lösung?
Re: Finden, Kopieren und speichern von Ausdrücken einer Datei
Folgende Änderung sollte es tun (siehe BoBo):
Code: Select all
RestFrames := Format("{:02}", Mod(Frames, FramesProSekunde))
Re: Finden, Kopieren und speichern von Ausdrücken einer Datei
Das war's! just me und Bobo, herzlichen Dank. Das Skript funktioniert und ich werde es nun erfolgreich einsetzen. Ich werde noch versuchen, den Lösungsansatz zu verstehen, denn auf diese Idee wäre ich nicht gekommen. Ich hätte es wahrscheinlich mit Abrunden versucht und dann die abgerundete Zahl von der ursprünglichen Zahl abgezogen und dann hätte ich den Rest gehabt. Eure Lösung scheint mir jedoch viel eleganter zu sein.
Euch noch einen schönen Tag. Viele Grüße, Alexander
Euch noch einen schönen Tag. Viele Grüße, Alexander
Re: Finden, Kopieren und speichern von Ausdrücken einer Datei
Wenn Du lieber selbst rechnest, geht es auch so (in eine Funktion verpackt):
Code: Select all
#NoEnv
Frames := 179151
MsgBox, % HHMMSSFF(Frames)
ExitApp
HHMMSSFF(Frames, FPS := 50) {
Sekunden := Frames // FPS
FF := Mod(Frames, FPS)
HH := Sekunden // 3600
Sekunden := Mod(Sekunden, 3600)
MM := Sekunden // 60
SS := Mod(Sekunden, 60)
Return LTrim(Format("{:02}:{:02}:{:02}:{:02}", HH, MM, SS, FF), "0:")
}
Who is online
Users browsing this forum: No registered users and 49 guests