ProgressBar blinkt

Anfängerfragen zum Programmieren mit PureBasic.
dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

ProgressBar blinkt

Beitrag von dietmar »

Mein Prog lädt über eine FTP-Verbindung viele Dateien runter, aus denen dann später mehrere Daten ausgelesen werden, für beide Vorgäng wollt ich dann je eine ProgressBar haben. Funktioniert soweit ganz gut, nur das die 4 benötigten Gadgets unerlaubt blinken/flattern an was könnte das liegen und wie kann man das verhindern?
Wir leben alle unter dem gleichen Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.
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 »

Vermutlich liegt das an Deiner Event-Loop Routine

>> wie kann man das verhindern?
Vermutlich schon :D , aber meine Glaskugel ist kaputt :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
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Sowas passiert mir auch ständig, da hilft nur ein bisschen experimentieren mit Abfrage etc.

KeyKon
(\/) (°,,,°) (\/)
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

ts-soft hat geschrieben:Vermutlich liegt das an Deiner Event-Loop Routine

>> wie kann man das verhindern?
Vermutlich schon :D , aber meine Glaskugel ist kaputt :mrgreen:
:lol:
Er fragte nach wie, nicht ob :mrgreen: *klugscheiß* ... aber zur Glaskugel

^^Ich könnt dem noch was hinzufügen und mich ma selber zitieren.
Wie war das noch mit dem Forum und dem Hellseher? Solche Threads in einem Hellseher-Forum eröffnen :mrgreen: ...
Alternative wäre, du postest deinen aktuellen Code ...

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
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 »

PMV hat geschrieben: Er fragte nach wie, nicht ob :mrgreen: *klugscheiß*
Aber er wollte ob Wissen, da ging die Glaskugel noch.
Aber diese Fragen ohne Code, worauf man sowieso fast alles Antworten
kann, finde ich schon witzig
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
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

Ich gehe mal davon aus, dass du bei jedem Event den Vortschritt anpasst.
D.h. du solltest nicht so oft den Status des gadgets ändern. Das bekommst du am besten mit Modulu hin (%).

Code: Alles auswählen


t+1
If t %100 = 0

;Hier solltest du dann den Status verändern.

t=0
endif


dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

Beitrag von dietmar »

Ich würd den Code ja reinstellen, aber da ich Anfänger bin ist der Code schlecht strukturiert und so gut wie nicht eingerückt. Vom Stil wollen wir an dieser Stelle mal nicht reden.

Aber Hellsehen ist einfacher als Dunkelsehen
Wir leben alle unter dem gleichen Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

los stell rein, dann können wir dir gleich noch sagen wie du ihn besser strukturieren kannst. :allright:
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
dietmar
Beiträge: 97
Registriert: 19.09.2005 19:11
Wohnort: Zuhause

Beitrag von dietmar »

Stimmt ich hab viel zu oft den Status akualisiert. Jetzt ist es besser aber noch lange nicht gut.

Code: Alles auswählen

Code:
;-Variablen deklarieren
;{ StringVariablen
Auftragsnummer.s
Auftragsnummer1.s
Datei.s
Datum.s
Datum1.s
DAUH.s
DirectoryHP.s
Eingabe.s
Endung.s
Endung1.s
fehlendeSNR.s
fehlendeSNRe.s
fehlendeSNRl.s
FEL.s
File.s
Jahr.s
Minute.s
Monat.s
Ordner.s
Pruefergebnis.s
r1.s
r2.s
ReeleNr.s
s.l
Sekunde.s
Seriennummer.s
Seriennummer1.s
split1.s
split2.s
split3.s
split4.s
Stunde.s
Tag.s
Teil.s
Teil1.s
Test1.s
Zeitcode1h.s
Zeitcode1m.s  
Zeitcode1s.s  
Zeitcode2h.s   
Zeitcode2m.s
Zeitcode2s.s
;}

;{ LongVariablen
ASZ.l
DA.l
DAZ.l
DAZ1.l
doppeltPass.l
Ergebnis1.l
Ergebnis2.l
Ergebnis3.l
Ergebnis4.l
Faktor2.l; Seriennummer
Faktor3.l; Auftragnummer
fensterz.l
Gadget.l  = 6
Gadget1.l = 6
Laenge.l
Laenge1.l
LPLFail.l
LPLFehler.l
LPLPass.l
Position.l
r3.l
r31.s
r3l.l
r3e.l
r3l1.s = Hex(r3l)
r3e1.s
schlecht.l = 0
start.l
Versuche.l = 1
y.l = 80
y1.l = 80
Zeiten.l
;}

;{ FloatVariablen
Size.f
Size1.f
;}

;{ Structuren und Listen
Structure Daten 
  Seriennummer.s
  Datum.s
  Uhrzeit.s
  Pruefergebnis.s
  Auftragsnummer.s
  Versuche.l
  Dateiname.s
  ReeleNr.l
  dochgut.l
  Groesse.f
  Zeit.l
EndStructure

Structure Rechnen 
  ReeleNr.l
EndStructure

Structure FF
  Seriennummer.s
  Versuche.l
EndStructure  

NewList LPLPass.Daten()
NewList LPLFail.Daten()
NewList LPLFehler.Daten()
NewList LPLFehlerfiktiv.FF()
NewList fiktiv.Rechnen()
;}

Anfang:

