Autor Beitrag
Tommy182
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 27.05.11 15:13 
Hallo Leute!

Hier meine Fragen: Ich muss ein kleines Programm schreiben, welches die Summierung der Arbeitszeit von Arbeitern ermöglicht.
Mit Hilfe von zwei TDateTimePicker kann der jeweilige Zeitraum eingegrenzt werden.
Ich habe eine Textdatei erhalten, in welcher die benötigten Datensätze (ca. 300) enthalten sind. Diese Datensätze sind folgendermaßen aufgebaut:
z. B. 101.03.20086 Die erste Stelle steht für die Mitarbeiternummer (1), die darauffolgenden Stellen bilden das Datum (01.03.2008) und die letzte Stelle die Anzahl der Arbeitsstunden.
Durch einen Klick auf einen Button sollen nun diese Daten eingelesen werden, und je nach der ausgewählten Zeitspanne der TDateTimePicker sollen die Stunden nach Mitarbeitern summiert werden (Beispiel: Mitarbeiter 1: 70 Stunden).

Ich habe bereits das Layout hergestellt und verwende als Ausgabemedium ein MEMO-Feld.

Nun zu meinem Problem: Ich lade die Textdatei über den Befehl "Assignfile" in mein Programm. Mithilfe von Read gebe ich dann die Datensätze in meinem Programm aus. Zum zerlegen der Datensätze verwende ich Copy. Allerdings wird mir immer nur 1 Zeile der Textdatei reingeladen. Wie schaffe ich es, dass mir alle Zeilen reingeladen werden?

Weiters habe ich keine Idee, wie ich die Arbeitsstunden je Mitarbeiter summieren soll. Habt ihr eine Idee, wie man das am besten lösen kann?

Beim Filtern des Zeitraums habe ich bisher keine Probleme.

LG Tom

Moderiert von user profile iconNarses: Titel geändert, "help!" entfernt - Hilfe braucht jeder. ;)


Zuletzt bearbeitet von Tommy182 am Fr 27.05.11 16:28, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 27.05.11 15:18 
Hallo und :welcome:

user profile iconTommy182 hat folgendes geschrieben Zum zitierten Posting springen:
Nun zu meinem Problem: Ich lade die Textdatei über den Befehl "Assignfile" in mein Programm. Mithilfe von Read gebe ich dann die Datensätze in meinem Programm aus. Zum zerlegen der Datensätze verwende ich Copy. Allerdings wird mir immer nur 1 Zeile der Textdatei reingeladen. Wie schaffe ich es, dass mir alle Zeilen reingeladen werden?
Wie wäre es mit einer schleife bis das Dateiende erreicht ist und zeilenweisem Auslesen mit ReadLn?
Oder du nimmst einfach eine TStringList.

user profile iconTommy182 hat folgendes geschrieben Zum zitierten Posting springen:
Weiters habe ich keine Idee, wie ich die Arbeitsstunden je Mitarbeiter summieren soll. Habt ihr eine Idee, wie man das am besten lösen kann?
Lies das ganze in eine eigene Liste ein, dann kannst du dort direkt mit den Daten arbeiten. ;-)
thepaine91
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: Fr 27.05.11 15:25 
Zitat:
Zum zerlegen der Datensätze verwende ich Copy.


Gibt es da keine andere Möglichkeit, bzw. wo kommen die Daten her?
Finde die Datenbasis i-wie unvorteilhaft....
Tommy182 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 27.05.11 15:34 
Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Nein leider, die Datenquelle muss leider diese Textdatei sein...

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Hallo und :welcome:


Danke erstmal für die nette Begrüßung ;D

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:

Wie wäre es mit einer schleife bis das Dateiende erreicht ist und zeilenweisem Auslesen mit ReadLn?
Oder du nimmst einfach eine TStringList.


Also, ich habe das jetzt mit einer Schleife gelöst:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.ErgebnisBtnClick(Sender: TObject);
var
i : integer;
begin

AssignFile (F, 'C:\Users\Thomas\Desktop\Arbeitsstunden.txt');
Reset (F);

for i := 0 to 678 do
begin
      ReadLn (F, s);
      AusgabeMemo.Lines.add (copy (s,1,1))
end;
Dadurch wird mir jetzt logischerweise von jedem Eintrag die Erste Stelle (Sprich: Mitarbeiternummer) ausgegeben.
Jetzt wäre vermutlich ein Array Vorteilhaft, um die richtigen Daten miteinander zu addieren, oder? ^^

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Lies das ganze in eine eigene Liste ein, dann kannst du dort direkt mit den Daten arbeiten. ;-)

