Page 1 of 1

LogAppend() [UDF]

Posted: 11 Sep 2017, 03:36
by BoBo
Basierend auf dieser anfrage [hier], eine funktion, um eine datei mit dateiinhalt in aufsteigernder anordnung anzulegen/-zeigen.
Auch von Dll-, COM- und OOP-phobikern beherrschbar. :)

LogAppend().ahk

Code: Select all

If (A_ScriptName = "LogAppend().ahk") {											; test section. Change filename accordingly or remove this section.
	Random, num, 1, 10000
	LogAppend()																	; func call to create a default file (that is named <YYYYMMDD>.log) to add a timestamp to it. 
	LogAppend("This is today's random number:`t" . num,"myOwn.log")				; func call to create "myOwn.log" and to add the specified content to it.
	ExitApp
	}																			; end of test section.
	
LogAppend(string="",filename="") {											
	filename := (filename = "") ? SubStr(A_Now,1,8) . ".log" : filename			; creating a default filename if no filename has been specified with the functions call
	string := (string = "") ? A_Now : string									; creating a default file content (here a timestamp) if no content has been specified with the functions call													; edit the current log
	FileRead, content,% filename												; so read its content (if a file already exists) ...
	FileMove,% filename,% filename ".bak", 1									; save the current file (if existing) as a backup (that file will be overwritten each time!)
	FileAppend,% string "`r`n" content,% filename								; write/create an updated file with its content in ascending order
	SoundBeep
	}
... und da in der original anfrage (oben verlinkt) die rede davon war den inhalt des clipboards (altdeutsch: 'zwischenablage') in umgekehrter reihenfolge zu sortieren , hier noch ...

FlipContent().ahk

Code: Select all

If (A_ScriptName = "FlipContent().ahk") {											; test section. Change filename accordingly or remove this section.
	MsgBox % ClipBoard := FlipContent(ClipBoard)
	SoundBeep
	ExitApp
	}																				; end of test section.


FlipContent(clipB) {											
	content := StrSplit(clipB,"`n")
	cnt := content.MaxIndex()
	Loop % content.MaxIndex() {
		newContent .= content[cnt] "`n"
		cnt--
		}
	Return % newContent
	}
Edited. See comments below :thumbup:

Re: LogAppend() [UDF]

Posted: 11 Sep 2017, 05:21
by wolf_II
Kleiner Hinwies: Dein Code "scheint" zu suggerieren, daß #SingleInstance, Force nur abhängig von A_ScriptName = "FlipContent().ahk" ausgeführt wird,
oder anders gesagt, #SingleInstance, Force wird NICHT ausgeführt, wenn A_ScriptName != "FlipContent().ahk".

Ich vermute, daß Du das weißt, Dein Code weiß es aber nicht. ;)

Alternative: Ich bin selber auf dem Holzweg, in dem Fall -> kann mich bitte jemand verbessern.

Re: LogAppend() [UDF]

Posted: 11 Sep 2017, 05:35
by nnnik
#SingleInstance, Force wird nicht ausgeführt sondern eingelesen, bevor das eigentliche ausführen beginnt. Ein If beinflusst es nicht.

Re: LogAppend() [UDF]

Posted: 11 Sep 2017, 05:51
by BoBo
wolf_II wrote:Kleiner Hinwies: Dein Code "scheint" zu suggerieren, daß #SingleInstance, Force nur abhängig von A_ScriptName = "FlipContent().ahk" ausgeführt wird,
oder anders gesagt, #SingleInstance, Force wird NICHT ausgeführt, wenn A_ScriptName != "FlipContent().ahk".

Ich vermute, daß Du das weißt, Dein Code weiß es aber nicht. ;)

Alternative: Ich bin selber auf dem Holzweg, in dem Fall -> kann mich bitte jemand verbessern.
Bei mir zugegeben reine vermutung (funktionierte ja auch alles :silent: ).
Dachte damit vermeiden zu können, das einem nutzer der funktion eine mitunter ungewünschte einschränkung auferlegt wird??!

Re: LogAppend() [UDF]

Posted: 11 Sep 2017, 06:37
by wolf_II
Lass uns den folgenden Fall betrachten: ein User Deiner Funktion will diese wie folgt verwenden:

Code: Select all

#Persistent

#SingleInstance, Off ; allow multiple instances
#Include, LogAppend().ahk

; clever code here
LogAppend("Hi, BoBo", "test.txt")
; more clever code
Du kannst am Beispiel sehen, daß die Include Zeile das ursprüngliche Verhalten des Scriptes beeinflußt. (#SingleInstance, Off wird "überschrieben")

Code: Select all

#Persistent

#Include, LogAppend().ahk
#SingleInstance, Off ; allow multiple instances

; clever code here
LogAppend("Hi, BoBo", "test.txt")
; more clever code
Du kannst am zweiten Beispiel sehen, daß die Include Zeile das ursprüngliche Verhalten des Scriptes NICHT beeinflußt.. (#SingleInstance, Off wird nicht "überschrieben")

Momentan ist das Verhalten eines Scriptes NUR unbeeinflußt, WENN die Include Zeile VOR der ursprünglichen #SingleInstance, Off erscheint.
In anderen Worten: Deine Funktion KANN das Verhalten eines Scriptes, in dem es Includiert wird, negativ beeinflussen, WENN der User unachtsam ist.

Ich denke, daß dem User keine ungewünschte Einschränkung auferlegt wird, wenn Du die Zeile ganz rausläßt.

Re: LogAppend() [UDF]

Posted: 11 Sep 2017, 06:53
by BoBo
wolf_II wrote:Ich denke, daß dem User keine ungewünschte Einschränkung auferlegt wird, wenn Du die Zeile ganz rausläßt.
Done. Thx :thumbup:

Re: LogAppend() [UDF]

Posted: 11 Sep 2017, 07:36
by wolf_II
nnnik wrote:#SingleInstance, Force wird nicht ausgeführt sondern eingelesen, bevor das eigentliche ausführen beginnt. Ein If beinflusst es nicht.
@nnick: Danke fürs Bestätigen. :thumbup:

PS:
@BoBo und nnick: Ich war nicht in der Lage mich im ersten Reply klar auszudrücken. Ich wollte sagen, "Dein Code scheint zu suggerieren, ...", was aber nicht der Fall ist.
Offensichtlich konntet ihr beide meinen Hinweis zwischen den Zeilen herauslesen. :bravo: :thumbup: