Entwickler-Ecke
Dateizugriff - Textdatei importieren, zerlegen und Inhalte summieren?
Tommy182 - Fr 27.05.11 15:13
Titel: Textdatei importieren, zerlegen und Inhalte summieren?
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
Narses: Titel geändert, "help!" entfernt - Hilfe braucht jeder. ;)
jaenicke - Fr 27.05.11 15:18
Hallo und :welcome:
Tommy182 hat folgendes geschrieben : |
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.
Tommy182 hat folgendes geschrieben : |
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 - 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 - Fr 27.05.11 15:34
Moderiert von
Narses: Komplett-Zitat des letzten Beitrags entfernt.
Nein leider, die Datenquelle muss leider diese Textdatei sein...
---
Moderiert von
Narses: Beiträge zusammengefasst---
jaenicke hat folgendes geschrieben : |
Hallo und :welcome: |
Danke erstmal für die nette Begrüßung ;D
jaenicke hat folgendes geschrieben : |
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:
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? ^^
jaenicke hat folgendes geschrieben : |
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
Narses: Delphi-Tags hinzugefügt
Narses - 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 [
http://www.entwickler-ecke.de/richtlinien.html]:
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

oder

klicken und den Titel ändern. Danke Dir!
cu
Narses
JDKDelphi - Fr 27.05.11 16:25
Hallo,
das geht eigentlich ganz einfach:
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 s1 := copy(meinedaten.strings[saetze],1,1) s2 := copy(meinedaten.strings[saetze],2,10) s3 := copy(meinedaten.strings[saetze],12,4)
END; MeineDaten.free; END; |
so in etwa geht das dann
Sortier und Verabeitungsalgorythmen must Du dir selbst ausdenken
Gruss
Tommy182 - Fr 27.05.11 16:27
Narses hat folgendes geschrieben : |
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
Narses: Zitat gekürzt.
thepaine91 - 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 - 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 - Mo 06.06.11 15:20
Zitat: |
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 - Mo 06.06.11 15:37
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 [
http://www.delphibasics.co.uk/RTL.asp?Name=Eof].
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!