Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Zeit aus Sekunden berechnen

Frage Entwicklung Batch & Shell

Mitglied: stoner

stoner (Level 1) - Jetzt verbinden

02.09.2006, aktualisiert 03.09.2006, 5760 Aufrufe, 5 Kommentare

Ahoi zusammen,

ich lese aus verschiedenen Dateien bestimmte Felder aus und spiele diese in eine Datenbank ein (automatisiert alle 10 minuten).
Mein Problem ist, dass diese Dateien aus verschiedenen Quellen stammen, somit sind auch die Felder z.T. unterschiedlich.

Speziell ein Feld macht Probleme:
In der 1. Datei ist dieses Feld in Time Format angegeben, z.B. "00:03:12" für 3 minuten und 12 Sekunden,
in der 2. Datei steht die Zeit im Sekunden Format : "000192".

nun sollte ich das Format der 2. in das Time Format der ersten umwandeln da beide Dateien in die gleiche Tabelle eingelesen werden, das Feld steht als Parameter %t% bereit.

Ich habe die letzten Tage das Web nach einer Lösung durchsucht jedoch ohne ein Ergebnis. Am besten wäre eine Lösung als reine bat, mit nem freeware (command Line) tool oder ne vbs wäre auch kein Prob.

besten Dank schon mal,

Frank
Mitglied: Biber
03.09.2006 um 01:35 Uhr
Tja, stoner,

dann werf ich mal als Erster ein kleines Batch-Freewaretool in den Ring.
01.
::--- snipp Secs2TimeFmt.bat 
02.
@echo off & setlocal 
03.
Call :secsToTimeFmt %1 
04.
echo in:[%1] out:[%TimeFmt%] 
05.
goto :eof 
06.
 
07.
:secsToTimeFmt 
08.
Set /a "hrs=100" 
09.
set /a "Sec=((1%1-1000000)%%60) + 500" 
10.
set /a "min=(1%1-1000000)/60" 
11.
If %min% GEQ 60 set /a "hrs=(%min%/60)+100" 
12.
If %min% GEQ 60 set /a "min=%min%-((%hrs%-100)*60)" 
13.
Set /a "min+=100" 
14.
Set "timefmt=%hrs:~1%:%min:~1%:%sec:~1%"
Demo am Cmd-Prompt:
01.
$cmd$for %i in (000195 000001 006483) do @Secs2TimeFmt.bat %i 
02.
in:[000195] out:[00:03:15] 
03.
in:[000001] out:[00:00:01] 
04.
in:[006483] out:[01:48:03]
Der Batch selbst ist ja nur zu Demo-Zwecken.
In Deinen tatsächlichen Batch brauchst Du ja nur den Block ":secsToTimeFmt" übernehmen.

Gruß
Biber
Bitte warten ..
Mitglied: stoner
03.09.2006 um 13:30 Uhr
Hallo Biber,

besten Dank wieder mal für deine Hilfe, dass ganze klappt wunderbar, und nachdem ich eine halbe Stunde über die bat gegrübelt habe ist mir auch einiges klar über die Syntax.
Kleine Änderung da Millisekunden als Quellwert:
01.
Set /a "hrs=100" 
02.
Set /a "sec=((1%1-100000)/10%%60) + 500" 
03.
Set /a "min=(1%1-100000)/600" 
04.
If %min% GEQ 60 set /a "hrs=(%min%/60)+100" 
05.
If %min% GEQ 60 set /a "min=%min%-((%hrs%-100)*60)" 
06.
Set /a "min+=100" 
07.
Set "timefmt=%hrs:~1%:%min:~1%:%sec:~1%"
Soweit klappt alles, nur werden die Werte nicht gerundet, sondern die millisek. abgeschnitten. gibt es eine Möglichkeit den Wert zu runden?
+500 bei den sec, haben die einen bestimmten Grund? klappt mit z.b. 100 auch.

@Biber besten Dank nochmal für deine Hilfe, mittlerweile komm ich immer besser zurecht, eine Frage hät ich noch zur Syntax (zu einem älteren Thema):

Set "zeile=%*" Setzt den kompletten Input in den Parameter zeile
Set zeile=%zeile: =% löscht leerzeichen im Parameter zeile
Set zeile=%zeile:;;=;0;% ersetzt ;; mit ;0; wieder im Parameter zeile

Habe ich den Code richtig interpretiert? Irgendwie ist mir das noch ein bischen schleierhaft mit dem ändern des Parameters zeile mit dem gleichen Parameternamen. Ebenso mit dem Syntax der Parameter innerhalb der %-Zeichen.

Schönen Sonntag noch,

stoner
Bitte warten ..
Mitglied: Biber
03.09.2006 um 13:59 Uhr
Moin stoner,
und nachdem ich eine halbe Stunde über die bat gegrübelt habe ist mir auch einiges klar über die Syntax
So war es gedacht ... ich hab auch bewusst mit Kommentaren gegeizt gestern.
Denn ohne Anpassungen wird es nicht gehen, dachte ich, und deshalb musst Du Dich eben mit diesem kryptischen Zeug auseinandersetzen.
eine Frage hät ich noch zur Syntax (zu einem älteren Thema):
Set "zeile=%*" Setzt den kompletten Input in den Parameter zeile
Set zeile=%zeile: =% löscht leerzeichen im Parameter zeile
Set zeile=%zeile:;;=;0;% ersetzt ;; mit ;0; wieder im Parameter zeile
Habe ich den Code richtig interpretiert?
Dreimal JA auf alle Fragen.
Der Platzhalter %* steht für "alle übergebenen Parameter".
Die Zeichen-Ersetzen-Funktion ist halt wirklich so schlicht mit "ersetze Zeichen vor dem Gleichheitszeichen mit Zeichen nach dem Gleichheitszeichen".
Sieht in einigen konkreten Fällen definitiv merkwürdig aus, so z.B. beim Ersetzen von Leerzeichen durch "nichts".
Aber die Funktion tut, was sie verspricht.

