Das OFFIZIELLE PROFAN SUPPORT FORUM
Einsteigerfragen
PROFAN-Programmierung
Helfer & Tools
Anregungen & Vorschläge
PROFAN-NEWS
Die Regeln!
2 - PROFAN-Programmierung

 Neues Thema  |  Zur Übersicht  |  Suchen  |  Einloggen   Neuerer Beitrag  |  Älteres Thema 
 vergleichen
Autor: Steven Scheidler (---.dyn.telefonica.de)
Datum:   28.10.18 17:16

Hallo ich bin dabei ein Zeiterfassungsprogramm zu schreiben
und würde gerne die in einer Datei gespeicherten Daten vergleichen und zusammenfassen!

Komme nicht weiter!

Bsp. in der Datei steht Wert1=Datum Wert2=Stunden für csv Format gepeichert!


05.10.2018;3
05.10.2018;1.5
06.10.2018;2
06.10.2018;4
06.10.2018;1
07.10.2018;2
07.10.2010;6

nun würde ich die Werte gerne zusammenfassen wollen

05.10.2018;4.5
06.10.2018;7
07.10.2018;8

und als Datei "stundenzettel_10_2018.csv speichern


Vielen Dank für Eure Hilfe! Ist bestimmt total einfach aber (bin Anfänger) :-)



Beitrag beantworten
 
 Re: vergleichen
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   29.10.18 17:39

Welche Profan-Version benutzt du denn ?
Mit der neuen Version X4 kann man so manche
Sachen vereinfachen (evtl. MoveListProc).


Andernfalls, bis X3, muß man da halt anders rangehen.

Stehen die Datums geordnet und hintereinander in der Csv-Datei
oder sind die nur so zusammen gewürfelt ?

H.Brill
XProfan X4 + FreeProfan

Nachricht bearbeitet (29.10.18 17:43)

Beitrag beantworten
 
 Re: vergleichen
Autor: Michael Wodrich (---.customer.vsm.sh)
Datum:   31.10.18 04:22

Nicht ganz so einfach, wenn man die Version nicht kennt.

Ich nutze "$", Verknüpfungsoperator seit X3.1, sonst nimmt man "+"
Damit hatte ich allerdings Probleme beim Zahlen verknüpfen.

CToD$() und DToC$() ergaben bei mir falsche Werte (vX4.0a-32)
Hab' schnell eigene gebaut, denn, mit der Jahreszahl vorne lassen sich die Daten einfach sortieren (LISTE,1 -- ist eine sortierte Liste)

 /*
 Mit CToD$() das Datum in eine sortierbare Form bringen
 Rest dran lassen
 in eine sortierte Listbox speichern
 mit Substr in links und rechts aufspalten
 solange links gleich , das rechte aufaddieren
 */
 
 
 // die Originale ergaben bei mir Fehler
 // das kann allerdings auch an der Verknüpfung mit "+" gelegen haben
 Proc _CToD$   
    Parameters a$
    Declare b$
    b$ = Mid$(a$,7,4) $ Mid$(a$,4,2) $ Mid$(a$,1,2)
    Return b$  // "TT.MM.JJJJ" -> "JJJJMMTT"
 EndProc
 
 Proc _DToC$
    Parameters a$
    Declare b$
    b$ = Mid$(a$,7,2) $ "." $ Mid$(a$,5,2) $ "." $ Mid$(a$,1,4)
    Return b$  // "JJJJMMTT" -> "TT.MM.JJJJ"
 EndProc
 
 
 Declare EingabeListe&, AusgabeListe&, Dateizeile$, vor$,s$,t$, Summe!, rest%
 
 EingabeListe& = Create("List",1)
 AusgabeListe& = Create("List",1)
 
 
 Proc Test
   Assign #1, "C:\\Temp\\Datei1.CSV"
   Rewrite #1
   Print #1, "04.10.2018;5"
   Print #1, "05.10.2018;3"
   Print #1, "05.10.2018;1.5"
   Print #1, "06.10.2018;2"
   Print #1, "06.10.2018;4"
   Print #1, "06.10.2018;1"
   Print #1, "07.10.2018;2"
   Print #1, "07.10.2018;6"
   Close #1
 EndProc
 Test
 
 
 Assign #1, "C:\\Temp\\Datei1.CSV"
 Reset #1
 While Not(EOF(#1))
    Input #1,Dateizeile$
 
 // wenn es nur ein Semikolon in der Zeile gibt...
    s$ = SubStr$(Dateizeile$, 1, ";")
    t$ = SubStr$(Dateizeile$, 2, ";")
    AddString(EingabeListe&, _CToD$(s$) $ ";" $ t$)  // z.B.: 20181005;3
    
    // sonst...
    's$ = _CToD$(Left$(Dateizeile$,10)) + Mid$(Dateizeile$,11,Len(Dateizeile$))
    'AddString(EingabeListe&, s$)  // z.B.: 20181005;3
 
 EndWhile
 Close #1
 
 
 Clear Summe!, vor$
 
 // hier gehe ich auch von nur 2 Werten in der CSV-Zeile aus...
 WhileLoop 0, GetCount(EingabeListe&) - 1
    Dateizeile$ = GetString$(EingabeListe&, &Loop)
    s$ = SubStr$(Dateizeile$, 1, ";")
    t$ = SubStr$(Dateizeile$, 2, ";")
    
    If &Loop = 0  // Sonderfall ohne Vorgänger
       Summe! = Val( Trim$(t$) )
       inc rest%
    Else
       If s$ = vor$
          Summe! = Summe! + Val( t$ )
          inc rest%
       Else
          AddString(AusgabeListe&, _DToC$(vor$) $ ";" $ Str$(Summe!))
          Clear rest%, Summe!
          Summe! = Summe! + Val( t$ )
          inc rest%
       EndIf
    EndIf
    vor$ = s$
 EndWhile
 Case rest% : AddString(AusgabeListe&, _DToC$(vor$) $ ";" $ Str$(Summe!))
 
 
 Assign #1, "C:\\Temp\\Datei2.CSV"
 Rewrite #1
 WhileLoop 0, GetCount(AusgabeListe&) - 1
    Print #1,GetString$(AusgabeListe&, &Loop)
 EndWhile
 Close #1
 
 'ShellExec("C:\\Temp\\Datei2.CSV","open",1)
 Shell "Notepad C:\\Temp\\Datei2.CSV"
 waitinput
 End
 


--
Programmieren, das spannendste Detektivspiel der Welt.
Programmierumgebung: | XProfan (neueste) | Win (neueste)


Beitrag beantworten
 
 Re: vergleichen
Autor: Steven Scheidler (---.dyn.telefonica.de)
Datum:   06.11.18 17:15

Sorry war ein paar Tage auf Montage

ich benutze X2

Beitrag beantworten
 
 Re: vergleichen
Autor: Steven Scheidler (---.dyn.telefonica.de)
Datum:   06.11.18 17:31

Vielen Dank Michael,
genau das habe ich gesucht PERFEKT!!!!!

habe "$" nur durch "+" ersetzt wegen X2 wie du geschrieben hast

Beitrag beantworten
 Foren-Liste  |  Baumstruktur   Neuerer Beitrag  |  Älteres Thema 


 Foren-Liste  |  Zur Registrierung 
 Benutzerlogin
 Benutzername:
 Passwort:
 Login-Daten speichern:
   
 Passwort vergessen?
E-Mail-Adresse oder Username unten eingeben. Dann wird Dir per e-Mail ein neues Passwort zugeschickt.

phorum.org