ForenGeburtstagsliste bearbeitung

Du brauchst Grafiken, gute Programme oder Leute die dir helfen? Frag hier.
Benutzeravatar
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

Beitrag von ts-soft »

Für den nächsten Updater, hier ein Hilfsprogramm :wink:
Die erste Liste muß aber bereits als Text bestehen.

Code: Alles auswählen

Structure Born
  Name.s
  Day.s
  Month.s
  Year.s
  MonthDay.l
EndStructure

NewList Born.Born()
Define.l File = ReadFile(#PB_Any, "geburtstag.txt")
Define.s temp, leer
If File
  While Not Eof(File)
    AddElement(Born())
    temp = ReadString(File)
    Born()\Name = Trim(StringField(temp, 1, ":"))
    temp = Trim(StringField(temp, 2, ":"))
    Born()\Day = StringField(temp, 1, ".")
    Born()\Month = StringField(temp, 2, ".")
    Born()\Year = StringField(temp, 3, ".")
    Born()\MonthDay = ParseDate("%mm%dd", Born()\Month + Born()\Day)
  Wend
  CloseFile(File)
  SortStructuredList(Born(), 2, OffsetOf(Born\Year), #PB_Sort_String)
  ForEach Born()
    With Born()
      leer = Space(20 - Len(\Name))
      Debug \Name + leer + "  :  " + \Day + "." + \Month + "." + \Year
    EndWith
  Next
  Debug "" : Debug ""
  SortStructuredList(Born(), 0, OffsetOf(Born\MonthDay), #PB_Sort_Long)
  ForEach Born()
    With Born()
      Debug \Day + "." + \Month + "  :  " + \Name
    EndWith
  Next  
EndIf
Debugausgabe kopieren und passend einfügen.

Ich hoffe, ich hab nicht zu viel geschreddert, macht Spaß :mrgreen:
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.
Bild
HemSA
Beiträge: 221
Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Kontaktdaten:

Beitrag von HemSA »

Hier noch ein kleines Burtzeltagserinnerungsprogramm. Wenn allerdings ein Monatswechsel ansteht werden die Tage nicht im Vorraus ( Tage im nächsten Monat ) angezeigt.

Code: Alles auswählen

 ;"Terminausgabe - Ausgabe nach Suchanforderung"
 ;In dem Beispielprogramm geht es um eine Datenbank, wo "Terminarten" ( Geburtstag oder andere Termine )
 ;mit dem Datum und Namen abgespeichert werden. Danach werden die Daten von der Datenbank Satz für Satz
 ;mit dem heutigen Datum verglichen (Monat und Tag) und bei Übereinstimmung in einem ListIconGadget
 ;aufgelistet. Es kann natürlich auch nach anderen "Suchmerkmalen" ausgesondert werden, es soll nur
 ;der Weg beschrieben werden, wie man das Problem angeht.
 
 ;PureBasic 4.0 
 
 
 datumheutes.s=FormatDate("%dd.%mm.%yyyy", Date())
 
 If OpenWindow(0, 100, 100, 550, 200, "Termine - für gestern, heute ("+datumheutes.s+"), morgen und übermorgen", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget |#PB_Window_TitleBar| #PB_Window_ScreenCentered)
   
   If CreateGadgetList(WindowID(0))
     ListIconGadget(0, 5, 5, 540, 190, "Datum", 70,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
     AddGadgetColumn(0, 1, "Terminart", 140)
     AddGadgetColumn(0, 2, "Name", 320)
          
     
      If ReadFile(1,"termin.dat") 
          laengel.l= Lof(1) 
          zeilenanzahlw.w=laengel.l/52 
        
          tags.s=FormatDate("%dd",Date()) 
          monats.s=FormatDate("%mm",Date())
          jahrs.s=FormatDate("%yyyy",Date()) 
          
          tagl.l= Val(tags.s)
         
               
              
          For iw.w=0 To zeilenanzahlw.w
        
          FileSeek(1,iw.w*52)                                        
                   
          wert2s.s=ReadString(1) 
          datums.s=Left(wert2s.s,10) 
          vornames.s=Mid(wert2s.s,11, 15) 
          nachnames.s=Mid(wert2s.s,26, 25)
       
          tagdateis.s=Left(datums.s,2)
          monatdateis.s=Mid(datums.s,4,2)
          
          tagdateil.l= Val(tagdateis.s)

          If monatdateis.s=monats.s
          
                If tagdateil.l+1=tagl.l Or tagdateil.l=tagl.l Or tagdateil.l-1=tagl.l Or tagdateil.l-2=tagl.l
                 
                 AddGadgetItem(0, -1,datums.s+Chr(10)+vornames.s+Chr(10)+nachnames.s)
       
                EndIf
         
          EndIf
          
        
          Next iw.w
        
        CloseFile(1) 
      EndIf
      
      
      Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
   
 EndIf
 
; IDE Options = PureBasic v4.00 (Windows - x86)
; CursorPosition = 17
; Folding = -
; Executable = Terminausgabe.exe
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
HemSA
Beiträge: 221
Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Kontaktdaten:

Beitrag von HemSA »

Und hier wäre dann noch das Eingabeprogramm dafür.

Code: Alles auswählen

 ;Dateneingabe
 ;In einem Eingabe-Gadget werden für einen neuen Datensatz die Felder eingegeben und in der Datenbank am 
 ;Schluß von den schon vorhandenen Datensätzen angehängt.
 
 ;PureBasic 4.0

If OpenWindow(0,216,0,500,300,"Termineingabefenster",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar )
  If CreateGadgetList(WindowID(0))
      TextGadget(1, 20, 20, 150, 20, "Dateneingabefenster")
      TextGadget(2, 20, 60, 40, 20, "Datum")                       
      StringGadget(3, 80, 60, 60, 20, "")                          
      TextGadget(4, 20, 100, 50, 20, "Terminart")
      StringGadget(5, 80, 100, 100, 20, "")
      TextGadget(6, 20, 140, 60, 20, "Name")
      StringGadget(7, 80, 140, 150, 20, "")      
      ButtonGadget(8, 60, 200, 100, 30, "Daten hinzufügen")
      ButtonGadget(9, 200, 200, 100, 30, "Beenden")
      TextGadget(10, 150, 60, 380, 20, "Nur die ersten 10 Zeichen werden übernommen")
      TextGadget(11, 190, 100, 380, 20, "Nur die ersten 15 Zeichen werden übernommen")
      TextGadget(12, 240, 140, 380, 20, "Nur die ersten 25 Zeichen werden übernommen")
  
  
  EndIf

  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow 
      Quit = 1
    EndIf
    If EventID = #PB_Event_Gadget
      
      
      
        If EventGadget()=8
      
             text1s.s = GetGadgetText(3)                             ;auslesen vom Stringgadget 
             ergebnis1s.s = LSet(text1s.s, 10)                       ;auffüllen/begrenzen des Stringgadget auf 10 Zeichen
             text2s.s = GetGadgetText(5)
             ergebnis2s.s = LSet(text2s.s, 15)
             text3s.s = GetGadgetText(7)
             ergebnis3s.s = LSet(text3s.s, 25)
             textgesamts.s = ergebnis1s.s+ergebnis2s.s+ergebnis3s.s  ;zusammenlegen von den Feldern ( Gesamttext )
      
            If OpenFile(1,"termin.dat")
              laengel.l= Lof(1)                                      ; ermitteln der Dateilaenge              
              FileSeek(1,laengel.l)                                  ; setzt den Zeiger ans Dateiende           
      
              WriteStringN(1,textgesamts.s)                          ;schreibt den Gesamttext an das Ende von der Datei
      
              CloseFile(1)                                           ;schließt die Datei
          EndIf
        
        SetGadgetText(3, "")                                         ;Eingabefelder werden gelöscht nachdem der 
        SetGadgetText(5, "")                                         ;"Daten hinzufügen" BUTTON gedrückt wurde
        SetGadgetText(7, "")
        
        EndIf
      
    
        If EventGadget()=9
         Quit = 1
        EndIf
           
    EndIf
 Until Quit=1
  
EndIf
End
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
Antworten