Autor Beitrag
Nisarö
Hält's aus hier
Beiträge: 8

Win XP
Delphi 6.0 PE
BeitragVerfasst: Mo 28.05.07 16:28 
Hallo Leute,

Ich hab vor ein Programm zu schreiben, in dem ich meine Radelergebnisse (bin Freizeitradler) eingeben und dann später mal alle Touren wieder aufrufen kann. Dazu soll von allen eingegebenen Werten die Jahresleistung errechnet werden. Also Gesamtkilometer, Gesamtzeit, Durchschnitt und Jahreshöchstgeschwindigkeit.

Soll in etwa so aussehen (Hauptfenster):

user defined image

Fenster wenn man auf "Hinzufügen >>" klickt:

user defined image

Dabei tritt jetzt aber ein Problem auf. Nämlich dass ich die Werte irgendwie in eine Datei speichern muss. Das hab ich versucht (Google war recht ergiebig), aber die Textdatei, in welcher die Werte standen hat sich nicht gescheit auslesen lassen.

Deshalb will ich jetzt die Werte in ein Array speichern.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
SpeicherMenge:=((ComboBox1.Items.Count-1)+1)*8;
//Array-Speicherteil 1 = Tageskilometer
//Array-Speicherteil 2 = Zeit in Stunden
//Array-Speicherteil 3 = Zeit in Sekunden
//Array-Speicherteil 4 = Zeit in Sekunden
//Array-Speicherteil 5 = Hoechstgeschwindigkeit
//Array-Speicherteil 6 = Durchschnittsgeschwindigkeit
//Array-Speicherteil 7 = Datum
//Array-Speicherteil 8 = Routenbeschreibung

SetLength(Speicher,SpeicherMenge);
Speicher[(0+((ComboBox1.Items.Count-1)*8))]:=edit1.text;
Speicher[(1+((ComboBox1.Items.Count-1)*8))]:=edit2.text;
Speicher[(2+((ComboBox1.Items.Count-1)*8))]:=edit3.text;
Speicher[(3+((ComboBox1.Items.Count-1)*8))]:=edit4.text;
Speicher[(4+((ComboBox1.Items.Count-1)*8))]:=edit5.text;
Speicher[(5+((ComboBox1.Items.Count-1)*8))]:=edit6.text;
Speicher[(6+((ComboBox1.Items.Count-1)*8))]:=Form2.edit2.text;
Speicher[(7+((ComboBox1.Items.Count-1)*8))]:=Form2.edit1.text;


Wie man erkennen kann ist das Array variabel groß... also abhängig von dem was in der ComboBox1 steht. Das Array wird nach dem einschreiben der Tour in die ComboBox1 erstellt, weil man erst dann alle Werte hat.

Ich weiß jetzt schon mal nicht ob die Speicher[...] Angabe jetzt überhaupt so funktioniert, und dann wäre sowieso noch des Problem mit der Speicherung in eine Datei, weil da hab ich jezt nämlich überhaupt keine Ahnung wie ich das machen soll.

Ich hab zwar in der Schule (11. Klasse --> CoMa) Delphi-Programmierung schon fast ein ganzes Jahr gehabt, aber betrachten wir eher die mathematische Nutzung von Delphi. Mit Google sowie in diesem Forum habe ich gesucht ... und teilweise nichts verstanden.

Ich freue mich auf eure Beiträge (Antworten is generell erlaubt --> nicht so schüchern;-)
MfG Nisarö


Zuletzt bearbeitet von Nisarö am Di 29.05.07 16:11, insgesamt 1-mal bearbeitet
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Mo 28.05.07 17:22 
Du könntest ein Array of record benutzen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
type
  TMyData = record
    A: String;
    B: Integer;
  end;

var
  MyData: Array[1..10] of MyData;

{ ... }

MyData[1].A := 'Hallo';
MyData[1].B := 10;


Speichern kannste das ganze dann so:
www.dsdt.info/tipps/?id=410

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
_frank_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: Mo 28.05.07 17:31 
Hi,
warum keine ini-datei? pro tag eine section ;)

Gruß Frank
Nisarö Threadstarter
Hält's aus hier
Beiträge: 8

Win XP
Delphi 6.0 PE
BeitragVerfasst: Mo 28.05.07 18:26 
@_frank_ die Sache mit der Ini-Datei is doch die gleiche wie mit der Text-Datei, da hab ich dann wieder des Problem mit dem Auslesen....

@GTA-Place meinst du dass das dann mit dem variabel großen Array geht? Schreibt der des dann ah so in die Datei, dass mer des richtig wieder auslesen kann...?

edit: so ich habs jetzt mal probiert....

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
type
  TForm1 = class(TForm)
    {...}
  TSpeicherDatensatz = record
    Tageskilometer:String[20];
    ZeitInStunden:String[5];
    ZeitInMinuten:String[2];
    ZeitInSekunden:String[2];
    Hoechstgeschwindigkeit:String[5];
    Durchschnittsgeschwindigkeit:String[8];
    Datum:String[10];
    Route:String[255];
   {...}
  end;


wenn ich des so mach dann sagt der mir dass er nach dem TSpeicherDatensatz nen : oder ein , haben will..... <-- was muss ich dann ändern?
_frank_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: Mo 28.05.07 18:49 
user profile iconNisarö hat folgendes geschrieben:
@_frank_ die Sache mit der Ini-Datei is doch die gleiche wie mit der Text-Datei, da hab ich dann wieder des Problem mit dem Auslesen....