Meinst du mit "das ganze" jeden einzelnen Teil (sprich 1 Liste für Mitarbeiter, 1 Liste für Datum, 1 Liste für Stunden)?

LG
Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 27.05.11 16:17 
Moin!

Bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Richtlinien:
1.2 Beiträge:
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...]
Einfach oben bei Deinem ersten Beitrag auf user defined image oder user defined image klicken und den Titel ändern. Danke Dir!

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
JDKDelphi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 115
Erhaltene Danke: 22

WIN2000, XP, WIN 7 , UNIX, LINUX
Assembler für (Z8x, 68xxx,R6000,Intel), DELPHI 6 Enterprise, MAGIC eDeveloper V9+V10, C++, C#,VB, .NET, zertifizierter iBOLT-Programmierer
BeitragVerfasst: Fr 27.05.11 16:25 
Hallo,

das geht eigentlich ganz einfach:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
  ....
  VAR MeineDaten : TSTRINGS;
      Saetze : INTEGER;
      s1,s2,s3 : STRING;
  BEGIN

     Meinedaten := TSTRINGLIST.Create;
     MeineDaten.Loadfromfile('C:\eindateiname.txt');

     FOR Saetze := 0 to meinedaten.count-1 DO
     BEGIN
        // verarbeitungsmethoden ...
        s1 := copy(meinedaten.strings[saetze],1,1// Nr
        s2 := copy(meinedaten.strings[saetze],2,10// Datum
        s3 := copy(meinedaten.strings[saetze],12,4// Zeit

        // ab hier in ein Array schreiben für jeden Mitarbeiter usw..


     END;
     MeineDaten.free;
  END;


so in etwa geht das dann
Sortier und Verabeitungsalgorythmen must Du dir selbst ausdenken

Gruss

_________________
Wo andere aufhören, fange ich erst an..
Tommy182 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 27.05.11 16:27 
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät.

Oh Sorry, ist schon so gut wie geändert ;D

Moderiert von user profile iconNarses: Zitat gekürzt.
thepaine91
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: Fr 27.05.11 16:34 
Wenn du die Daten dann trennst wäre es noch Sinnvoll die Daten auch als später benötigten Datentyp zu speichern.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 27.05.11 16:38 
Richtig, da du mit den Daten arbeiten musst, solltest du dir eine Datenstruktur (Klasse oder Record) überlegen, in die du die Daten stecken kannst. Die packst du dann in eine Liste und kannst darüber extrem schnelle Auswertungen fahren.
Jakane
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Mo 06.06.11 15:20 
Zitat:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.ErgebnisBtnClick(Sender: TObject);
var
i : integer;
begin

AssignFile (F, 'C:\Users\Thomas\Desktop\Arbeitsstunden.txt');
Reset (F);

for i := 0 to 678 do
begin
      ReadLn (F, s);
      AusgabeMemo.Lines.add (copy (s,1,1))
end;



Fix vorgeben wo das Ende ist kann schon sehr zu Probleme führen

1. Möglichkeit: Deine Textdatei hat eine Zeile pro Datensatz
- Nimmst eine einfache ListBox
- ListBox1.LoadFromFile('C:\Meine_Textdatei.txt');

2. Möglichkeit: Deine Textdatei ist fortlaufen mit Trennzeichen (was auch ein Leerzeichen sein kann)
- Nimmst eine einfache ListBox
- Trennst mit Copy die Datensätze auf und steckst die mit ListBox1.Items.Add(Copy(...)); in die Liste

Dann kannst du mit
- For i:= 0 to ListBox.Items.Count - 1
durch die ganze Liste marschieren und die Daten verarbeiten.
Zum zusammenrechnen der Zahlen StrToInt() um die Zahlen die noch String sind in Integer umzuwandeln

Ich hoffe damit konnte ich helfen
thepaine91
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: Mo 06.06.11 15:37 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.ErgebnisBtnClick(Sender: TObject);
var
i : integer;
begin

AssignFile (F, 'C:\Users\Thomas\Desktop\Arbeitsstunden.txt');
Reset (F);

for i := 0 to 678 do
begin
      ReadLn (F, s);
      AusgabeMemo.Lines.add (copy (s,1,1))
end;

Ich wäre für EOF.