+500 bei den sec, haben die einen bestimmten Grund? klappt mit z.b. 100 auch.
Okay, das war nur ein Verständnistest. Hast bestanden.
Geht natürlich auch mit 100 oder 400 oder 11100...
Ist nur zur Verhinderung von Zahlenwerten wie "07" , "08", "09" , die von Buggybuggybuggy-CMD als Oktal interpretiert werden.
Und bei "Set /a sec=09" würde es knallen:
01.
Z:\> 
02.
$cmd$set /a sec=09 
03.
Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (17), 
04.
hexadezimale (0x11) oder oktale (021) Zahlen.
Deshalb "rechne" ich eigentlich immer mit Zahlen größer 100.... und nehme dann für die Anzeige die letzten beiden Ziffern.
Oben in meinem Batch-Schnipsel wäre es auch richtiger so gewesen:
01.
.. 
02.
Set /a "sec=((1%1-100000)/10%%60) + 500"        && REM wichtig hier nur: es soll ein dreistelliger Wert rauskommen, deshalb +500 
03.
... 
04.
Set "timefmt=%hrs:~-2%:%min:~-2%:%sec:~-2%"
...also lieber jeweils die letzten 2 Zeichen als die Zeichen ab Zeichen 2... (da hatte ich geschlampt *gg)

Soweit klappt alles, nur werden die Werte nicht gerundet, sondern die millisek. abgeschnitten. gibt es eine Möglichkeit den Wert zu runden?
Jein... runden direkt nicht.
Aber wenn es wichtig ist, dann folgende Strategie (angenommen, ich hätte 1788 Millisekunden):
01.
$cmd$set /a sec=1788/100 
02.
17   --------------> was ja abgeschnitten wäre 
03.
$cmd$set /a msec=1788%100 
04.
88 ----> alles, was nach dem zukünftigen Komma bei Sek steht 
05.
....und wenn dieser Wert größer ist als 50, dann eine Sekunde draufpacken.
Im Batch sinngemäß:
01.
... 
02.
REM sagen wir mal, Parameter 1 sind die 1788 Millisecs 
03.
set /a "sec=%1/100" 
04.
REM 17   --------------> was ja abgeschnitten wäre 
05.
set /a msec=%1%%100 
06.
REM msecs sind 88 ----> alles, was nach dem zukünftigen Komma bei Sek steht;  
07.
REM der Modulo-Operator wird im Batch als "%%" geschrieben! 
08.
REM ....und wenn dieser Wert größer ist als 50, dann eine Sekunde draufpacken. 
09.
IF %msecs% GTR 50 set /a "secs+=1"
Dir auch schönen Restsonntag
Biber
Bitte warten ..
Mitglied: stoner
03.09.2006 um 17:40 Uhr
Hallo Biber,

besten Dank, dein letztes Posting hat mir die Augen geöffnet, schön langsam wird mir klar was da in meiner bat vor sich geht , sind ja mittlerweile auch schon 100 zeilen code.
Ich habe das mit den 1/10 Sekunden (nicht ms) folgendermassen gelöst:

01.
::Rufdauer in das Time Format ändern (1/10s) 
02.
Set /a "ehrs=100" 
03.
Set /a "esec=((1%e%-1000)/10%%60) + 500" 
04.
Set /a "emin=(1%e%-1000)/600" 
05.
Set /a "emsec=(1%e%-1000)%%10" 
06.
If %emsec% GEQ 5 set /a "esec=%esec%+1" 
07.
If %emin% GEQ 60 set /a "ehrs=(%emin%/60)+100" 
08.
If %emin% GEQ 60 set /a "emin=%emin%-((%hrs%-100)*60)"
Besten Dank nochmal,

stoner
Bitte warten ..
Mitglied: Biber
03.09.2006 um 19:08 Uhr
Jepp, stoner,

ich sehe, Du hast es verstanden.
Sieht gut aus

Und ob es nun Zehntel-, Hundertstel- oder Tausendstelsekunden sind, das ändert ja nichts an der Mimik.

Ich setze den Beitrag mal auf gelöst, lass ihn aber offen.
Vielleicht wird ja noch eine *.vbs-Variante oder ein anderer Algorithmus gepostet.

Schönen Abend
Biber
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Netzwerke
HTTP Overhead Berechnen und Protokolstack

Frage von karlosss zum Thema Netzwerke ...

Festplatten, SSD, Raid
Speicher der nächsten Jahre berechnen (10)

Frage von Ravers zum Thema Festplatten, SSD, Raid ...

Windows Netzwerk
PPTP-VPN Abbruch nach 20 Sekunden (13)

Frage von Otomombe zum Thema Windows Netzwerk ...

Windows Server
NTP Server Uhrzeit in der Domäne um 20 Sekunden falsch (2)

Frage von blade999 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...