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

TCL - Datum und Uhrzeit auslesen und einer .txt-Datei nach jeder Ausführung zeilenweise übergeben

Frage Entwicklung Batch & Shell

Mitglied: BlattlausOG

BlattlausOG (Level 1) - Jetzt verbinden

20.05.2014, aktualisiert 21.05.2014, 3606 Aufrufe, 9 Kommentare

Hallo Community,

ich möchte per TCL-Script die Uhrzeit und das Datum des Systems auslesen und einer Textdatei übergeben.
Dabei soll nach jeder Ausführung des Scripts das aktuelle Datum und die aktuelle Uhrzeit in die nächste untere Zeile geschrieben werden,
wobei die bereits vorhandenen Zeilen bestehen bleiben sollen.

1. Datum und Uhrzeit des Systems auslesen:
01.
set date [clock seconds] 
02.
set date [clock format $date -format {%Y.%m.%d  %T}]
2. Datum und Uhrzeit der Log-Datei .txt übergeben: (Ansatzweise...so....irgendwie...?)
01.
set log [open "../log") w] 
02.
puts $log "[lindex $date]"
Folgendermaßen sollte die Textdatei z.B. aussehen:
01.
2014.05.21 00:25:11   //erste Zeile 
02.
2014.05.19 15:43:32   //zweite Zeile 
03.
2014.05.14 12:23:27   //dritte Zeile 
04.
2014.05.03 06:18:07   //vierte Zeile 
05.
2014.04.25 21:48:22   //fünfte Zeile 
06.
2014.03.18 08:29:31   //sechste Zeile 
07.
u.s.w.
Wie Ihr sicherlich bemerkt habt, hab ich davon so gut wie keine Ahnung und hoffe auf tatkräftige Unterstützung

Besten Dank für Eure Antworten.

Grüße,
Blattlaus
Mitglied: colinardo
21.05.2014, aktualisiert um 01:26 Uhr
Hallo Blatlaus,
ich muss gestehen das ich mit TCL noch nie Kontakt hatte, aber da man ja sein Leben lang neues ausprobieren sollte und mir "Programmieren" kein Fremdwort ist , hab ich mal schnell in die Doku geschaut und folgendes ist dabei rausgekommen, du warst schon ganz dicht dran mit deinem Code, nur der Parameter für den Filezugriff war hier nicht ganz optimal für dein Vorhaben:
01.
set date [clock seconds] 
02.
set date [clock format $date -format {%Y.%m.%d  %T}] 
03.
set log [open "../log" a+] 
04.
puts $log "$date" 
05.
close $log
Das a+ bedeutet: Wenn die Datei nicht existiert, erstelle sie, ansonsten öffne das File und setze die Schreibposition ans Ende der Datei.
Also jedes mal wenn du ein File so öffnest, wird alles was du danach ins File schreibst, immer ans Ende dran gehängt.
http://www.tcl.tk/man/tcl8.5/tutorial/Tcl24.htm

Grüße Uwe
Bitte warten ..
Mitglied: BlattlausOG
21.05.2014, aktualisiert um 13:16 Uhr
Hallo Uwe,

vielen Dank für deine superschnelle Antwort.

Ich hätte eine weitere Frage.
Wenn ich nun ein Name in dieses bestehende Script übergeben möchte, wie wüsste das dann aussehen?

So...in etwa...?
01.
proc input {} { 
02.
set name "" 
03.
set date [clock seconds] 
04.
set date [clock format $date -format {%Y.%m.%d  %T}] 
05.
set log [open "../log" a+] 
06.
puts $log "$date  | $name" 
07.
close $log 
08.
}

Die log.txt sollte so gegliedert sein:
01.
2014.05.21 00:25:11   |   Bert         //erste Zeile 
02.
2014.05.19 15:43:32   |   Stefan     //zweite Zeile 
03.
2014.05.14 12:23:27   |   Nadine    //dritte Zeile 
04.
2014.05.03 06:18:07   |   Nadine    //vierte Zeile 
05.
2014.04.25 21:48:22   |   Heike      //fünfte Zeile 
06.
2014.03.18 08:29:31   |   Dirk         //sechste Zeile 
07.
u.s.w.
Wäre dies ohne großen Aufwand realisierbar?

Vielen Dank schonmal

Gruß,
Blattlaus
Bitte warten ..
Mitglied: colinardo
21.05.2014, aktualisiert um 13:56 Uhr
also wenn du mit Parameterübergabe meinst, innerhalb eines Scriptes ginge das so:
01.
proc writelog {name} { 
02.
  set date [clock seconds] 
03.
  set date [clock format $date -format {%Y.%m.%d  %T}] 
04.
  set log [open "../log" a+] 
05.
  puts $log "$date | $name" 
06.
  close $log 
07.
}
aufrufen der Prozedur dann so:
writelog "Heike"
http://www.tcl.tk/man/tcl8.5/tutorial/Tcl11.html

