Top-Themen

Aktuelle Themen (A bis Z)

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, 5799 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 ..
Ähnliche Inhalte
PHP
Bewertungssystem wie berechnen?
gelöst Frage von icegetPHP4 Kommentare

Hallo liebe Community, ich habe folgendes Problem: Die Benutzer auf einer Website (angemeldet mit ihrer email) dürfen Rezepte bewerten. ...

Ausbildung
Datenübertragung berechnen
Frage von M.MarzAusbildung6 Kommentare

Hallo zusammen, ich habe folgende Aufgabe zu erledigen und weis nicht wie ich da vorgehen soll, kann mir da ...

Batch & Shell
Zwischenzeit berechnen
gelöst Frage von MPFGBatch & Shell5 Kommentare

Hallo, ich suche eine Möglichkeit ein Programm zu einer eingegebenen Zeit mit Batch zu schließen. mit timeout soll die ...

Festplatten, SSD, Raid
Speicher der nächsten Jahre berechnen
Frage von RaversFestplatten, SSD, Raid10 Kommentare

Hallo zusammen, ich bin dabei neue Server bei uns anzuschaffen. Nunmehr stell ich mir die Frage, wie hoch wird ...

Neue Wissensbeiträge
Datenschutz

Weitere Inforamtionen zum Sicherheitsproblem BeA

Information von Penny.Cilin vor 44 MinutenDatenschutz

Im folgenden ein weiterer Bericht über die Sicherheitsprobleme von Bea. Fataler Konstruktionsfehler im besonderen elektronischen Anwaltspostfach Gruss Penny

Windows 10

Systemdienste behalten nach Win10 inplace-Upgrade nicht die ggf. modifizierte Startart bei

Tipp von DerWoWusste vor 2 StundenWindows 103 Kommentare

Stellt Euch vor, Ihr habt ein Win10 System und modifiziert dort die Startart von Systemdiensten. Zum Beispiel wollt Ihr ...

Microsoft Office

Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei

Anleitung von SarekHL vor 5 StundenMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Erkennung und -Abwehr

Sicherheitslücke Spectre und Meltdown: Status prüfen

Anleitung von Frank vor 11 StundenErkennung und -Abwehr2 Kommentare

Nach all den Updates der letzten Woche sollte man unbedingt auch den Status prüfen, ob die Sicherheitslücken Spectre, Meltdown ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Microsoft Office
Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei
Anleitung von SarekHLMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Drucker und Scanner
Gesucht DIN A3 Drucker
Frage von NebellichtDrucker und Scanner15 Kommentare

Hallo, ich möchte einen neuen DIN A3 Drucker kaufen. Um ab und zu, ca. 1 mal die Woche Farbausdrucke ...

E-Business
Bankgeheimnis abgeschafft - wie kann ich mich wehren?
Frage von honeybeeE-Business13 Kommentare

Hallo, ich nehme Bezug auf diesen Artikel: Als ich das gelesen habe, wurde mir schlecht Es geht ja niemanden ...