es gibt doch TIniFile...verstehe das problem mit dem auslesen nicht ganz...oder hast du binäre daten drin?

Gruß Frank
Nisarö Threadstarter
Hält's aus hier
Beiträge: 8

Win XP
Delphi 6.0 PE
BeitragVerfasst: Mo 28.05.07 18:56 
Nee ich glaub nicht (um ehrlich zu sein kA was binäre Daten sind)....

Aber die Methode mit dem Array of Record finde ich verständlicher. Irgendwann probier ich des mit dem Ini-File nochmal.. und dann hoff ich funzts.

Trotzdem thx. (wenn ich weiter fragen habe meld ich mich wieder^^)

MfG Nisarö
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Mo 28.05.07 19:14 
Mit einem Ini-File ist es zwar einfacher, aber ich finde die Methode mit dem record fast besser, weil es keine Größenbeschränkung gibt. Wie das mit dem Array geht, versuch ich gleich mal herauszufinden.


EDIT: Hier ist es mit einem Array of record beschrieben:
www.dsdt.info/tutorials/streams/?page=2
(Auslesen dann auf der folgenden Seite)

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Nisarö Threadstarter
Hält's aus hier
Beiträge: 8

Win XP
Delphi 6.0 PE
BeitragVerfasst: Mo 28.05.07 19:26 
mal ne Frage zu nem Fehler...
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
Speicher:TSpeicherDatensatz; //Globale Variablen
{...}
procedure TForm1.Button_tour_addClick(Sender: TObject);
var Speicher:Array[1..200] of TSpeicherDatensatz;
i:integer;
begin

Form2.Show;

i:=(ComboBox1.Items.Count-1);
Speicher[i].Tageskilometer:=edit1.text;

Speicher[i].ZeitInStunden:=edit2.text;
Speicher[i].ZeitInMinuten:=edit3.text;
Speicher[i].ZeitInSekunden:=edit4.text;
Speicher[i].Hoechstgeschwindigkeit:=edit5.text;
Speicher[i].Durchschnittsgeschwindigkeit:=edit6.text;
Speicher[i].Datum:=Form2.edit2.text;
Speicher[i].Route:=Form2.edit1.text;

end;

{...}

procedure TForm1.Button_speichernClick(Sender: TObject);
var Touren:File of TSpeicherDatensatz;
begin

try
        AssignFile(Touren, 'Touren.radeln');
        ReWrite(Touren);
        Write(Touren,Speicher);
finally
        closeFile(Touren);
    end;
showmessage('Datei wurde gespeichert!');
end;


warum haut denn der mir bei der markierten Stelle die Bremse rein...?
_frank_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: Mo 28.05.07 20:51 
wie ist TSpeicherDatensatz deklariert?
speicher[combobox1.items.count-1] ist nicht (richtig) instanziert oder bereits freigegeben worden?

Gruß Frank
Nisarö Threadstarter
Hält's aus hier
Beiträge: 8

Win XP
Delphi 6.0 PE
BeitragVerfasst: Di 29.05.07 15:47 
.... Ich hab das jetzt doch noch mal anders mit dem IniFile probiert und es klappt eigentlich alles was ich bisher geschafft habe..^^

..Die ganze Combobox funktioniert (inkl. Button + Anzeige darunter)...

ABER - PROBLEM:

Jetzt muss ich noch irgendwie die ganze Anzeige rechts für die Gesamtwerte machen... nur hab ich da jetztn Problem mit dem Laden beim Anfang (TForm1.FormCreate) und zwar muss ich ja die bisher eingegebenen Strecken wieder in die ComboBox laden... ich weiß aber net wie ich des machen soll. Das Problem liegt nur beim wiederladen des ComboBox Inhalts.. ich denk' mal den Rest weiß ich dann...

MfG Nisarö
_frank_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: Di 29.05.07 16:41 
die Eigenschaft Items der Combobox ist vom Typ TStrings.
schau dir mal dessen methoden SaveToFile und LoadFromFile an...alternativ kannst du dessen items natürlich auch durchgehen und genauso in ner ini speichern (evtl. ist TStrings.CommaText hilfreich)

HTH Frank
Nisarö Threadstarter
Hält's aus hier
Beiträge: 8

Win XP
Delphi 6.0 PE
BeitragVerfasst: Di 29.05.07 17:37 
ich habs fast.... aber jetzt hab ich des problem, dass ich keine ZählVARIABLE hab, die alles zusammenrechnen lässt sondern dass des ne konstante is --> so heißen ich weiß den befehl net wie mer des letzte element einer section in ner Ini Datei aufruft....

edit: so gesehen hab ich es fertig, nur wenn das programm keine speicherdatei hat um daraus die werte für die Zeit zu nehmen, bringt er mir den fehler "Division durch Null"
Nisarö Threadstarter
Hält's aus hier
Beiträge: 8

Win XP
Delphi 6.0 PE
BeitragVerfasst: Di 29.05.07 19:38 
Loite Herzlichen Dank (insbesondere Frank) für die Anstupser... ich hab das Programm jetzt vollständig fertig. Es läuft.... und ich muss jetzt unbedingt ne Runde radeln^^.

Im Falle eines Falles greife ich wieder auf dieses tolle Forum zurück.

Mfg Nisarö