String formatieren

  • Guten Morgen,

    ich suche eine Möglichkeit, Uhrzeiten einheitlich darzustellen. Ich bekomme Zeiten wie
    4:39.731 (m:ss.milisec)
    oder 1:52:34 (h:mm:ss)

    Ich möchte sie aber auf das Format hh:mm:ss bringen. Wie stellen ich das an?

    Einmal editiert, zuletzt von Taek (3. August 2008 um 15:25)

  • Eine Möglichkeit wäre mit StringSplit

    Spoiler anzeigen
    [autoit]


    $string = 4:39.731
    $erg_ms = StringSplit($string, '.')

    [/autoit] [autoit][/autoit] [autoit]

    ;Da sollte dann folgendes rauskommen
    ;$erg_ms[0] = 2
    ;$erg_ms[1] = 4:39
    ;$erg_ms[2] = 731

    [/autoit]

    Würde dann sagen die Millisekunden kannst du vernachlässigen. und machst dann einen StringSplit nach :

    Spoiler anzeigen
    [autoit]


    $erg_zeit = StringSplit($erg_ms[1] , ':')

    [/autoit] [autoit][/autoit] [autoit]

    ; Da sollte dann das rauskommen
    ;$erg_zeit[0] = 2
    ;$erg_zeit[1] = 4
    ;$erg_zeit[2] = 39

    [/autoit]

    So jetzt noch prüfen wieviele Einträge das Array hat und gegebenenfalls die Eintrage auffüllen damit du einen einheitlichen String bekommst.

    Nun möchte ich aber mal nen Scriptausschnitt sehen, sonnst schreibe ich das Script noch und das ist net Sinn der Sache.

    MfG
    Der_Doc

  • wie wärs denn wenn man erstmal die Anzahl von Zahlen in den Zeiten zählt:

    Spoiler anzeigen
    [autoit]


    $hour = 2 ;es ist 02:00 Uhr, Minuten lass ich mal weg.

    [/autoit] [autoit][/autoit] [autoit]

    If StringLen($hour) = 1 Then
    $hour = "0" & $hour
    EndIf
    MsgBox(0,"", $hour)

    [/autoit]
  • Hier mal mein Ergebnis. Vielleicht gehts auch kürzer, aber solange es funktioniert, ist mir das egal. Weitere Verbesserungsvorschläge sind willkommen ;) Danke soweit.

    Spoiler anzeigen
    [autoit]

    $vid_length_read= "hh:mm:ss"
    $split_1st=StringSplit($vid_length_read,'.')
    $split_2nd=Stringsplit($split_1st[1],":")
    Select
    Case UBound($split_2nd)-1 =3
    $stunden=$split_2nd[1]
    If StringLen($stunden) =1 Then
    $stunden="0"&$stunden
    EndIf
    $minuten=$split_2nd[2]
    If StringLen($minuten) =1 Then
    $minuten="0"&$minuten
    EndIf
    $sekunden=$split_2nd[3]
    If StringLen($sekunden) =1 Then
    $sekunden="0"&$sekunden
    EndIf
    Case UBound($split_2nd)-1 =2
    $stunden="00"
    $minuten=$split_2nd[1]
    If StringLen($minuten) =1 Then
    $minuten="0"&$minuten
    EndIf
    $sekunden=$split_2nd[2]
    If StringLen($sekunden) =1 Then
    $sekunden="0"&$sekunden
    EndIf
    Case UBound($split_2nd)-1 =1
    $stunden="00"
    $minuten="00"
    $sekunden=$split_2nd[1]
    If StringLen($sekunden) =1 Then
    $sekunden="0"&$sekunden
    EndIf
    EndSelect
    $length=$stunden&":"&$minuten&":"&$sekunden
    Msgbox(0,"",$length)

    [/autoit]
  • Oder so:

    Spoiler anzeigen
    [autoit]

    $var = "06:6.45"

    [/autoit] [autoit][/autoit] [autoit]

    $aArr = StringRegExp($var,"(\d*):?(\d+):(\d+\.?\d*)",2)
    If Not @error Then MsgBox(64,"",StringFormat("%02s:%02s:%02s",$aArr[1],$aArr[2],Round($aArr[3])) )

    [/autoit]
  • Stand auch nicht im ersten Beispiel :D

    Dann halt so:

    Spoiler anzeigen
    [autoit]

    $var = "6.65"

    [/autoit] [autoit][/autoit] [autoit]

    $aArr = StringRegExp($var,"(\d*):?(\d*):?(\d+\.?\d*)",2)
    If Not @error Then
    If $aArr[2] = "" Then
    MsgBox(64,"",StringFormat("00:%02s:%02s",$aArr[1],Round($aArr[3])) )
    Else
    MsgBox(64,"",StringFormat("%02s:%02s:%02s",$aArr[1],$aArr[2],Round($aArr[3])) )
    EndIf
    EndIf

    [/autoit]

    vielleicht gehts auch kürzer.

  • Hab mal nen "Speed-Test" für einen Film mit 01:52:34 gemacht.
    Mein Script wird 0,5 sec schneller erledigt. Ich werds in eine Funktion auslagern, dann hab ich nicht soviel Code in der Schleife.