LogFile System
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
> ich mein es fünktioniert und dann lese ich mir das nich mehr 10 mal durch
Programmieren ist keine Art Try & Error Baukasten
Wenn der Code funktioniert, heisst das noch lange nicht, das er sicher,
überall usw. Programmierer haben u.a. auch eine Sorgfaltspflicht, weil bei
solchen gravierenden Fehlern, wie fehlende Überprüfung der Erstellung eines
Files, schützen auch die meisten Lizensklauseln nicht.
Z.B. Win9x kann durch so etwas abstürzen, wodurch Datenverluste nicht
mehr ausgeschlossen sind.
Wenn Deine Codes immer so schlusig sind, bzw. du solche erheblichen
Mängel nicht behebst, brauchste wirklich nicht in diesem Unterforum posten,
nur meine persönliche Meinung dazu.
Programmieren ist keine Art Try & Error Baukasten

Wenn der Code funktioniert, heisst das noch lange nicht, das er sicher,
überall usw. Programmierer haben u.a. auch eine Sorgfaltspflicht, weil bei
solchen gravierenden Fehlern, wie fehlende Überprüfung der Erstellung eines
Files, schützen auch die meisten Lizensklauseln nicht.
Z.B. Win9x kann durch so etwas abstürzen, wodurch Datenverluste nicht
mehr ausgeschlossen sind.
Wenn Deine Codes immer so schlusig sind, bzw. du solche erheblichen
Mängel nicht behebst, brauchste wirklich nicht in diesem Unterforum posten,
nur meine persönliche Meinung dazu.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
> Is das nich langsamer wenn ich das immer auf die disk schreibe als wenn ich das einmal flushe?
flushen stellt nur sicher, dass der schreibvorgang genau zu dem zeitpunkt auch abgeschlossen wird.
ist ja für diese anwendung nicht unbedingt verkehrt, weil es ja in dem file sein soll, falls das prog abstürzt.
ich bin mir nicht sicher, ob das OS das auch ohne flushing im Falle eines
Absturzes sicherstellt, deswegen hast du's ja wahrscheinlich eingebaut.
wenn du das nach jedem datensatz machst, kannst du gleich ohne buffer arbeiten,
das sollte dann geschwindigkeitstechnisch keinen unterschied mehr machen.
flushen stellt nur sicher, dass der schreibvorgang genau zu dem zeitpunkt auch abgeschlossen wird.
ist ja für diese anwendung nicht unbedingt verkehrt, weil es ja in dem file sein soll, falls das prog abstürzt.
ich bin mir nicht sicher, ob das OS das auch ohne flushing im Falle eines
Absturzes sicherstellt, deswegen hast du's ja wahrscheinlich eingebaut.
wenn du das nach jedem datensatz machst, kannst du gleich ohne buffer arbeiten,
das sollte dann geschwindigkeitstechnisch keinen unterschied mehr machen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Mhh naja die Sache is die, ich gebe den HTML-Code mit mehreren Writestring aus, weil ich nich alles in eins schreiben will, wegen Übersicht.
Und is es dann nich egal ob er blos den halben HTML-Code einer Ausgabe(die mehrere Zeilen lang sein kann) ausgibt oder denn gesamten Befehl auf einmahl?
Ok, habs aber jetzt aber mal so gemacht wie dus vorgeschlagen hast.
also hier der neue Code:
Reicht ein Beispiel oder solls ne genaue anleitung sein?
also hier mal ein kleines Beispiel:
Und is es dann nich egal ob er blos den halben HTML-Code einer Ausgabe(die mehrere Zeilen lang sein kann) ausgibt oder denn gesamten Befehl auf einmahl?
Ok, habs aber jetzt aber mal so gemacht wie dus vorgeschlagen hast.
also hier der neue Code:
Code: Alles auswählen
;//###################################################//;
;//# Logfile.pbi #//;
;//###################################################//;
#EOL = Chr(13)
#Log_File = 10
#Log_FAIL = #False
#Log_OK = #True
#Log_Black = "<font color=black>"
#Log_Red = "<font color=red>"
#Log_Green = "<font color=green>"
#Log_Blue = "<font color=blue>"
#Log_Purple = "<font color=purple>"
Declare.b Log_Create(LogName.s)
Declare Log_WriteTopic(Topic.s, Size.b)
Declare Log_TextOut(Text.s)
Declare Log_TextOutN(Text.s)
Declare Log_TextOut_C(Color.s, List.b, Text.s)
Declare.b Log_ProcResult(Name.s, Result.b)
Procedure.b Log_Create(LogName.s)
If CreateFile(#Log_File,LogName+".html")
FileBuffersSize(#Log_File,0)
WriteStringN(#Log_File,"<html><head><title>Logfile</title></head>")
WriteStringN(#Log_File,"<body><font face='courier new'>")
Log_WriteTopic("Logfile", 5)
CompilerIf #PB_Compiler_Debugger
WriteStringN(#Log_File,"BUILD: DEBUG<br>")
CompilerElse
WriteStringN(#Log_File,"BUILD: RELEASE<br>")
CompilerEndIf
WriteStringN(#Log_File,FormatDate("%hh:%ii:%ss [%dd.%mm.%yyyy]",Date())+"<br><br>")
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Procedure Log_WriteTopic(Topic.s, Size.b)
WriteStringN(#Log_File,"<table cellspacing='0' cellpadding='0' width='100%%' bgcolor='#DFDFE5'>")
WriteStringN(#Log_File,"<tr>"+#EOL+"<td>"+#EOL+"<font face='arial' size='"+Str(Size)+"'>")
WriteStringN(#Log_File,Topic)
WriteStringN(#Log_File,"</font>"+#EOL+"</td>"+#EOL+"</tr>"+#EOL+"</table><br>")
EndProcedure
Procedure Log_TextOut(Text.s)
WriteString(#Log_File,Text)
EndProcedure
Procedure Log_TextOutN(Text.s)
WriteStringN(#Log_File,Text+"<br>")
EndProcedure
Procedure Log_TextOut_C(Color.s, List.b, Text.s)
If List = #True : WriteStringN(#Log_File,"<li>") : EndIf
WriteStringN(#Log_File,Color+Text+"</font>")
If List = #False : WriteStringN(#Log_File,"<br>") : Else : WriteStringN(#Log_File,"</li>") : EndIf
EndProcedure
Procedure.b Log_ProcResult(Name.s, Result.b)
If Result = #Log_OK
WriteStringN(#Log_File,"<table width='100%%' cellSpacing='1' cellPadding='5' border='0' bgcolor='#C0C0C0'>")
WriteStringN(#Log_File,"<tr><td bgcolor='#FFFFFF' width='35%%'>"+Name+"</TD>")
WriteStringN(#Log_File,"<td bgcolor='#FFFFFF' width='30%%'><font color ='green'>OK</FONT></TD><td bgcolor='#FFFFFF'")
WriteStringN(#Log_File,"width='35%%'>-/-</TD></tr></table>")
Else
WriteStringN(#Log_File,"<table width='100%%' cellSpacing='1' cellPadding='5' border='0' bgcolor='#C0C0C0'>")
WriteStringN(#Log_File,"<tr><td bgcolor='#FFFFFF' width='35%%'>"+Name+"</TD>")
WriteStringN(#Log_File,"<td bgcolor='#FFFFFF' width='30%%'><font color ='red'>ERROR</FONT></TD><td bgcolor='#FFFFFF'")
WriteStringN(#Log_File,"width='35%%'>-/-</TD></tr></table>")
EndIf
ProcedureReturn Result
EndProcedure
Reicht ein Beispiel oder solls ne genaue anleitung sein?
also hier mal ein kleines Beispiel:
Code: Alles auswählen
XIncludeFile "Logfile.pb"
Log_Create("TestLog") ;// Erstellt die Log.HTML
Global A.b = 10
Global B.b = 5
Global C.b = 0
Procedure.b Proc(Result.b)
ProcedureReturn Result
EndProcedure
Log_WriteTopic("A + B", 5) ;// Erstellt eine Überschrift, 5 = Größe
Log_TextOut("A = "+Str(A)) ;// Schreibt einen String
Log_TextOutN("\ B = "+Str(B)) ;// Schreibt einen String mit einem End Of Line(HTML)
Log_TextOutN("")
Log_TextOut_C(#Log_Blue, #False, "Blau") ;// Erstellt einen farbigen String
Log_TextOut_C(#Log_Green, #True, "Aufzählung") ;// Erstellt einen farbigen String, mit einem Aufzählungszeichen
Log_TextOut_C(#Log_Green, #True, "Aufzählung") ;// Erstellt einen farbigen String, mit einem Aufzählungszeichen
Log_ProcResult("Proc(#True):",Proc(#True)) ;//
Log_ProcResult("Proc(#False):",Proc(#False)) ;// Zeigt ob die Prcedure funktioniert hat