Seite 2 von 2

Verfasst: 09.04.2007 20:51
von Artus
@AND51: Is das nich langsamer wenn ich das immer auf die disk schreibe als wenn ich das einmal flushe?, aber wenn das genau so schnell is mach ich das so^^

Verfasst: 09.04.2007 20:55
von ts-soft
> ich mein es fünktioniert und dann lese ich mir das nich mehr 10 mal durch
Programmieren ist keine Art Try & Error Baukasten :wink:
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.

Verfasst: 09.04.2007 21:01
von Kaeru Gaman
> 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.

Verfasst: 09.04.2007 21:24
von Artus
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:

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

Verfasst: 09.04.2007 21:27
von MVXA
Ganz süß, für nen Anfänger. Ich schätze mal mehr lässt sich dabei
leider nicht aus PB raus holen, schade.

Verfasst: 09.04.2007 21:38
von Artus
^^ wer sagt ich binn Anfänger?!
Mhh aber mehr brauch man eigentlich nich die Funktionen reichen voll und ganz. Ich mein mann kann mit PB, alles machen wenn man HTML kann^^

Verfasst: 09.04.2007 23:25
von MVXA
Ich meinte das wäre für nen Anfänger ganz süß gewesen. Noch mehr
interessant wäre z.B. gewesen in welchem Modul denn diese Log aus-
gegeben wurde. gibt aber sich noch mehr Dinge, die man noch mit
rein bauen könnte.