hi, ich suche die möglichkeit, die aufgelisteten dateien nach alter zu sortiern und auf einen blick zu lesen, wie alt diese dateien (grundlage die jetzige systemuhrzeit) sind.
quasi über ein contentplugin (welches ich bis dato noch nicht gefunden habe) welches mir diese infos anzeigt:
alter in sekunden
alter in minuten
alter in stunden
alter in tagen
alter in tagen
alter in wochen
alter in monaten
alter in jahren
gibt es solch ein pluging oder ist das sonstwie zu bewältigen?
aufgelistete dateien nach alter sortiern=>1 tag alt,5 woc
Moderators: Hacker, Stefan2, white
aufgelistete dateien nach alter sortiern=>1 tag alt,5 woc
Was nützt der Löffel für die Weisheit, wenn man zu weit vom Suppentopf entfernt sitzt?
Mario
Mario
Du könntest das Script Content Plugin 0.1.0.1 mit folgendem Script <Dateialter.vbs> verwenden:
Die dazugehörige <script.ini>:
Ändere im Script <dateialter.vbs> die Zeile sDateDiffFmt = "JMThms" je nach gewünschter Ausgabe folgendermaßen ab:
sDateDiffFmt = "J" ... Liefert das Dateialter in Jahren
sDateDiffFmt = "M" ... Liefert das Dateialter in Monaten
sDateDiffFmt = "T" ... Liefert das Dateialter in Tagen
sDateDiffFmt = "W" ... Liefert das Dateialter in Wochen
sDateDiffFmt = "h" ... Liefert das Dateialter in Stunden
sDateDiffFmt = "m" ... Liefert das Dateialter in Minuten
sDateDiffFmt = "s" ... Liefert das Dateialter in Sekunden
Sonst, z.B.
sDateDiffFmt = "JMThms" ... Liefert das Dateialter in Jahren, Monaten, Tagen, Stunden, Minuten, Sekunden
(im Anzeigeformat JJ-MM-TT hh:mm:ss)
Allerdings lege ich für den Fall sDateDiffFmt = "JMThms" meine Hand nicht ins Feuer, dass die Berechnung der auf die Datums-/Zeitkomponenten jeweils entfallenden Anteile korrekt ist (u.a. wegen der monatsspezifischen Monatsletzten, Schaltjahren usw.).
Weiß hier jemand eine elegante und vor allem verbindlich korrekte Lösung?
EDIT 29.01.2006 20:54
Script ergänzt um die Ausgabe von Gruppierungstexten wie im Win Explorer oder im SC ("Heute", "Letzte Woche", "Vor langer Zeit" usw.)
Code: Select all
'Script for Script Content Plugin
'(c)Lev Freidin, 2005
'http://www.totalcmd.net/plugring/script_wdx.html
'http://wincmd.ru/plugring/script_wdx.html
'Script <Dateialter.vbs>, 29.01.2006, van Dusen
'Argumente für DateDiff-Parameter "Interval":
'yyyy Jahr
'q Quuartal
'm Monat
'y Tag des Jahres
'd Tag
'w Wochentag
'ww Kalenderwoche
'h Stunde
'n Minute
's Sekunde
Const ForReading = 1
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile(filename)
sDateNow = Now
sDateMod = f.DateLastModified
sDateDiffJabs = DateDiff("yyyy", sDateMod, sDateNow, 0, 0)
sDateDiffMabs = DateDiff("m", sDateMod, sDateNow, 0, 0)
sDateDiffWabs = DateDiff("ww", sDateMod, sDateNow, 0, 0)
sDateDiffTabs = DateDiff("d", sDateMod, sDateNow, 0, 0)
sDateDiffFmt = "JMThms"
Select Case sDateDiffFmt
'*** Dateialter in Jahren
Case "J"
sResult = sDateDiffJabs & " Jahre alt"
'*** Dateialter in Monaten
Case "M"
sResult = sDateDiffMabs & " Monate alt"
'*** Dateialter in Wochen
Case "W"
sResult = sDateDiffWabs & " Wochen alt"
'*** Dateialter in Tagen
Case "T"
sResult = sDateDiffTabs & " Tage alt"
'*** Dateialter in Stunden
Case "h"
sResult = DateDiff("h", sDateMod, sDateNow, 0, 0) & " Stunden alt"
'*** Dateialter in Minuten
Case "m"
sResult = DateDiff("n", sDateMod, sDateNow, 0, 0) & " Minuten alt"
'*** Dateialter in Sekunden
Case "s"
sResult = DateDiff("s", sDateMod, sDateNow, 0, 0) & " Sekunden alt"
'*** Dateialter in Jahren, Monaten, Tagen, Stunden, Minuten, Sekunden
Case Else
sDateDiff = DateDiff("yyyy", sDateMod, sDateNow, 0, 0)
If DatePart("yyyy", sDateNow, 0, 0) > DatePart("yyyy", sDateMod, 0, 0) Then sDateDiff = sDateDiff - 1
sDateDiffJ = sDateDiff
sDateMod = DateAdd("yyyy", sDateDiff, sDateMod)
sDateDiff = DateDiff("m", sDateMod, sDateNow, 0, 0)
If DatePart("m", sDateNow, 0, 0) > DatePart("m", sDateMod, 0, 0) Then sDateDiff = sDateDiff - 1
sDateDiffM = sDateDiff
If sDateDiffM < 0 Then
sDateDiffJ = sDateDiffJ - 1
sDateDiffM = sDateDiffM + 1
End If
sDateMod = DateAdd("m", sDateDiff, sDateMod)
sDateDiff = DateDiff("d", sDateMod, sDateNow, 0, 0)
If DatePart("d", sDateNow, 0, 0) > DatePart("d", sDateMod, 0, 0) Then sDateDiff = sDateDiff - 1
sDateDiffT = sDateDiff
If sDateDiffT < 0 Then
sDateDiffM = sDateDiffM - 1
sDateDiffT = sDateDiffT + 1
End If
sDateMod = DateAdd("d", sDateDiff, sDateMod)
sDateDiff = sDateNow - sDateMod
sDateDiffh = DatePart("h", sDateDiff, 0, 0)
sDateDiffn = DatePart("n", sDateDiff, 0, 0)
sDateDiffs = DatePart("s", sDateDiff, 0, 0)
'sResult = ""
'sResult = sResult & sDateDiffJ & "J - " & sDateDiffM & "M - " & sDateDiffT & "T - "
'sResult = sResult & sDateDiffh & "h - " & sDateDiffn & "m - " & sDateDiffs & "s"
sDateDiffJ = Right("0" & sDateDiffJ, 2) & "-"
sDateDiffM = Right("0" & sDateDiffM, 2) & "-"
sDateDiffT = Right("0" & sDateDiffT, 2) & " "
sDateDiffh = Right("0" & sDateDiffh, 2) & ":"
sDateDiffn = Right("0" & sDateDiffn, 2) & ":"
sDateDiffs = Right("0" & sDateDiffs, 2)
sResult = ""
sResult = sResult & sDateDiffJ & sDateDiffM & sDateDiffT
sResult = sResult & sDateDiffh & sDateDiffn & sDateDiffs
End Select
sDateGrp = ""
If sDateDiffJabs > 2 Then sDateGrp = "Vor langer Zeit"
If sDateDiffJabs = 2 Then sDateGrp = "Vor zwei Jahren"
If sDateDiffJabs = 1 Then sDateGrp = "Letztes Jahr"
If sDateDiffJabs = 0 Then sDateGrp = "Anfang des Jahres"
If sDateDiffMabs = 2 Then sDateGrp = "Vor zwei Monaten"
If sDateDiffMabs = 1 Then sDateGrp = "Letzten Monat"
If sDateDiffMabs = 0 Then sDateGrp = "Anfang des Monats"
If sDateDiffWabs = 2 Then sDateGrp = "Vor zwei Wochen"
If sDateDiffWabs = 1 Then sDateGrp = "Letzte Woche"
If sDateDiffWabs = 0 Then sDateGrp = "Anfang der Woche"
If sDateDiffTabs = 2 Then sDateGrp = "Vorgestern"
If sDateDiffTabs = 1 Then sDateGrp = "Gestern"
If sDateDiffTabs = 0 Then sDateGrp = "Heute"
sResult = sResult & " - " & sDateGrp
content = sResult
Set fso=nothing
Set f=nothing
Die dazugehörige <script.ini>:
Code: Select all
[Script]
Section=Dateialter
[Defaults]
LongName=1
ParseDirs=0
[Dateialter]
Script=dateialter.vbs
Ändere im Script <dateialter.vbs> die Zeile sDateDiffFmt = "JMThms" je nach gewünschter Ausgabe folgendermaßen ab:
sDateDiffFmt = "J" ... Liefert das Dateialter in Jahren
sDateDiffFmt = "M" ... Liefert das Dateialter in Monaten
sDateDiffFmt = "T" ... Liefert das Dateialter in Tagen
sDateDiffFmt = "W" ... Liefert das Dateialter in Wochen
sDateDiffFmt = "h" ... Liefert das Dateialter in Stunden
sDateDiffFmt = "m" ... Liefert das Dateialter in Minuten
sDateDiffFmt = "s" ... Liefert das Dateialter in Sekunden
Sonst, z.B.
sDateDiffFmt = "JMThms" ... Liefert das Dateialter in Jahren, Monaten, Tagen, Stunden, Minuten, Sekunden
(im Anzeigeformat JJ-MM-TT hh:mm:ss)
Allerdings lege ich für den Fall sDateDiffFmt = "JMThms" meine Hand nicht ins Feuer, dass die Berechnung der auf die Datums-/Zeitkomponenten jeweils entfallenden Anteile korrekt ist (u.a. wegen der monatsspezifischen Monatsletzten, Schaltjahren usw.).
Weiß hier jemand eine elegante und vor allem verbindlich korrekte Lösung?
EDIT 29.01.2006 20:54
Script ergänzt um die Ausgabe von Gruppierungstexten wie im Win Explorer oder im SC ("Heute", "Letzte Woche", "Vor langer Zeit" usw.)
vielen dank!van Dusen wrote: sDateDiffFmt = "J" ... Liefert das Dateialter in Jahren
sDateDiffFmt = "M" ... Liefert das Dateialter in Monaten
sDateDiffFmt = "T" ... Liefert das Dateialter in Tagen
sDateDiffFmt = "W" ... Liefert das Dateialter in Wochen
sDateDiffFmt = "h" ... Liefert das Dateialter in Stunden
sDateDiffFmt = "m" ... Liefert das Dateialter in Minuten
sDateDiffFmt = "s" ... Liefert das Dateialter in Sekunden
Sonst, z.B.
sDateDiffFmt = "JMThms" ... Liefert das Dateialter in Jahren, Monaten, Tagen, Stunden, Minuten, Sekunden
(im Anzeigeformat JJ-MM-TT hh:mm:ss)
es war zwar etwas knifflich, mich mit dem script content plugin eingehender zu beschäftigen, aber letztendlich war es ein erfolg :-)
allerdings bin ich noch nicht ganz fertig (weder mit dem sehen der möglichkeiten, noch mit meinen wunschausbau) :-)
ok, verstehe ich das prinzip von TC und dieser scripte so richtig,
das ich, wenn ich bei meiner urspünglichen idee bleibe, für jedes sortierbare alter (minuten/tage/jahre/...) ein eigenes *.vbs erstellen muss, mit der jeweiligen ausgabe in einer benutzerdefinierten spalte?
aus den dateien script.ini und readme.txt aus dem script.wdx verzeichnis entnehme ich, das man vielleicht doch anders vorgehen kann, als ich es gemacht habe, nur erschliesst sich mir der weg noch nicht ganz.
so habe ich es bisher gelöst (sehr umständlich, wie ich meine, da viel doppelter code aktuell gehalten werden muss und viel doppelter dateiinhalt):
ich habe es beim ersten posting natürlich nicht so richtig ausformuliert, aber mein wunsch ist natürlich, das ich z.b auf eine spalte "minuten", "tage", "wochen", "jahre" ... klicken kann und dann die ganzen dateien entsprechend ihres alters sortiert werden.
meine installierten, angelegten scripte und umbenannten kopien von script.wdx (lt. readme.txt von script.wdx):
- C:\Programme\tc\plugins\wdx\script\Dateialter
| Dateialter.vbs
| Dateialter.wdx
| script.ini
+---Monat
| Monat.vbs
| Monat.wdx
| script.ini
+---Stunde
| script.ini
| Stunde.vbs
| Stunde.wdx
+---Tag
| script.ini
| Tag.vbs
| Tag.wdx
\---Woche
script.ini
Woche.vbs
Woche.wdx
sDateDiffFmt = "m" / sDateDiffFmt = "W" / etc...
und die tatsache, das ich die zeile
sResult = sResult & " - " & sDateGrp
auskommentiert habe, damit wirklich nur die "nakten zahlen" angezeigt werden.
die script.ini dateien folgen auch alle den selben schema, z.b:
C:\Programme\tc\plugins\wdx\script\Dateialter\Woche\script.ini
Code: Select all
[Script]
Section=Woche
[Defaults]
LongName=1
ParseDirs=0
[Woche]
Script=Woche.vbs
Code: Select all
[CustomFields]
Headers999=ursprung\nalter (lange anzeige)\ntag\nmonat\nstunde\nwoche
Contents999=[=shelldetails.Geändert am]\n[=dateialter.Result]\n[=tag.Result]\n[=monat.Result]\n[=stunde.Result]\n[=woche.Result]
Options999=1288|1
Widths999=90,20,65,155,20,28,33,28
ich habe mir die freiheit genommen und dein script mal etwas abgeändert. allerdings nur rudimentär, als änderungs-vorschlag meinerseits.
aufgefallen ist, das 1 stunden / 1 tage / 1 Jahre angezeigt werden.
ich habe dies einmal dilletantisch so gelöst:
Code: Select all
'*** Dateialter in Monaten
Case "M"
sResult = sDateDiffMabs & " Monate alt"
If sDateDiffMabs = 1 Then sResult = sDateDiffMabs & " Monat alt"
Code: Select all
...
...
...
Const ForReading = 1
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile(filename)
sDateNow = Now
sDateMod = f.DateLastModified
sDateDiffJabs = DateDiff("yyyy", sDateMod, sDateNow, 0, 0)
sDateDiffMabs = DateDiff("m", sDateMod, sDateNow, 0, 0)
sDateDiffWabs = DateDiff("ww", sDateMod, sDateNow, 0, 0)
sDateDiffTabs = DateDiff("d", sDateMod, sDateNow, 0, 0)
sDateDiffNabs = DateDiff("n", sDateMod, sDateNow, 0, 0)
sDateDiffFmt = "hmsJMT"
Select Case sDateDiffFmt
'*** Dateialter in Jahren
Case "J"
sResult = sDateDiffJabs & " Jahre alt"
'*** Dateialter in Monaten
Case "M"
sResult = sDateDiffMabs & " Monate alt"
If sDateDiffMabs = 1 Then sResult = sDateDiffMabs & " Monat alt"
'*** Dateialter in Wochen
Case "W"
sResult = sDateDiffWabs & " Wochen alt"
'*** Dateialter in Tagen
Case "T"
sResult = sDateDiffTabs & " Tage alt"
If sDateDiffTabs = 1 Then sResult = sDateDiffTabs & " Tag alt"
'*** Dateialter in Stunden
Case "h"
sResult = DateDiff("h", sDateMod, sDateNow, 0, 0) & " Stunden alt"
'*** Dateialter in Minuten
Case "m"
sResult = DateDiff("n", sDateMod, sDateNow, 0, 0) & " Minuten alt"
'*** Dateialter in Sekunden
Case "s"
sResult = DateDiff("s", sDateMod, sDateNow, 0, 0) & " Sekunden alt"
'*** Dateialter in Jahren, Monaten, Tagen, Stunden, Minuten, Sekunden
Case Else
...
...
...
End Select
sDateGrp = ""
If sDateDiffJabs > 7 Then sDateGrp = "Vor sehr langer Zeit"
If sDateDiffJabs > 5 Then sDateGrp = "Vor langer Zeit"
If sDateDiffJabs = 4 Then sDateGrp = "Vor vier Jahren"
If sDateDiffJabs = 3 Then sDateGrp = "Vor drei Jahren"
If sDateDiffJabs = 2 Then sDateGrp = "Vor zwei Jahren"
If sDateDiffJabs = 1 Then sDateGrp = "Letztes Jahr"
If sDateDiffJabs = 0 Then sDateGrp = "Anfang des Jahres"
If sDateDiffMabs = 9 Then sDateGrp = "Vor neun Monaten"
If sDateDiffMabs = 8 Then sDateGrp = "Vor acht Monaten"
If sDateDiffMabs = 7 Then sDateGrp = "Vor sieben Monaten"
If sDateDiffMabs = 6 Then sDateGrp = "Vor sechs Monaten"
If sDateDiffMabs = 5 Then sDateGrp = "Vor fünf Monaten"
If sDateDiffMabs = 4 Then sDateGrp = "Vor vier Monaten"
If sDateDiffMabs = 3 Then sDateGrp = "Vor drei Monaten"
If sDateDiffMabs = 2 Then sDateGrp = "Vor zwei Monaten"
If sDateDiffMabs = 1 Then sDateGrp = "Letzten Monat"
If sDateDiffMabs = 0 Then sDateGrp = "Anfang des Monats"
If sDateDiffWabs = 2 Then sDateGrp = "Vor zwei Wochen"
If sDateDiffWabs = 1 Then sDateGrp = "Letzte Woche"
If sDateDiffWabs = 0 Then sDateGrp = "Anfang der Woche"
If sDateDiffTabs = 2 Then sDateGrp = "Vorgestern"
If sDateDiffTabs = 1 Then sDateGrp = "Gestern"
If sDateDiffTabs = 0 Then sDateGrp = "Heute"
If sDateDiffNabs < 540 Then sDateGrp = "vor 9 Stunden"
If sDateDiffNabs < 480 Then sDateGrp = "vor 8 Stunden"
If sDateDiffNabs < 420 Then sDateGrp = "vor 7 Stunden"
If sDateDiffNabs < 360 Then sDateGrp = "vor 6 Stunden"
If sDateDiffNabs < 300 Then sDateGrp = "vor 5 Stunden"
If sDateDiffNabs < 240 Then sDateGrp = "vor 4 Stunden"
If sDateDiffNabs < 180 Then sDateGrp = "vor 3 Stunden"
If sDateDiffNabs < 120 Then sDateGrp = "vor 2 Stunden"
If sDateDiffNabs < 060 Then sDateGrp = "vor einer Stunde"
If sDateDiffNabs < 030 Then sDateGrp = "vor einer halben Stunde"
If sDateDiffNabs < 015 Then sDateGrp = "vor 15 Minuten"
If sDateDiffNabs < 010 Then sDateGrp = "Gerade Eben"
If sDateDiffNabs < 0 Then sDateGrp = "Du Visionär"
'sResult = sResult & " - " & sDateGrp
'auskommentiert, ob der übersichtlichkeit
content = sResult
Set fso=nothing
Set f=nothing
die ausgabe von sDateGrp gefällt mir sehr gut, ich habe noch ein paar mir wichtige angehangen. allerdings wäre dies auch in einer eigenen spalte schöner, weil praktischer/sortierbarervan Dusen wrote:EDIT 29.01.2006 20:54
Script ergänzt um die Ausgabe von Gruppierungstexten wie im Win Explorer oder im SC ("Heute", "Letzte Woche", "Vor langer Zeit" usw.)
hier ein kleiner bug-report (keine lösung):van Dusen wrote:Allerdings lege ich für den Fall sDateDiffFmt = "JMThms" meine Hand nicht ins Feuer, dass die Berechnung der auf die Datums-/Zeitkomponenten jeweils entfallenden Anteile korrekt ist (u.a. wegen der monatsspezifischen Monatsletzten, Schaltjahren usw.).
nun ist es: 31.01.2006 05:55
sDateDiffFmt = monat
mit einer datei 30.12.2006 05:44 ergibt "-11 monate alt"
mit einer datei 30.11.2006 05:44 ergibt "-10 monate alt"
mit
sDateDiffFmt = minuten
mit einer datei 30.12.2006 05:44 ergibt "-480929 minuten alt"
zum abschluss noch ein letzte, direkte, frage:
kann es sein, das das angezeigte datumsforma sDateDiffFmt = "hmsJMT" keinen unterschied zeigt zu sDateDiffFmt = "JMThms"
bei beiden versionen stehen die sekunden an letzter stelle.
Was nützt der Löffel für die Weisheit, wenn man zu weit vom Suppentopf entfernt sitzt?
Mario
Mario
2versalzen
Aber Du hast das Problem ja auf die empfohlene Weise gelöst, nämlich für jede auszugebende Spalte eine Kopie der Datei script.wdx anzulegen, die Kopie umzubenennen und die umbenannte wdx dann zu registrieren. Um zumindest ein paar Bytes Plattenspeicherplatz zu sparen und um bei eventuellen Updates des Plugins nur eine Kopie des Plugins aktualisieren zu müssen, lege ich die Duplikate der script.wdx immer als HardLinks statt als Kopien an.
Die Scripte für die Spalten, die das Dateialter nicht aufgeteilt auf Jahre, Monate usw., sondern in einer Einheit ausgeben, kannst Du ja auch eindampfen. Tag.vbs kann z.B. so aussehen:

).
Den Fall Datum zuletzt geändert am > Jetzt könnte man aber abfangen und den Text mit der Ergebnisausgabe entsprechend formulieren.
Ja, das ScriptWDX-Plugin unterstützt in der zurzeit aktuellen Version leider nur eine Spalte. Dies ist eine Einschränkung des ScriptWDX-Plugins, nicht des TC.[...] ok, verstehe ich das prinzip von TC und dieser scripte so richtig,
das ich, wenn ich bei meiner urspünglichen idee bleibe, für jedes sortierbare alter (minuten/tage/jahre/...) ein eigenes *.vbs erstellen muss, mit der jeweiligen ausgabe in einer benutzerdefinierten spalte? [...]
Aber Du hast das Problem ja auf die empfohlene Weise gelöst, nämlich für jede auszugebende Spalte eine Kopie der Datei script.wdx anzulegen, die Kopie umzubenennen und die umbenannte wdx dann zu registrieren. Um zumindest ein paar Bytes Plattenspeicherplatz zu sparen und um bei eventuellen Updates des Plugins nur eine Kopie des Plugins aktualisieren zu müssen, lege ich die Duplikate der script.wdx immer als HardLinks statt als Kopien an.
Die Scripte für die Spalten, die das Dateialter nicht aufgeteilt auf Jahre, Monate usw., sondern in einer Einheit ausgeben, kannst Du ja auch eindampfen. Tag.vbs kann z.B. so aussehen:
Code: Select all
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
content = DateDiff("d", fso.GetFile(filename).DateLastModified, Now, 0, 0) & " Tag(e) alt"
Set fso=nothing
Nur zu, dafür isses ja da[...] ich habe mir die freiheit genommen und dein script mal etwas abgeändert. [...]

