Problem mit FileOpen, WriteStringN

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
kaitec
Beiträge: 120
Registriert: 07.11.2005 00:50
Wohnort: Langenselbold
Kontaktdaten:

Problem mit FileOpen, WriteStringN

Beitrag von kaitec »

Hallo,

also ich hab ein Programm geschrieben, dass verschiedene Dinge Logt, dass Problem ist jetzt nur, dass ich das Programm starte, es schreib eine LOG Datei... ich beende es! Ich startet es und es schreib wieder eine LOG Datei besser gesagt es überschreibt die Letzte LOG Datei! Wie kann man die Datei fortsetzen?

Hier mal schnell
den

Code: Alles auswählen

fileop = OpenFile(0, "log.amp")

     If fileop = 0
     MessageRequester("ERRO", "I can't create the Log file", 0)
     End 
     EndIf 

          tag$ = Str(Day(Date())) 
          monat$ = Str(Month(Date())) 
          jahr$ = Str(Year(Date())) 
          stunde$ = Str(Hour(Date())) 
          minute$ = Str(Minute(Date())) 
          sekunde$ = Str(Second(Date())) 
          datum$ = tag$+"."+monat$+"."+jahr$ 
          zeit$ = stunde$+":"+minute$+":"+sekunde$      

WriteStringN(datum$+" "+zeit$+" BenutzerAnmeldung's Programm gestartet!")

;BLABLABLA - Soures Code nicht notwendig für Daten schreiben!

  Repeat
    EventID = WaitWindowEvent()
    
    If EventID = #PB_Event_Gadget


      Select EventGadgetID()
      
      Case 6
          tag$ = Str(Day(Date())) 
          monat$ = Str(Month(Date())) 
          jahr$ = Str(Year(Date())) 
          stunde$ = Str(Hour(Date())) 
          minute$ = Str(Minute(Date())) 
          sekunde$ = Str(Second(Date())) 
          datum$ = tag$+"."+monat$+"."+jahr$ 
          zeit$ = stunde$+":"+minute$+":"+sekunde$      

WriteStringN(datum$+" "+zeit$+" Benutzer: "+GetGadgetText(3)+" :hat sich angemeldet und die Endarbeitsuhr auf: "+GetGadgetText(5)+" :gestellt!")

      Case 9
      
          tag$ = Str(Day(Date())) 
          monat$ = Str(Month(Date())) 
          jahr$ = Str(Year(Date())) 
          stunde$ = Str(Hour(Date())) 
          minute$ = Str(Minute(Date())) 
          sekunde$ = Str(Second(Date())) 
          datum$ = tag$+"."+monat$+"."+jahr$ 
          zeit$ = stunde$+":"+minute$+":"+sekunde$      

WriteStringN(datum$+" "+zeit$+" Benutzer: "+GetGadgetText(8)+" :hat sich abgemeldet")
      

      EndSelect

    EndIf

  Until EventID = #PB_Event_CloseWindow
  
          tag$ = Str(Day(Date())) 
          monat$ = Str(Month(Date())) 
          jahr$ = Str(Year(Date())) 
          stunde$ = Str(Hour(Date())) 
          minute$ = Str(Minute(Date())) 
          sekunde$ = Str(Second(Date())) 
          datum$ = tag$+"."+monat$+"."+jahr$ 
          zeit$ = stunde$+":"+minute$+":"+sekunde$      

WriteStringN(datum$+" "+zeit$+" BenutzerAnmeldung's Programm beendet!")
  
CloseFile(0)
Wäre für Hilfe sehr dankbar!

Ich hänge nämlich daran fest atm!!

MfG
Kai
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

einfach den Dateizeiger mit FileSeek an's Ende der Datei bewegen:

Code: Alles auswählen

fileop = OpenFile(0, "log.amp")

     If fileop = 0
     MessageRequester("ERRO", "I can't create the Log file", 0)
     End
     EndIf

    FileSeek(Lof()) ; !!!

Bitte schreib in Deine Signatur, dass Du PB V3.94 benutzt!

Grüße .... Kiffi
a²+b²=mc²
>gLoo
Beiträge: 7
Registriert: 08.07.2006 15:34
Wohnort: trigger_hurt
Kontaktdaten:

Beitrag von >gLoo »

hi
ich habe gerade ein bisschen herumprobiert und musst feststellen, dass, wenn ich das so mache, wie du da oben angefangen hast, und mir dann die Zeit ausgeben lasse, immer "hinten" eine Zahl fehlt . :?

ich habe also nicht hh:mm:ss, wie es sein sollte, sondern hh:mm:s. Und wenn ich die Sekunden weglasse, fehlt die letzte Stelle bei den Minuten...

Kann mir einer sagen warum?
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Genaugenommen fehlt dir nicht die "hintere" sondern die "vordere" Ziffer, und das auch nicht immer.

Bei z.B. der 5. Sekunde wird nunmal nicht 05 draus, sondern 5.
Schau dir mal den Befehl RSet() an, das sollte dir helfen.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Die bessere Alternative wäre ohnehin die Verwendung von FormatDate():

Code: Alles auswählen

WriteStringN(FormatDate("%dd.%mm.%yyyy %hh:%ii:%ss", Date()) + " Programm gestartet!") 
Dann kann man sich das gesamte Datums-Zusammengewurschtel sparen.

Grüße ... Kiffi
a²+b²=mc²
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

richtig.

aber da DATE nicht das einzige ist, was man vielleicht mal formatieren möchte,
sondern auch mal ne score oder sonstwas, hier mal der kniff:

Beispiel für 8 stellen mit führenden Nullen:

Code: Alles auswählen

Form$ = Right( "0000000"+Str(Zahl) , 8 )
der nuller-string muss mindestens so lang sein, wie die anzahl stellen -1

leiter gibt es keine native funktion, einen mit Nullen gefüllten String zu erzeugen.
wenn man führende leerzeichen braucht, ist es einfacher:

Code: Alles auswählen

Form$ = Right( Space(Stellen)+Str(Zahl) , Stellen )
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Slut-Hunter
Beiträge: 40
Registriert: 05.06.2006 12:38

Re: Problem mit FileOpen, WriteStringN

Beitrag von Slut-Hunter »

kaitec hat geschrieben:Hallo,

also ich hab ein Programm geschrieben, dass verschiedene Dinge Logt, dass Problem ist jetzt nur, dass ich das Programm starte, es schreib eine LOG Datei... ich beende es! Ich startet es und es schreib wieder eine LOG Datei besser gesagt es überschreibt die Letzte LOG Datei! Wie kann man die Datei fortsetzen?

Hier mal schnell
den code
fileop = OpenFile(0, "log.amp")

If fileop = 0
MessageRequester("ERRO", "I can't create the Log file", 0)
End
EndIf
Das End ist schon oben ?

Bei mir ist es immer ganz unten.

Zu der Sache mit den Dateinamen, machs halt so, daß du nicht alles in eine Datei schreibst, sondern die Dateinamen nach dem Datum und der Uhrzeit erstellen lässt.

so was z.B

Code: Alles auswählen

Datum$ = FormatDate("%dd-%mm-%yyyy | %hh-%ii-%ss | ", Date())

CreateFile(FileID, "Datum$")
OpenFile(FileID, "Datum$")
UseFile(FileID)

WriteStringN("Dies und das^^")
CloseFile(FileID)
>gLoo
Beiträge: 7
Registriert: 08.07.2006 15:34
Wohnort: trigger_hurt
Kontaktdaten:

Beitrag von >gLoo »

Vielen Dank (euch allen) das wird mir helfen.
Antworten