Wenn du stattdessen die Argumente schon in der Bash Kommandozeile übergeben willst kannst du das Script so schreiben:
01.
proc writelog {name} { 
02.
  set date [clock seconds] 
03.
  set date [clock format $date -format {%Y.%m.%d  %T}] 
04.
  set log [open "./log.txt" a+] 
05.
  puts $log "$date | $name" 
06.
  close $log 
07.
08.
writelog [lindex $argv 0]
und es dann so z.B. in der Bash aufrufen:
tclsh deinscript.tcl "Heike"
http://www.fundza.com/tcl/script_shell/arguments.html

Grüße Uwe
Bitte warten ..
Mitglied: BlattlausOG
21.05.2014, aktualisiert um 15:49 Uhr
Hallo Uwe,

danke für deine Antwort.

Ich habe mich wohl falsch ausgedrückt.

Ein Name wird dem Script übergeben, das Script soll den Namen mit der davorgestellten Systemzeit speichern.
Wird irgendwann ein neuer oder gar der gleiche Name übergeben (variabler Name), soll dasselbe geschehen allerdings in eine neue Zeile.

Die im voherigen Post gelistete Text-Datei ist nur, wie ich mir die Ausgabe vorstelle.

Das ist alles

Grüße
Bitte warten ..
Mitglied: colinardo
21.05.2014, aktualisiert um 15:49 Uhr
Zitat von BlattlausOG:
Ein Name wird dem Script übergeben, das Script soll den Namen mit der davorgestellten Systemzeit speichern.
Wird irgendwann ein neuer oder gar der gleiche Name übergeben (variabler Name), soll dasselbe geschehen allerdings in eine
neue Zeile.

Das ist alles
aber das tut genau das zweite Script von oben ....
Bitte warten ..
Mitglied: BlattlausOG
21.05.2014, aktualisiert um 15:50 Uhr
Alles klar, ich schaue mir das später genauer an...

Danke
Bitte warten ..
Mitglied: BlattlausOG
21.05.2014 um 19:24 Uhr
Hallo Uwe,

ich nochmal *nerv*

Ok, soweit so gut...

Wie würde das Script ausschauen mit folgendem Ablauf:

1. Diesem Script wird eine Uhrzeit über eine Variable übergeben, die Formatierung wie folgt: 19:16:42
2. Das Datum soll vom der PC-Systemzeit ausgelesen werden, die Formatierung wie folgt: 2014.05.21
3. Die bereits erwähnte Namensvariablen werden ebenso dem Script übergeben
4. Nun alles zusammensetzen in folgender Formatierung: 2014.05.21 19:16:42 | Elke
5. Zuguterletzt die zusammengefasste Variable der log.txt übergeben
6. Ebenso bereits erwähnt, bei neuer Übergabe eines Namens aktuellen Zeitstempel setzen und in nächste Zeile anreihen.
Vorherige Zeitstempel unberührt lassen.

Das sollte dann das Endresultat sein.

So Interessant das Thema auch ist, sieht man den Quellcode wird einem so manches verständlicher....vielleicht :p

Grüße
Bitte warten ..
Mitglied: colinardo
21.05.2014, aktualisiert um 19:50 Uhr
Es wäre mal gut zu wissen, wie du das mit der Übergabe der Parameter an das Script meinst, bzw, auf welchem OS du arbeitest. Meinst du die Übergabe der Parameter an die Funktion im Script selber, oder eine Übergabe von Parametern von der Kommandozeile an ein Script was als Datei gespeichert ist ??? Willst du mehrere Namen gleichzeitig an das Script übergeben ??

so wie ich das verstanden habe:
01.
proc writelog {name uhrzeit} { 
02.
  # aktuelles Datum in Variable schreiben 
03.
  set date [clock seconds] 
04.
  set date [clock format $date -format {%Y.%m.%d}] 
05.
  # Zeile zusammensetzen 
06.
  set line "$date $uhrzeit | $name" 
07.
  # Logfile im Append-Modus öffnen 
08.
  set log [open "./log.txt" a+] 
09.
  # Zeile in Logfile schreiben 
10.
  puts $log $line 
11.
  # Handle zum Logfile schließen (flush) 
12.
  close $log 
13.
14.
# der writelog-prozedur die zwei Parameter der Kommandozeile übergeben (Name / Uhrzeit) 
15.
writelog [lindex $argv 0] [lindex $argv 1]
Aufruf dann so
tclsh deinscript.tcl "Elke" "10:00:00"
Mit diesem Tutorial sollte das kein Problem mehr darstellen: http://www.tcl.tk/man/tcl8.5/tutorial/tcltutorial.html
Die nötigen Fetzen habe ich dir ja geliefert, damit solltest du das umsetzen können. Das hier ist ja kein Hausaufgaben-Lösen Forum.
Wenn ich das gestern in 10 Minuten Lesen im Tutorial auf dem Smartphone hier schaffe (hatte vorher sonst noch nie was mit TCL gemacht!!) sollte das für dich eigentlich mit etwas Lesen eine Lösbare Aufgabe darstellen.

Viel Erfolg
Grüße Uwe
Bitte warten ..
Mitglied: BlattlausOG
21.05.2014 um 20:29 Uhr
Ok, danke dir für deine tatkräftige Unterstützung.

Werde mich durch den Link kämpfen.

Auf ein ander mal

Grüße
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Einzelne Zeilen in txt Datei speichern und auslesen (7)

Frage von noah1400 zum Thema Batch & Shell ...

Webentwicklung
HTML Output in eine txt Datei mit VisualBasicScript (2)

Frage von coca22COCA zum Thema Webentwicklung ...

Batch & Shell
Merkwürdige Zeilenformatierung in txt Datei (3)

Frage von miczar zum Thema Batch & Shell ...

VB for Applications
gelöst Mit VBA im Monatskalender Datum suchen - aus anderer Datei einfügen (6)

Frage von Otto1699 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Router & Routing
gelöst Empfehlung günstiges ADSL2+ nur Modem (10)

Frage von TimMayer zum Thema Router & Routing ...