Geht leider auch nur mit Hilfe einer separaten Kopie der script.wdx[...] die ausgabe von sDateGrp gefällt mir sehr gut, ich habe noch ein paar mir wichtige angehangen. allerdings wäre dies auch in einer eigenen spalte schöner, weil praktischer/sortierbarer [...]
Rein formal ist das ist m.E. korrekt. Positive Werte liegen auf einer gedachten Zeitachse mit "Jetzt" als Nullpunkt in der Vergangenheit, negative Werte in der Zukunft. Deine Testdatei wird also erst in 11 Monaten aktuell sein (erinnert mich ein bisschen an den alten Hut: "In einem Raum befinden sich 3 Personen. Wenn 5 Personen den Raum verlassen, müssen 2 wieder hineingehen, damit der Raum leer ist"hier ein kleiner bug-report (keine lösung):
nun ist es: 31.01.2006 05:55
sDateDiffFmt = monat
mit einer datei 30.12.2006 05:44 ergibt "-11 monate alt"

Den Fall Datum zuletzt geändert am > Jetzt könnte man aber abfangen und den Text mit der Ergebnisausgabe entsprechend formulieren.
Absolut. Denn es wird in beiden Fällen der Case Else-Zweig des Select...End Select-Blocks durchlaufen. Die Bezeichnung der Variablen sDateDiffFmt ist unglücklich gewählt, denn sie suggeriert fälschlicherweise, dass man hiermit ein benutzerdefiniertes Datums-/Uhrzeitformat mit J, M, T usw. als Platzhalter für die Datumsteile festlegen kann.[...] kann es sein, das das angezeigte datumsforma sDateDiffFmt = "hmsJMT" keinen unterschied zeigt zu sDateDiffFmt = "JMThms" [...]