Finden, Kopieren und speichern von Ausdrücken einer Datei

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

festigrat
Posts: 54
Joined: 02 Mar 2017, 06:58

Finden, Kopieren und speichern von Ausdrücken einer Datei

20 Mar 2018, 04:15

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
just me
Posts: 9453
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Finden, Kopieren und speichern von Ausdrücken einer Datei

20 Mar 2018, 04:34

Moin,

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%
Alternative: Datei zeilenweise einlesen und Treffer ausfiltern.
festigrat
Posts: 54
Joined: 02 Mar 2017, 06:58

Re: Finden, Kopieren und speichern von Ausdrücken einer Datei

20 Mar 2018, 05:00

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
Last edited by festigrat on 20 Mar 2018, 05:36, edited 1 time in total.
just me
Posts: 9453
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Finden, Kopieren und speichern von Ausdrücken einer Datei

20 Mar 2018, 05:22

:arrow: 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
just me
Posts: 9453
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Finden, Kopieren und speichern von Ausdrücken einer Datei

20 Mar 2018, 05:26

Vergessen: Das funktioniert so nur bis maximal 23:59:59:49.
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Finden, Kopieren und speichern von Ausdrücken einer Datei

20 Mar 2018, 05:28

:arrow: Format kann man/frau sich auch mal antun :mrgreen:
Und da bin ich noch nicht ganz durchgestiegen: https://autohotkey.com/board/topic/85010-xml-parser/ :?:
festigrat
Posts: 54
Joined: 02 Mar 2017, 06:58

Re: Finden, Kopieren und speichern von Ausdrücken einer Datei

20 Mar 2018, 05:31

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?
just me
Posts: 9453
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Finden, Kopieren und speichern von Ausdrücken einer Datei

20 Mar 2018, 05:37

Folgende Änderung sollte es tun (siehe BoBo):

Code: Select all

RestFrames := Format("{:02}", Mod(Frames, FramesProSekunde))
festigrat
Posts: 54
Joined: 02 Mar 2017, 06:58

Re: Finden, Kopieren und speichern von Ausdrücken einer Datei

20 Mar 2018, 05:44

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
just me
Posts: 9453
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Finden, Kopieren und speichern von Ausdrücken einer Datei

20 Mar 2018, 05:50

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:")
}

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 61 guests