;-Auswahl der Auszuwertenden E+H LPL nach der Benutzereingabe
;{ Fenster einrichten und Auswahl
DirectoryHP.s

If OpenWindow(0,0,0,350,350,#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget ,"Endress & Hauser   'Kontrolle'") And CreateGadgetList(WindowID(0)) 
EndIf
TextGadget   ( 0,  15,  10, 330,  40, "Einfach die zu überprüfende LPL auswählen." + Chr(13) + "Achtung! Dieses Programm hat keine Freigabe und dient nur zu Testzwecken!") 
ButtonGadget ( 1,  40, 100, 120,  20, "FEL51")
ButtonGadget ( 2, 180, 100, 120,  20, "FEL52")
ButtonGadget ( 3,  40, 140, 120,  20, "FEL53") : DisableGadget(3, 1)
ButtonGadget ( 4, 180, 140, 120,  20, "FEL54")
ButtonGadget ( 5,  40, 180, 120,  20, "FEL55") : DisableGadget(5, 1)
ButtonGadget ( 6, 180, 180, 120,  20, "FEL56")
ButtonGadget ( 7,  40, 220, 120,  20, "FEL57")
ButtonGadget ( 8, 180, 220, 120,  20, "FEL58")
ButtonGadget ( 9,  75, 290, 200,  20, "Abbrechen")
Frame3DGadget(10,  15,  60, 310, 205,"Hier die Auswahl treffen:",#PB_Frame3D_Double)
TextGadget   (11,  10, 320, 330,  20, "Erstellt von D. Schätzle",  #PB_Text_Border | #PB_Text_Center)

GadgetToolTip(1, "Erstellt eine Auswertung für die FEL51")
GadgetToolTip(2, "Erstellt eine Auswertung für die FEL52")
GadgetToolTip(3, "Erstellt eine Auswertung für die FEL53")
GadgetToolTip(4, "Erstellt eine Auswertung für die FEL54")
GadgetToolTip(5, "Erstellt eine Auswertung für die FEL55")
GadgetToolTip(6, "Erstellt eine Auswertung für die FEL56")
GadgetToolTip(7, "Erstellt eine Auswertung für die FEL57")
GadgetToolTip(8, "Erstellt eine Auswertung für die FEL58")
GadgetToolTip(9, "Beendet das Programm ohne eine Auswertung.")

Repeat

     EventID = WaitWindowEvent() 
     
     Select EventID

Case #PB_Event_Gadget 
         Select EventGadgetID() 
           Case 1 : Gosub FEL51 
           Case 2 : Gosub FEL52
           Case 3 : Gosub FEL55  
           Case 4 : Gosub FEL54
           Case 5 : Gosub FEL55 
           Case 6 : Gosub FEL56
           Case 7 : Gosub FEL57 
           Case 8 : Gosub FEL58
           Case 9 : Gosub Fine
EndSelect 
EndSelect

Until EventID = #PB_Event_CloseWindow

If EventID = #PB_Event_CloseWindow
  Gosub Fine
EndIf
;}

FEL51:
;{ Vorgaben

CloseWindow(0)

Endung = "BD6"
Faktor1 = 115  ; Datum und Uhrzeit
Faktor2 = 100  ; Seriennummer
Faktor3 = 187  ; Auftragsnummer
Ordner = "D:\Auswertung\52019042_msc\"
FEL = "FEL51"
DirectoryHP = "/var/hp3070/qm/logdata/testerq_e+h/52019042_msc" 

Gosub Weiter

Return  
;}
FEL52:
;{ Vorgaben

CloseWindow(0)

Endung = "BD6"
Faktor1 = 115  ; Datum und Uhrzeit
Faktor2 = 100  ; Seriennummer
Faktor3 = 203  ; Auftragsnummer
Ordner = "D:\Auswertung\52019043_msc\"
FEL = "FEL52"
DirectoryHP = "/var/hp3070/qm/logdata/testerq_e+h/52019043_msc"

Gosub Weiter 
Return  
;}
FEL54:
;{ Vorgaben

CloseWindow(0)

Endung = "BD6"
Faktor1 = 114  ; Datum und Uhrzeit
Faktor2 = 99   ; Seriennummer
Faktor3 = 202  ; Auftragsnummer
Ordner = "D:\Auswertung\52019044_msc\"
FEL = "FEL54"
DirectoryHP = "/var/hp3070/qm/logdata/testerq_e+h/52019044_msc"

Gosub Weiter

Return  
;}
FEL55:
;{ Vorgaben

CloseWindow(0)

Endung = "BD6"
Faktor1 = 0  ; Datum und Uhrzeit
Faktor2 = 0  ; Seriennummer
Faktor3 = 0  ; Auftragsnummer
Ordner = "D:\Auswertung\52019045_msc\"
FEL = "FEL55"
DirectoryHP = "/var/hp3070/qm/logdata/testerq_e+h/51019045_msc"

Gosub Weiter 

Return  
;}
FEL56:
;{ Vorgaben

CloseWindow(0)

Endung = "BC4"
Faktor1 = 114  ; Datum und Uhrzeit
Faktor2 = 99   ; Seriennummer
Faktor3 = 202  ; Auftragsnummer
Ordner = "D:\Auswertung\52020891_msc\"
FEL = "FEL56"
DirectoryHP = "/var/hp3070/qm/logdata/testerq_e+h/52020891_msc"

Gosub Weiter

Return  
;}
FEL57:
;{ Vorgaben

CloseWindow(0)

Endung = "BC4"
Faktor1 = 115  ; Datum und Uhrzeit
Faktor2 = 100  ; Seriennummer
Faktor3 = 187  ; Auftragsnummer
Ordner = "D:\Auswertung\52020892_msc\"
FEL = "FEL57"
DirectoryHP = "/var/hp3070/qm/logdata/testerq_e+h/52020892_msc"

Gosub Weiter 

Return
;}
FEL58:
;{ Vorgaben

CloseWindow(0)

Endung = "BC4"
Faktor1 = 114  ; Datum und Uhrzeit
Faktor2 = 99   ; Seriennummer
Faktor3 = 205  ; Auftragsnummer
Ordner = "D:\Auswertung\52020893_msc\"
FEL = "FEL58"
DirectoryHP = "/var/hp3070/qm/logdata/testerq_e+h/52020893_msc"

Gosub Weiter

Return
;}

Weiter:

If DeleteDirectory(Ordner, "*.*")
EndIf   
If CreateDirectory(Ordner)
EndIf

;{ FTP Verbindung aufbauen / schliessen und Dateien kopieren | zu hause anders als sonst

Procedure.l FTPInit() 
  ProcedureReturn InternetOpen_("FTP",1,"","",0) 
EndProcedure 

Procedure.l FTPConnect(hInternet,Server.s,User.s,Password.s,Port.l) 
  ProcedureReturn InternetConnect_(hInternet,Server,Port,User,Password,1,0,0) 
EndProcedure 

Procedure.l FTPSetDir(hConnect.l,Dir.s) 
  ProcedureReturn FtpSetCurrentDirectory_(hConnect,Dir) 
EndProcedure 

Procedure.l FTPDownload(hConnect.l,Source.s,Dest.s) 
  ProcedureReturn FtpGetFile_(hConnect,Source,Dest,0,0,0,0) 
EndProcedure   

Procedure.l FTPClose(hInternet.l) 
  ProcedureReturn InternetCloseHandle_(hInternet) 
EndProcedure 

;{ Dateien zählen für ProgressBar
hInternet=FTPInit() 
If hInternet 
  hConnect=FTPConnect(hInternet,"HP3070","user1","jochen1",21) 
  If hConnect 
    FTPSetDir(hConnect,DirectoryHP)
    hFind=FtpFindFirstFile_(hConnect,"*.*",@FTPFile.WIN32_FIND_DATA,0,0) 
    If hFind 
      Find=1 
      File.s = PeekS(@FTPFile\cFileName)
      DA = DA + 1
      While Find 
        Find=InternetFindNextFile_(hFind,@FTPFile) 
        If Find 
          DA = DA + 1
        EndIf
      Wend 
    EndIf
  EndIf 
EndIf
;}

;{ Dateien kopieren
hInternet=FTPInit() 
If hInternet 
  hConnect=FTPConnect(hInternet,"HP3070","passwort","benutzer",21) 
  If hConnect 
    FTPSetDir(hConnect,DirectoryHP)
    
    If OpenWindow(2,0,0,610,90,#PB_Window_SystemMenu|#PB_Window_ScreenCentered ,"Kopiere und lese die Prüfdateien von " + FEL) And CreateGadgetList(WindowID(2))
       TextGadget       (0,  10,  10, 250, 20, "Die Dateien werden von der HP3070 kopiert.",#PB_Text_Center)
       ProgressBarGadget(1,  10,  40, 250, 20, 0,DA.l, #PB_ProgressBar_Smooth)
       TextGadget       (2, 300,  10, 250, 20, "Die Dateien werden gelesen.",#PB_Text_Center)
       ProgressBarGadget(3, 320,  40, 250, 20, 0,DA.l, #PB_ProgressBar_Smooth)
       SetGadgetState   (3,  0)
    EndIf
    
    hFind=FtpFindFirstFile_(hConnect,"*.*",@FTPFile.WIN32_FIND_DATA,0,0) 
    If hFind 
      Find=1 
      File = PeekS(@FTPFile\cFileName)
      FTPDownload(hConnect, File, Ordner + File)
      While Find 
        Find=InternetFindNextFile_(hFind,@FTPFile) 
        If Find 
          File = PeekS(@FTPFile\cFileName)
          FTPDownload(hConnect, File.s, Ordner + File)
          UseWindow(2)
          TextGadget       (0,  10,  10, 250, 20, "Die Dateien werden von der HP3070 kopiert.",#PB_Text_Center)
          ProgressBarGadget(1,  10,  40, 250, 20, 0,DA, #PB_ProgressBar_Smooth)
          TextGadget       (2, 300,  10, 250, 20, "Danach werden die Dateien gelesen.",#PB_Text_Center)
          ProgressBarGadget(3, 320,  40, 250, 20, 0,DA, #PB_ProgressBar_Smooth)
          DAZ = DAZ + 1
          If WindowEvent() = #PB_Event_CloseWindow
            If MessageRequester("Auswertung abgebrochen", "Der Benutzer hat die Auswertung vorzeitig abgebrochen.")
            EndIf
            Gosub Fine
          EndIf
        EndIf
      SetGadgetState   (1,  DAZ)
      Wend 
    EndIf
  EndIf
EndIf
;}

;}

UseWindow(2)
TextGadget       (0,  10,  10, 250, 20, "Die Dateien wurden erfolgreich kopiert.",#PB_Text_Center)
TextGadget       (2, 300,  10, 250, 20, "Die Dateien werden gelesen.",#PB_Text_Center)
SetGadgetState   (1,  DAZ)
If  ExamineDirectory(0, Ordner, "*.*") 
Else
    CloseWindow(2)
    MessageRequester("Fehler beim Auswerten von " + FEL, "Konnte den Ordner " + Ordner + " nicht finden." + Chr(10) + Chr(10)+ "Das Programm wird beendet.")
    Gosub Fine 
EndIf

Repeat

;{ eigentliches Auslesen
Name = NextDirectoryEntry()
  
If Name = 2
   Name = NextDirectoryEntry()
   Gosub Ordner
EndIf

If Name = 0
  Gosub Ende
EndIf

DateiName$ = DirectoryEntryName()
Size1 = FileSize(Ordner + DateiName$)
  
If Name = 1
   ReadFile(2, Ordner + DateiName$)
   Pruefergebnis = "Pass"
;-Auslesen aus der Datei
   FileSeek(Faktor1)
   DAUH = ReadString()
   FileSeek(Faktor2)
   Seriennummer = ReadString()
   FileSeek(Faktor3)
   Auftragsnummer = ReadString()
   
;-Prüfen ob Datei Fail enthält 
   FileSeek(0)
   Repeat
    Teil = ReadString()
    Laenge = Len(Teil)
    Suche = FindString(Teil, "RPT", 0)
    If Suche = 0
      If Laenge > 0
        Position = Position +  Laenge
      Else 
        Position + 1
      EndIf
    Else
      Position = Eof(2)
      Pruefergebnis = "Fail"
    EndIf
 Until Eof(2)
;}
  
;-Auftragsnummer1 und Seriennummer1 einkürzen; Datum aufteilen zum besseren Verständnis

;{ Kürzungen

   ANR.s           = Mid(Auftragsnummer, 1,  2)
If ANR = "60"   
   Auftragsnummer1 = Mid(Auftragsnummer, 1,  8)
Else
   TA.l = CountList(LPLPass())
     If TA > 0
        FirstElement(LPLPass())
        Auftragsnummer1 = LPLPass()\Auftragsnummer
     Else 
        Auftragsnummer1 = "Fehler"
     EndIf      
EndIf
   Seriennummer1   = Mid(Seriennummer,   1, 11)
   Tag             = Mid(DAUH,           5  ,2)
   Monat           = Mid(DAUH,           3  ,2)
   Jahr            = Mid(DAUH,           1  ,2)
   Stunde          = Mid(DAUH,           7  ,2)
   Minute          = Mid(DAUH,           9  ,2)
   Sekunde         = Mid(DAUH,          11  ,2)
   ReeleNr         = Mid(Seriennummer1,  3  ,4)
   r1              = Mid(Seriennummer1,  0  ,2)
   r2              = Mid(Seriennummer1,  7  ,5)
   Size            = Size1 / 1024
   Zeitcode1s      = Mid(DateiName$,    11  ,2)
   Zeitcode1m      = Mid(DateiName$,     9  ,2)
   Zeitcode1h      = Mid(DateiName$,     7  ,2)
   Zeitcode2s      = Mid(DAUH,          11  ,2)
   Zeitcode2m      = Mid(DAUH,           9  ,2)
   Zeitcode2h      = Mid(DAUH,           7  ,2)
   Zeitcode = (3600 * Val(Zeitcode1h.s) + 60 * Val(Zeitcode1m.s) + Val(Zeitcode1s.s)+1) - (3600 * Val(Zeitcode2h.s) + 60 * Val(Zeitcode2m.s) + Val(Zeitcode2s.s))
   Zeiten = Zeiten + Zeitcode
  ;}

;-Prüfen ob Seriennummer stimmt

Endung1 = Mid(Seriennummer1, 9, 3)

;{ Endung prüfen
If Endung = Endung1 
  Gosub klar
Else 
  If Endung = "_01"
   Gosub klar
  Else
   If Endung = "_02"
      Gosub klar
   Else
    If Endung = "_03"
       Gosub klar
    Else
     If Endung = "_04"
        Gosub klar
     Else
      If Endung = "_05"
         Gosub klar
      Else
       If Endung = "_06"
          Gosub klar
       Else
        If Endung = "_07"
           Gosub klar
        Else
         If Endung = "_08"
            Gosub klar
         Else
          FileSeek(0)
          Repeat
           Teil1 = ReadString()
           Laenge1 = Len(Teil1)
           Suche1 = FindString(Teil1, Endung, 0)
           Endung1 = Mid(Teil1, Suche1, 3)
           If Endung1 = Endung
              Test1 = Mid(Teil1, Suche1 - 8, 11)
              Seriennummer1 = Test1
           Else  
            If Suche1 = 0
             If Laenge > 0
                Position1.l = Position1 + Laenge
             Else
                Position + 1
             EndIf
            Else
             Test1.s = Mid(Teil1, 17, 11)
             Seriennummer1 = Test1
            EndIf
           EndIf
          Until Eof(2) 
         EndIf
        EndIf
       EndIf
      EndIf
     EndIf
    EndIf
   EndIf
  EndIf       
EndIf
  CloseFile(2)
;}  

;- Mittel-String von der Seriennummer umwandeln in eine Zahl

klar:

split1 = Mid(ReeleNr, 1, 1)
split2 = Mid(ReeleNr, 2, 1)
split3 = Mid(ReeleNr, 3, 1)
split4 = Mid(ReeleNr, 4, 1)

;{ Manuelles umrechnen von Hex in Dez
; 1. Stelle
If split1 = "0"
  Ergebnis1 = 0
EndIf
If split1 = "1"
  Ergebnis1 = 1
EndIf
If split1 = "2"
  Ergebnis1 = 2
EndIf
If split1 = "3"
  Ergebnis1 = 3
EndIf
If split1 = "4"
  Ergebnis1 = 4
EndIf
If split1 = "5"
  Ergebnis1 = 5
EndIf
If split1 = "6"
  Ergebnis1 = 6
EndIf
If split1 = "7"
  Ergebnis1 = 7
EndIf
If split1 = "8"
  Ergebnis1 = 8
EndIf
If split1 = "9"
  Ergebnis1 = 9
EndIf
If split1 = "A"
  Ergebnis1 = 10 
EndIf  
If split1 = "B"
  Ergebnis1 = 11
EndIf
If split1 = "C"
  Ergebnis1 = 12
EndIf
If split1 = "D"
  Ergebnis1 = 13
EndIf
If split1 = "E"
  Ergebnis1 = 14
EndIf
If split1 = "F"
  Ergebnis1 = 15
EndIf
; 2. Stelle
If split2 = "0"
  Ergebnis2 = 0
EndIf
If split2 = "1"
  Ergebnis2 = 1
EndIf
If split2 = "2"
  Ergebnis2 = 2
EndIf
If split2 = "3"
  Ergebnis2 = 3
EndIf
If split2 = "4"
  Ergebnis2 = 4
EndIf
If split2 = "5"
  Ergebnis2 = 5
EndIf
If split2 = "6"
  Ergebnis2 = 6
EndIf
If split2 = "7"
  Ergebnis2 = 7
EndIf
If split2 = "8"
  Ergebnis2 = 8
EndIf
If split2 = "9"
  Ergebnis2 = 9
EndIf
If split2 = "A"
  Ergebnis2 = 10
EndIf
If split2 = "B"
  Ergebnis2 = 11
EndIf
If split2 = "C"
  Ergebnis2 = 12
EndIf
If split2 = "D"
  Ergebnis2 = 13
EndIf
If split2 = "E"
  Ergebnis2 = 14
EndIf
If split2 = "F"
  Ergebnis2 = 15
EndIf
; 3. Stelle
If split3 = "0"
  Ergebnis3 = 0
EndIf
If split3 = "1"
  Ergebnis3 = 1
EndIf
If split3 = "2"
  Ergebnis3 = 2
EndIf
If split3 = "3"
  Ergebnis3 = 3
EndIf
If split3 = "4"
  Ergebnis3 = 4
EndIf
If split3 = "5"
  Ergebnis3 = 5
EndIf
If split3 = "6"
  Ergebnis3 = 6
EndIf
If split3 = "7"
  Ergebnis3 = 7
EndIf
If split3 = "8"
  Ergebnis3 = 8
EndIf
If split3 = "9"
  Ergebnis3 = 9
EndIf
If split3 = "A"
  Ergebnis3 = 10
EndIf
If split3 = "B"
  Ergebnis3 = 11
EndIf
If split3 = "C"
  Ergebnis3 = 12
EndIf
If split3 = "D"
  Ergebnis3 = 13
EndIf
If split3 = "E"
  Ergebnis3 = 14
EndIf
If split3 = "F"
  Ergebnis3 = 15
EndIf
; 4. Stelle
If split4 = "0"
  Ergebnis4 = 0
EndIf
If split4 = "1"
  Ergebnis4 = 1
EndIf
If split4 = "2"
  Ergebnis4 = 2
EndIf
If split4 = "3"
  Ergebnis4 = 3
EndIf
If split4 = "4"
  Ergebnis4 = 4
EndIf
If split4 = "5"
  Ergebnis4 = 5
EndIf
If split4 = "6"
  Ergebnis4 = 6
EndIf
If split4 = "7"
  Ergebnis4 = 7
EndIf
If split4 = "8"
  Ergebnis4 = 8
EndIf
If split4 = "9"
  Ergebnis4 = 9
EndIf
If split4 = "A"
  Ergebnis4 = 10 
EndIf  
If split4 = "B"
  Ergebnis4 = 11
EndIf
If split4 = "C"
  Ergebnis4 = 12
EndIf
If split4 = "D"
  Ergebnis4 = 13
EndIf
If split4 = "E"
  Ergebnis4 = 14
EndIf
If split4 = "F"
  Ergebnis4 = 15
EndIf
ReeleNr1.l = 4096 * Ergebnis1 + 256 * Ergebnis2 + 16 * Ergebnis3 + 1 * Ergebnis4
;}

;{ aufteilen der Lpl mit Versuche zählen 
 ;-aufteilen der Lpl nach Pass und Fail mit Versuche zählen
 
 If Pruefergebnis = "Fail"
  ResetList(LPLFail())
   While NextElement(LPLFail())
   If Seriennummer1 = LPLFail()\Seriennummer
      LPLFail()\Versuche = LPLFail()\Versuche + 1
   EndIf
   Wend   
   AddElement(LPLFail())
      LPLFail()\Seriennummer = Seriennummer1
      LPLFail()\Datum = Tag + "." + Monat+ "." + Jahr 
      LPLFail()\Uhrzeit = Stunde + ":" + Minute + ":" + Sekunde
      LPLFail()\Pruefergebnis = Pruefergebnis
      LPLFail()\Auftragsnummer = Auftragsnummer1
      LPLFail()\Versuche = Versuche
      LPLFail()\Dateiname = DateiName$
      LPLFail()\ReeleNr = ReeleNr1
      LPLFail()\Groesse = Size
      LPLFail()\Zeit = Zeitcode
      
 Else
   ResetList(LPLPass())
   While NextElement(LPLPass())
    If Seriennummer1 =  LPLPass()\Seriennummer
      LPLPass()\Versuche = LPLPass()\Versuche + 1
       If Size > LPLPass()\Groesse
         MessageRequester("Achtung!", "Die Datei '" + DateiName$ + "' enthält die Seriennummer: '" + Seriennummer1 + "'." + Chr(10) + "Die Datei '" + LPLPass()\Dateiname + "' enthält die Seriennummer: '" + LPLPass()\Seriennummer + "'." + Chr(10) + Chr(10) + "Da die Seriennummern übereinstimmen und beide Dateien ein Pass enthalten," + Chr(10)+ "wird die Datei '" + LPLPass()\Dateiname + "' nicht berücksichtigt.")
         DeleteElement(LPLPass(), 1)
         doppeltPass = doppeltPass + 1
       Else
        MessageRequester("Achtung!", "Die Datei '" + Dateiname$ + "' enthält die Seriennummer: '" + Seriennummer1 + "'." + Chr(10) + "Die Datei '" + LPLPass()\Dateiname + "' enthält die Seriennummer: '" + LPLPass()\Seriennummer + "'." + Chr(10) + Chr(10) + "Da die Seriennummern übereinstimmen und beide Dateien ein Pass enthalten," + Chr(10)+ "wird die Datei '" + Dateiname$ + "' nicht berücksichtigt.")
        doppeltPass = doppeltPass + 1 
        Gosub Er
        UseWindow(2)
        TextGadget       (0,  10,  10, 250, 20, "Die Dateien wurden erfolgreich kopiert",#PB_Text_Center)
        ProgressBarGadget(1,  10,  40, 250, 20, 0,DA.l, #PB_ProgressBar_Smooth)
        TextGadget       (2, 300,  10, 250, 20, "Die Dateien werden gelesen",#PB_Text_Center)
        ProgressBarGadget(3, 320,  40, 250, 20, 0,DA.l, #PB_ProgressBar_Smooth)
    EndIf
   EndIf    
  

   Wend
     
   AddElement(LPLPass())
      LPLPass()\Seriennummer = Seriennummer1
      LPLPass()\Datum = Tag + "." + Monat + "." + Jahr 
      LPLPass()\Uhrzeit = Stunde + ":" + Minute + ":" + Sekunde
      LPLPass()\Pruefergebnis = Pruefergebnis
      LPLPass()\Auftragsnummer = Auftragsnummer1
      LPLPass()\Versuche = Versuche
      LPLPass()\Dateiname = Dateiname$
      LPLPass()\reeleNr = ReeleNr1
      LPLPass()\Groesse = Size
      LPLPass()\Zeit = Zeitcode
 EndIf
EndIf
;}

Er:

;{ ins Statusfenster schreiben
Delay(10)
UseWindow(2)
ProgressBarGadget(3, 320,  40, 250, 20, 0,DA, #PB_ProgressBar_Smooth)
SetGadgetState   (3,  DAZ1)
DAZ1 = DAZ1 + 1
If WindowEvent() = #PB_Event_CloseWindow
   If MessageRequester("Auswertung abgebrochen", "Der Benutzer hat die Auswertung vorzeitig abgebrochen.")
   EndIf
   Gosub Fine
EndIf

;}

; gehört alles noch zum auslesen

Ordner:

Until Name = 0

Return

Ende:

;{ LPLFail mit LPLPass vergleichen und LPLFail mit LPLPass gleichsetzen                               Hier geändert

;LPLFail mit LPLPass vergleichen
ResetList(LPLFail())
While NextElement(LPLFail())
    ResetList(LPLPass())
    While NextElement(LPLPass())
        If LPLFail()\Seriennummer = LPLPass()\Seriennummer
           LPLPass()\Versuche = LPLPass()\Versuche + 1
           LPLFail()\dochgut = LPLFail()\dochgut + 1
        EndIf
    Wend
Wend

;LPLFail mit LPLPass gleichsetzen
ResetList(LPLPass())
While NextElement(LPLPass())
    ResetList(LPLFail())
    While NextElement(LPLFail())
        If LPLPass()\Seriennummer = LPLFail()\Seriennummer
           LPLFail()\Versuche = LPLPass()\Versuche
        EndIf
    Wend
Wend

ResetList(LPLFail())
While NextElement(LPLFail()) 
  If LPLFail()\dochgut = 0
    AddElement(LPLFehler())
       LPLFehler()\Seriennummer   = LPLFail()\Seriennummer
       LPLFehler()\Datum          = LPLFail()\Datum
       LPLFehler()\Uhrzeit        = LPLFail()\Uhrzeit
       LPLFehler()\Pruefergebnis  = LPLFail()\Pruefergebnis
       LPLFehler()\Auftragsnummer = LPLFail()\Auftragsnummer
       LPLFehler()\Versuche       = LPLFail()\Versuche
       LPLFehler()\Dateiname      = LPLFail()\Dateiname
       LPLFehler()\reeleNr        = LPLFail()\reeleNr
       LPLFehler()\Groesse        = LPLFail()\Groesse
       LPLFehler()\Zeit           = LPLFail()\Zeit
    DeleteElement(LPLFail())
  EndIf
Wend

ResetList(LPLFehler())
While NextElement(LPLFehler()) 
    AddElement(LPLFehlerfiktiv())
       LPLFehlerfiktiv()\Seriennummer   = LPLFehler()\Seriennummer
       LPLFehlerfiktiv()\Versuche       = LPLFehler()\Versuche
Wend
; Versuche zählen ohne Pass
ResetList(LPLFehler())
While NextElement(LPLFehler())
  ResetList(LPLFehlerfiktiv())
    While NextElement(LPLFehlerFiktiv())
       If LPLFehler()\Seriennummer = LPLFehlerfiktiv()\Seriennummer
         If LPLFehler()\Versuche > LPLFehlerfiktiv()\Versuche
            LPLFehlerfiktiv()\Versuche = LPLFehler()\Versuche
         Else
            LPLFehler()\Versuche = LPLFehlerfiktiv()\Versuche
         EndIf
       EndIf
    Wend
Wend

SortStructuredList(LPLFehler(), 0, OffsetOf(daten\Seriennummer), #PB_Sort_String)
SortStructuredList(LPLFehlerfiktiv(), 0, OffsetOf(daten\Seriennummer), #PB_Sort_String)
ResetList(LPLFehler())
While NextElement(LPLFehler())
  ResetList(LPLFehlerfiktiv())
    While NextElement(LPLFehlerFiktiv())
       If LPLFehler()\Seriennummer = LPLFehlerfiktiv()\Seriennummer
          teste.l = NextElement(LPLFehlerFiktiv())
          ;PreviousElement(LPLFehler())
          If teste = 0
            ;Gosub Schoen
          Else  
            If LPLFehler()\Seriennummer = LPLFehlerfiktiv()\Seriennummer
               DeleteElement(LPLFehlerFiktiv())
               PreviousElement(LPLFehlerfiktiv())
            EndIf
          EndIf
       EndIf
    Wend
Wend
Schoen:                
;}

;Statusfenster schliessen 
  CloseWindow(2) 

;-Einrichten des Fenster mit Sortierfunktion

;{ Sortierfunktionen für das Ausgabefenster

Procedure CreateListIconArrows(StartImage)
  ; generate 2 small 16x16 arrows, up & down
  For img = 0 To 1
    CreateImage(StartImage+img,16,16)
    StartDrawing(ImageOutput())
      background = GetSysColor_(#COLOR_BTNFACE)
      FrontColor(Red(background),Green(background),Blue(background))
      Box(0,0,16,16)
      If img = 0 : start=7 : Else : start = 2 : EndIf
      For a = 6 To 10
        Line(start,a,13-start*2,0,0)
        start+1
      Next a
    StopDrawing()
  Next
EndProcedure

Procedure AddListIconColumn(Gadget,pos,width,align,text$,hImage)
  ; Add column to ListIconGadget
  ;
  ;   gadget = the PB gadget number
  ;   pos    = position of the new column
  ;   width  = with     of the new column
  ;   align  = align    of the text in the column:
  ;            #LI_CENTERED, #LI_LEFT, #LI_RIGHT
  ;   text$  = column header text
  ;   hImage = image handle __OR__ index of already added image!
  ;
  #LVCF_IMAGE = $10
  #LVCFMT_COL_HAS_IMAGES = $8000
  #LI_CENTERED = #LVCFMT_CENTER
  #LI_LEFT     = #LVCFMT_LEFT
  #LI_RIGHT    = #LVCFMT_RIGHT
  Structure LVCOLUMN
    lv.LV_COLUMN
    iImage.l
    iOrder.l
  EndStructure
  If GetObjectType_(hImage)=#OBJ_BITMAP
    ; Add Image to List
    hImgL = SendMessage_(GadgetID(Gadget),#LVM_GETIMAGELIST,#LVSIL_SMALL,0)
    If hImgL=0
      hImgL = ImageList_Create_(16,16,#ILC_COLOR32,1,1)
      SendMessage_(GadgetID(Gadget),#LVM_SETIMAGELIST,#LVSIL_SMALL,hImgL)
    EndIf
    idx = ImageList_Add_(hImgL,hImage,0)
  Else
    ; was an index
    idx = hImage
  EndIf
  LVC.LVCOLUMN
  LVC\lv\mask = #LVCF_IMAGE|#LVCF_TEXT|#LVCF_WIDTH|#LVCF_FMT
  LVC\lv\fmt     = align|#LVCFMT_COL_HAS_IMAGES
  LVC\lv\pszText = @text$
  LVC\lv\cchTextMax = Len(text$)
  LVC\lv\iSubItem = pos
  LVC\lv\cx   = width
  LVC\iImage  = idx
  LVC\iOrder  = pos
  SendMessage_(GadgetID(gadget),#LVM_INSERTCOLUMN,pos,@LVC)
EndProcedure

Procedure GetListIconColumnImage(Gadget,column)
  ; returns the image_index of the column-header-image
  LVC.LVCOLUMN
  LVC\lv\mask = #LVCF_IMAGE
  SendMessage_(GadgetID(Gadget),#LVM_GETCOLUMN,column,@LVC)
  ProcedureReturn LVC\iImage
EndProcedure

Procedure ChangeListIconColumnImage(Gadget,column,Image_Index)
  ; change the image_index of the column-header-image
  LVC.LVCOLUMN
  LVC\lv\mask = #LVCF_IMAGE
  LVC\iImage  = Image_Index
  ProcedureReturn SendMessage_(GadgetID(Gadget),#LVM_SETCOLUMN,column,@LVC)
EndProcedure

Procedure SetListIconColumnText(Gadget,index,text$)
  ; change column header text
  LVC.LV_COLUMN
  LVC\mask    = #LVCF_TEXT
  LVC\pszText = @text$
  SendMessage_(GadgetID(Gadget),#LVM_SETCOLUMN,index,@LVC)
EndProcedure

Procedure SetListIconColumnWidth(Gadget,index,new_width)
  ; change column header width
  SendMessage_(GadgetID(Gadget),#LVM_SETCOLUMNWIDTH,index,new_width)
EndProcedure

Procedure SetListIconColumnFormat(Gadget,index,format)
  ; change text alignment for columns
  LVC.LV_COLUMN
  LVC\mask = #LVCF_FMT
  Select format
    Case 0: LVC\fmt = #LVCFMT_LEFT
    Case 1: LVC\fmt = #LVCFMT_CENTER
    Case 2: LVC\fmt = #LVCFMT_RIGHT
  EndSelect
  SendMessage_(GadgetID(Gadget),#LVM_SETCOLUMN,index,@LVC)
EndProcedure

Procedure UpdatelParam(ListIconGadget,columns)
  ItemCount = SendMessage_(ListIconGadget, #LVM_GETITEMCOUNT, 0, 0)
  lvi.LV_ITEM
  lvi\mask = #LVIF_PARAM
  lvi\iItem = 0
  While ItemCount>0
    lvi\lParam = lvi\iItem
    For SubItem = 0 To columns-1
      lvi\iSubItem = SubItem
      SendMessage_(ListIconGadget, #LVM_SETITEM, 0, @lvi)
    Next SubItem
    lvi\iItem +1
    ItemCount -1
  Wend
EndProcedure

Procedure ListIconSortFunction(lParam1,lParam2,lParamSort)
  A$ = Space(200)
  B$ = Space(200)
  result = 0
  lvi.LV_ITEM
  lvi\iSubItem = lParamSort&$FFFF
  lvi\pszText = @A$
  lvi\cchTextMax = 200
  lvi\mask = #LVIF_TEXT
  SendMessage_(GadgetID(0), #LVM_GETITEMTEXT,lParam1,@lvi)
  lvi\pszText = @B$
  SendMessage_(GadgetID(0), #LVM_GETITEMTEXT,lParam2,@lvi)

  If A$ = B$
    ProcedureReturn 0 ; equal
  EndIf

  x = (lParamSort>>16)&$FFFF
  If x
    If A$ > B$
      ProcedureReturn  1
    Else
      ProcedureReturn -1
    EndIf
  Else
    If A$ > B$
      ProcedureReturn -1
    Else
      ProcedureReturn  1
    EndIf
  EndIf
  ProcedureReturn result
EndProcedure
; Window Callback
Procedure WinProc(hWnd,Msg,wParam,lParam)
  result = #PB_ProcessPureBasicEvents
  Select Msg
    Case #WM_NOTIFY
      *NMHDR.NMHDR = lParam
      If *NMHDR\hWndFrom = GadgetID(0) ; comes from our ListIconGadget
        If *NMHDR\code = #LVN_COLUMNCLICK
          *NMLV.NMLISTVIEW = lParam
          column = *NMLV\iSubItem
          ; switch images:
          index  = GetListIconColumnImage(0,column)
          ChangeListIconColumnImage(0,column,index!1)
          ; sort
          SendMessage_(GadgetID(0),#LVM_SORTITEMS,column|((index)<<16),@ListIconSortFunction())
          UpdatelParam(GadgetID(0),5)
        EndIf
      EndIf
  EndSelect
  ProcedureReturn result
EndProcedure
;program start
CreateListIconArrows(0)
;}

NS:

;{ Ausgabe in Fenster                                                                                  Hier geändert

;Zählen der guten und schlechten LPL
LPLPass   = CountList(LPLPass())  
LPLFail   = CountList(LPLFail())
LPLFehler = CountList(LPLFehler())
Tester    = CountList(LPLFehlerfiktiv())
If OpenWindow(0,57,0,910,709,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget,"Die Stunde der Wahrheit für " + FEL + " mit der Auftragsnummer "+ Auftragsnummer1)
   SetWindowCallback(@WinProc())
   CreateGadgetList(WindowID())
;Liste mit Fail die auf jeden Fall ein Pass haben und direktes Pass
   ListIconGadget    (0,5,50,900,365,"Gute LPL",0,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines|#PB_ListIcon_HeaderDragDrop|#PB_ListIcon_MultiSelect )
    AddListIconColumn(0,1,109,#LI_RIGHT,"Seriennummer",UseImage(0)) ; add Image 0
    AddListIconColumn(0,2,119,#LI_CENTERED, "Datum & Uhrzeit",UseImage(1)) ; add Image 1
    AddListIconColumn(0,3,119,#LI_CENTERED, "Prüfergebnis",1)           ; use Image index 0
    AddListIconColumn(0,4, 89,#LI_CENTERED, "Versuche",1)           ; use Image index 1
    AddListIconColumn(0,5,124,#LI_CENTERED, "Auftragsnummer",1)
    AddListIconColumn(0,6,129,#LI_RIGHT   , "Dateinname",1)
    AddListIconColumn(0,7, 95,#LI_CENTERED, "Dateigröße",1)
    AddListIconColumn(0,8, 95,#LI_CENTERED, "Laufzeit",1)
   If CreateStatusBar(0, WindowID(0))
      AddStatusBarField(150)
      AddStatusBarField(160)
      AddStatusBarField(150)
      AddStatusBarField(120)
      AddStatusBarField(265)
      AddStatusBarField(175)
      StatusBarText(0,0, "Laufzeit gesamt: " + StrF(Zeiten / 3600, 2) + " h", #PB_StatusBar_Center )
      StatusBarText(0,1, "mittlere Laufzeit: " + StrF(Zeiten / (LPLPass + LPLFail + LPLFehler), 2)+ " sek", #PB_StatusBar_Center)
      StatusBarText(0,2, "Dateien gesamt: " + Str(LPLPass + LPLFail + LPLFehler), #PB_StatusBar_Center )
      StatusBarText(0,3, "Ausfall: " + StrF( 100 / (LPLPass + LPLFail) * LPLFail, 2) + " %", #PB_StatusBar_Center)
      StatusBarText(0,4, "Mehrfaches Pass für die gleiche Seriennummer: " + Str(doppeltPass), #PB_StatusBar_Center)
      StatusBarText(0,5, "")
   EndIf
;Buttons und Texte
   TextGadget       (2,  20,  20, 120, 20, "Anzahl der LPL mit Pass:")
   TextGadget       (3, 365,  20, 350, 20, "Anzahl der mehrfachen Versuche die mit einem Pass geendet haben:")
   TextGadget       (4,  20, 505, 180, 20, "Anzahl der LPL ohne Pass:")
   ButtonGadget     (5,  20, 427, 100, 30, "Speichern")
   If s = 1 
      DisableGadget(5, 1)
   EndIf
   ButtonGadget     (6, 130, 427, 200, 30, "Fehlende Seriennummer berechnen")
   ButtonGadget     (7, 340, 427, 100, 30, "Beenden")
   If LPLFehler > 0
      TextGadget       (8, 320, 485, 580, 80, "Die Seriennummer(n) in der unteren Liste wurden zwar geprüft haben aber keine Datei mit Pass. Wenn die LPL noch repariert bzw. verschrottet wird ist es kein Problem. Auf keinen Fall darf die LPL in einer Kiste sein die zu e+h geschickt wird, in diesem Fall viel Spaß beim suchen.")
   Else 
      TextGadget       (8, 320, 490, 580, 80, "Die grüne Zahl muss mit der Stückzahl des Auftrags übereinstimmen, dann ist alles in Ordnung, der Auftrag wurde vollständig geprüft. Wenn die Zahlen nicht übereinstimmen, wurde eine oder mehrere LPL nicht geprüft. Diese gilt es dann zu finden.")
   EndIf
   GadgetToolTip    (0, "Dies ist eine Auflistung von allen Dateien mit FAIL und PASS")
   GadgetToolTip    (5, "Speichert die wichtigen Daten unter D:\Archiv\" + FEL + "\" + Auftragsnummer1)
   GadgetToolTip    (6, "Berechnet die fehlende(n) Seriennummer(n).")
   GadgetToolTip    (7, "Beendet die Anwendung.")
;Liste nur mit Fail ohne Pass
; If LPLFehler > 0
   ListIconGadget    (1,5,540,900,150,"Schlechte LPL",0,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines|#PB_ListIcon_HeaderDragDrop|#PB_ListIcon_MultiSelect)
    AddListIconColumn(1,1,109,#LI_RIGHT,"Seriennummer",UseImage(1)) ; add Image 0
    AddListIconColumn(1,2,119,#LI_CENTERED, "Datum & Uhrzeit",UseImage(1)) ; add Image 1
    AddListIconColumn(1,3,119,#LI_CENTERED, "Prüfergebnis",1)
    AddListIconColumn(1,4, 89,#LI_CENTERED, "Versuche",1)           ; use Image index 1
    AddListIconColumn(1,5,124,#LI_CENTERED, "Auftragsnummer",1)
    AddListIconColumn(1,6,129,#LI_RIGHT   , "Dateinname",1)
    AddlistIconColumn(1,7, 95,#LI_CENTERED, "Dateigröße",1)
    Addlisticoncolumn(1,8, 95,#LI_CENTERED, "Laufzeit",1)
    GadgetToolTip    (1, "Für diese Leiterplatten gibt es keine Datei mit Pass.") 
; EndIf   
EndIf


;-Ausgabe der einzelnen Lpl-Datensätze
SortStructuredList(LPLFail(), 0, OffsetOf(daten\Seriennummer), #PB_Sort_String)
ResetList(LPLFail())
 While NextElement(LPLFail())
   AddGadgetItem (0,0, Chr(10) + LPLFail()\Seriennummer + Chr(10) + LPLFail()\Datum + "   " + LPLFail()\Uhrzeit + Chr(10) + LPLFail()\Pruefergebnis + Chr(10) + RSet(Str(LPLFail()\Versuche),2) + Chr (10) + LPLFail()\Auftragsnummer + Chr(10) + LPLFail()\Dateiname + Chr(10) + RSet(StrF(LPLFail()\Groesse, 2), 5) + " kb" + Chr(10) + RSet(Str(LPLFail()\Zeit), 2) + " sek")
 Wend
SortStructuredList(LPLPass(), 0, OffsetOf(daten\Seriennummer), #PB_Sort_String)
ResetList(LPLPass())
 While NextElement(LPLPass())
   AddGadgetItem (0,0, Chr(10) + LPLPass()\Seriennummer + Chr(10) + LPLPass()\Datum + "   " + LPLPass()\Uhrzeit + Chr(10) + LPLPass()\Pruefergebnis + Chr(10) + RSet(Str(LPLPass()\Versuche),2) + Chr (10) + LPLPass()\Auftragsnummer + Chr(10) + LPLPass()\Dateiname + Chr(10) + RSet(StrF(LPLPass()\Groesse, 2), 5) + " kb" + Chr(10) + RSet(Str(LPLPass()\Zeit), 2) + " sek")
 Wend
SortStructuredList(LPLFehler(), 0, OffsetOf(daten\Seriennummer), #PB_Sort_String)
ResetList(LPLFehler()) 
 While NextElement(LPLFehler())
   AddGadgetItem (1,0, Chr(10) + LPLFehler()\Seriennummer + Chr(10) + LPLFehler()\Datum + "   " + LPLFehler()\Uhrzeit + Chr(10) + LPLFehler()\Pruefergebnis + Chr(10) + RSet(Str(LPLFehler()\Versuche),2) + Chr (10) + LPLFehler()\Auftragsnummer + Chr(10) + LPLFehler()\Dateiname + Chr(10) + RSet(StrF(LPLFehler()\Groesse, 2), 5) + " kb" + Chr(10) + RSet(Str(LPLFehler()\Zeit),2) + " sek")
 Wend


Repeat
;-Zeichnen der guten und schlechten Anzahl
 LoadFont (1, "Arial", 35, #PB_Font_Bold)
 LoadFont (2, "Arial", 30, #PB_Font_Bold|#PB_Font_Italic)
 
If StartDrawing(WindowOutput()) 
   FrontColor(0,255,0)
   DrawingMode(1)                          
   DrawingFont(UseFont(1))                 
   Locate(155, 0)                         
   DrawText(Str(LPLPass))  
   FrontColor(255,180,0)
   Locate(705, 0)                        
   DrawText(Str(LPLFail))  
  If LPLFehler > 0   
     FrontColor(255,0,0)
     Locate(175, 485)
     DrawText(Str(tester + LPLFehler1))
  Else
     FrontColor(0,255,0)
     Locate(175, 485)
     DrawText("keine")
  EndIf    
   DrawingFont(UseFont(2))
   FrontColor(30, 28, 225)
   Locate(560, 420)
   DrawText("by D. Schätzle")
   StopDrawing()                            
EndIf 

 EventID = WaitWindowEvent() 
   Select EventID
     Case #PB_Event_Gadget 
       Select EventGadgetID() 
          Case 5 : Gosub Speichern 
          Case 6 : Gosub Berechnen
          Case 7 : Gosub Fine
       EndSelect 
    EndSelect

Until EventID = #PB_Event_CloseWindow

If EventID = #PB_Event_CloseWindow
  Gosub Fine
EndIf
;}

;{ Speichern
;-Speichern
Speichern:
;CloseWindow(0)
ResetList(LPLPass())
ResetList(LPLFail())

If CreateDirectory("D:\Archiv")
EndIf
If CreateDirectory("D:\Archiv\" + FEL)
EndIf
   
   If CreateFile(5, "D:\Archiv\" + FEL + "\"+ Auftragsnummer1 + ".txt")
   WriteStringN("LPL: " + FEL + "   " + "Auftragsnummer: " + Auftragsnummer1) 
   WriteStringN("")
   WriteStringN("")
   WriteStringN("LPL mit Pass: " + Str(LPLPass) + " Stück.")
   WriteStringN("")
   WriteStringN("Seriennummer" + Chr(9) + "Datum        " + Chr(9) + "Uhrzeit   " + Chr(9) + "Prüfergebnis" + Chr(9) + "Auftragsnummer")
   WriteStringN("") 
    While NextElement(LPLPass()) 
      WriteStringN(LPLPass()\Seriennummer + Chr(9) + LPLPass()\Datum + Chr(9) + LPLPass()\Uhrzeit + "    " + Chr(9) + LPLPass()\Pruefergebnis + "       " + Chr(9) + LPLPass()\Auftragsnummer)
    Wend
   WriteStringN("")
   WriteStringN("")
   WriteStringN("")
   WriteStringN("")
   WriteStringN("LPL mit Fail: " + Str(LPLFail) + " Stück.")
   WriteStringN("")
   WriteStringN("Seriennummer" + Chr(9) + "Datum        " + Chr(9) + "Uhrzeit   " + Chr(9) + "Prüfergebnis" + Chr(9) + "Auftragsnummer")
    While NextElement(LPLFail()) 
      WriteStringN(LPLFail()\Seriennummer + Chr(9) + LPLFail()\Datum + Chr(9) + LPLFail()\Uhrzeit + "    " + Chr(9) + LPLFail()\Pruefergebnis + "       " + Chr(9) + LPLFail()\Auftragsnummer)
    Wend    
   
   MessageRequester("Speichern", "Datei gespeichert unter D:\Archiv\" + Fel + "\"+ Auftragsnummer1)
  Else
    MessageRequester("Fehlermeldung:", "Konnte Datei nicht erstellen.")
  EndIf
 CloseFile(5)
 
 S = 1
Goto NS
;}

;{ Berechnen                                                                                          Hier geändert
CloseWindow(0)
Berechnen:
If vorbei.l = 1
   MessageRequester("Schon passiert.", "Die fehlenden Seriennummern stehen in der unteren Liste.")
   Gosub NS
Else   
 If OpenWindow(1, 250,250,200,200,#PB_Window_SystemMenu,"Wieviel?") And CreateGadgetList(WindowID(1))
    TextGadget  (0, 10,  10, 180, 50,"Bitte unten die Auftragsstückzahl eingeben, danach auf 'Weiter' klicken.")
    StringGadget(1, 70,  80,  60, 20, Str(LPLPass + 1) ,#PB_String_Numeric)
    ButtonGadget(2, 55, 155,  90, 30, "Weiter")
    ButtonGadget(3, 55, 125,  90, 30, "Abbrechen")
 EndIf

 Eingabe = GetGadgetText(1)

 Repeat
 EventID = WaitWindowEvent() 
 Select EventID
   Case #PB_Event_Gadget 
     Select EventGadgetID() 
       Case 2 : Gosub wei
       Case 3 : Gosub aus
     EndSelect 
 EndSelect

 Until EventID = #PB_Event_CloseWindow

 If EventID = #PB_Event_CloseWindow
    CloseWindow(1)
    Gosub NS
 EndIf

 aus :
 CloseWindow(1)
 MessageRequester("Abgebrochen", "Der Vorgang wurde durch den Benutzer abgebrochen.")
 Gosub NS
 
 wei:

 Eingabe = GetGadgetText(1)

 CloseWindow(1)

 ASZ = Val(Eingabe)

 If Val(Eingabe) = LPLPass
    MessageRequester(Eingabe + " ? Haha?", "So geht das nicht." + Chr(10) + Chr(10) + "Deine Eingabe war gleich der Anzahl der LPL mit Pass." + Chr(10) + Chr(10) + "So kann keine Seriennummer berechnet werden, Eingabe evtl. nochmal überdenken.")
    Gosub NS
 EndIf

 If Val(Eingabe) < LPLPass
    MessageRequester(Eingabe + " ? Haha?", "So geht das nicht." + Chr(10) + Chr(10) + "Deine Eingabe war kleiner als die Anzahl der LPL mit Pass."+ Chr(10) + Chr(10) + "So kann keine Seriennummer berechnet werden, Eingabe evtl. nochmal überdenken.")
    Gosub NS
 EndIf  

 CloseWindow(1)

 FirstElement(LPLPass())
 FirstElement(LPLPass())
 If Endung1 = Mid(LPLPass()\Seriennummer, 9,3)
 Else
    NextElement(LPLPass())
 EndIf

 start = LPLPass()\ReeleNr - 1
 For eintrag = 1 To ASZ
     AddElement(fiktiv())
     fiktiv()\ReeleNr = start + eintrag
 
 Next

 ResetList(LPLPass()) 
  While NextElement(LPLPass())
    If Endung1 = Mid(LPLPass()\Seriennummer, 9,3)
       ResetList(fiktiv())
       While NextElement(fiktiv())
         If LPLPass()\ReeleNr = fiktiv()\ReeleNr
            DeleteElement(fiktiv())
         EndIf
       Wend
    Else
       NextElement(LPLPass())
          If Endung1 = Mid(LPLPass()\Seriennummer, 9,3)
             ResetList(fiktiv())
             While NextElement(fiktiv())
               If LPLPass()\ReeleNr = fiktiv()\ReeleNr
                  DeleteElement(fiktiv())
               EndIf
             Wend
          EndIf
    EndIf         
  Wend

 ResetList(fiktiv())
 LastElement(LPLPass())
 While NextElement(fiktiv())
   If fiktiv()\ReeleNr >= LPLPass()\ReeleNr 
      r3l = fiktiv()\ReeleNr
      r3e = fiktiv()\ReeleNr - Val(Eingabe)
      r3l1 = RSet(Hex(r3l),4,"0")
      r3e1 = RSet(Hex(r3e),4,"0")
      fehlendeSNRl = r1 + r3l1 + r2
      fehlendeSNRe = r1 + r3e1 + r2
      AddElement(LPLFehler())
         LPLFehler()\Seriennummer = fehlendeSNRl
         LPLFehler()\Auftragsnummer = "Achtung! Letzte Seriennummer."
         AddElement(LPLFehler())
         LPLFehler()\Seriennummer = fehlendeSNRe
         LPLFehler()\Auftragsnummer = "Achtung! Erste Seriennummer."
   Else
      r3  = fiktiv()\ReeleNr
      r31 = RSet(Hex(r3),4,"0")
      fehlendeSNR = r1 + r31 + r2  
          AddElement(LPLFehler())
            LPLFehler()\Seriennummer = fehlendeSNR
            LPLFehler()\Auftragsnummer = "Errechnete Seriennummer."   
   EndIf
 Wend
 vorbei = 1 
 ClearList(fiktiv())
 While NextElement(LPLFehler())
   AddGadgetItem (1,0, Chr(10) + LPLFehler()\Seriennummer + Chr(10) + LPLFehler()\Datum + "   " + LPLFehler()\Uhrzeit + Chr(10) + LPLFehler()\Pruefergebnis + Chr(10) + RSet(Str(LPLFehler()\Versuche),2) + Chr (10) + LPLFehler()\Auftragsnummer + Chr(10) + LPLFehler()\Dateiname + Chr(10) + RSet(StrF(LPLFehler()\Groesse, 2), 5) + " kb" + Chr(10) + RSet(Str(LPLFehler()\Zeit),2) + " sek")
 Wend
 MessageRequester("Erledigt", "Die errechneten Seriennumern sind in die untere Liste eingefügt worden.")
 ClearList(fiktiv())
 vorbei = 1
 Gosub NS 

EndIf

;}

Fine:
End
; IDE Options = PureBasic v3.94 (Windows - x86)
; CursorPosition = 1362
; FirstLine = 203
; Folding = AAAAAA9
; UseIcon = msgcomposeWindow.ico
; Executable = Auswertung für e+h1.exe
_______________
bobobo hat gecodetagt :wink:
Zuletzt geändert von dietmar am 17.12.2005 19:17, insgesamt 1-mal geändert.
Wir leben alle unter dem gleichen Sternenhimmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Schonmal ein Tip: Im Forum kann man den BBCode verwenden.
Dazu verwendet man [code] + dein Quelltext + [/code].
Dadurch wird das ganze als Code dargestellt.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Antworten