Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Ins Array Speichern, Auslesen usw.
Donn!e DarKo - Mi 06.05.09 08:27
Titel: Ins Array Speichern, Auslesen usw.
Hey,
Also ich hab ein mega Problem. In der Schule sind wir bereits bei dem Array angekommen. Leider ist unsere Lehrerin nicht umbedingt so Kompetent... Den das erklären hat mir nicht geholfen, will aber nicht ganz absacken in Proggen.
Und versuchs nunmal auf dem weg hier. In der hoffnung genug hilfe zu bekommen.
Also unsere momentane aufgabe ist ...
Wir sollen eine Datenbank ähnliche Anwendung Programmieren.
Eine Songliste
Aufgaben dazu :
1 erfassen --> Speichern ins Array
2 anzeigen ( 1 Datensatz )
3 alle anzeigen ; oder gefiltert durch suche
4 ändern
5 löschen
6 einfügen ( vor oder nach )
7 blättern ( vor, zurück, First, Last )
8 Suche
9 Speichern / Laden in eine TxT
Ich bitte wegen dem kram wirklich um Hilfe ... ! Wäre sehr dankbar über alles was mich weiter bringt und den kram endlich verstehen lässt ...
Das fängt nämlich schon bei dem Array an, das hab ich nicht ganz verstanden. Vielleicht wird mir ja ein wenig mit Code geschnipsel ausgeholfen :)
Wäre sehr sehr dankbar (:
Gruß
Moderiert von
Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
Nersgatt - Mi 06.05.09 08:31
Was beim Array hast Du denn nicht verstanden?
Ein Array kannst Du Dir im einfachsten Fall wie eine Tabelle vorstellen. Jedes Element in einem Array kannst Du über eine "Zeilennummer" ansprechen.
ffgorcky - Mi 06.05.09 08:36
Ja, aber im Normal-Fall nur wie eine _einspaltige_ Tabelle.
Sonst müsstest Du dort ein Array mit Titel[x,y] machen, wobei x und y natürlich für die Zeilen- und Spaltennummern stehen und entweder als (Integer-)Variablen eingesetzt werden müssen, oder durch Zahlen ersetzt werden müssen.
Donn!e DarKo - Mi 06.05.09 08:38
Hey,
Danke für die Schnelle antworten. Ja das habe ich schon kapiert. Ich weiß aber z.B. nicht wie ich die einzelnen zahlen ansprechen soll, das ich z.B. mit edit1 ne zahl oder etwas anderes darin suche und in einen Label ausgebe. Bzw. wie schreibe ich den ins Array rein ?
Ich weiß jetzt nur das ich es vorher deklarieren muss und das wars auch schon.
Gruß
Moderiert von
Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
ffgorcky - Mi 06.05.09 08:42
Also zum Beispiel so (der Erste Titel-Intepret in der ersten Spalte eines Arrays):
Titel[0,0]:='Herbert Grönemeier';
Und der Titel (in der zweiten Spalte):
Titel[0,1]:='Weiß grad keinen';
Donn!e DarKo - Mi 06.05.09 08:45
Also weise ich somit direkt von anfang an einen festen wert zu ?
Wie muss das ganze den dann aussehen, wenn ich es mit einem edit zuweisen möchte ? Ich meine, er muss das ganze ja dann auch hoch zählen.
Gruß
Moderiert von
Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
Nersgatt - Mi 06.05.09 08:47
So recht habe ich nicht verstanden, wo Dein Problem liegt.
Ich geb Dir mal ein Minimalbeispiel zum Array:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| var Songs : Array[0..3] of String; I : Integer; begin
songs[0] := 'Alle meine Entchen'; songs[1] := 'Hänschen klein'; songs[2] := 'Wie schön, dass Du geboren bist'; songs[3] := 'Klein Häschen wollt spazieren gehn';
for i := 0 to 3 do ShowMessage(songs[i]);
end; |
Donn!e DarKo - Mi 06.05.09 09:15
Hey,
Danke für das Beispiel ... das probier ich gerade mal aus.
Mal schauen ob ichs danach verstanden habe.
Gruß
---
Moderiert von
Narses: Beiträge zusammengefasst---
So,
Den anfang hätte ich schonmal geschafft. Nun, bräuchte ich noch hilfe zum suchen.
Also, wie kann ich nun einen bestimmten eingespeicherten wert suchen?
z.B. ich habe an irgendeiner Position Linkin Park gespeichert und genau das will ich suchen, mit der Positions ausgabe ?
Danke schonmal für die Hilfe !
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: 37: 38: 39:
| var Form1: TForm1; songnr: integer; song:array[1..30] of string;
implementation
procedure TForm1.erfassenClick(Sender: TObject); begin
song[songnr]:=edit1.text; songnr:=songnr+1; listbox1.items.add(edit1.text);
end;
procedure TForm1.Button2Click(Sender: TObject); var i:integer; begin
listbox1.items.clear; i:=1;
while i < songnr do begin listbox1.items.add('Titelnr ' + inttostr(i) + 'Titel ' + song[i]); i:=i+1; end
end;
procedure TForm1.FormCreate(Sender: TObject); begin songnr:=0; end; |
Nersgatt - Mi 06.05.09 09:22
Du hast die Lösung schon fast vor Dir :D
Dein Quellcode zum Ausgeben der Songs:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| i:=1;
while i < songnr do begin listbox1.items.add('Titelnr ' + inttostr(i) + 'Titel ' + song[i]); i:=i+1; end |
Wenn Du nun statt der Ausgabe in der Listbox (Listbox1.item.add) einfach vergleichst, ob song[i] dem gesuchten entspricht, dann hast Du die Position gefunden.
Donn!e DarKo - Mi 06.05.09 10:05
Hmm,
Mal schauen obs klappt ... :)
Dann hab ich ja 2 Monate lernen, fast in guten 2 Schule stunden hinbekommen ;)
Also auf ein neues.
Gruß
---
Moderiert von
Narses: Beiträge zusammengefasst---
So,
die suche hat geklappt nun zu meiner nächsten Frage.
Wie speicher ich das array in einer Text datei, so das sich
ein dialog öffnet damit ich auswählen kann wohin ich es speichern
kann.
Ich hab schonmal angefangen, aber irgendwie klappt es nicht.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var fout:textfile; r:integer; begin
assignfile(fout,savedialog1.FileName); rewrite(fout);
for r:= 1 to 30 do begin writeln(fout,song[r].titel); writeln(fout,song[r].album); writeln(fout,song[r].interpret); end; closefile(fout);
end; |
Delete - Mi 06.05.09 10:13
Ist song denn jetzt ein Array of record?
Donn!e DarKo - Mi 06.05.09 10:34
Jap, damit ich mehre Datensätze habe.
EDIT:
Also ich hab es hin bekommen.
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:
| procedure TForm1.Button3Click(Sender: TObject); var fout:textfile; r:integer; begin
if savedialog1.execute = true then begin
assignfile(fout,savedialog1.FileName); rewrite(fout);
for r:= 1 to 30 do begin if r < songnr then begin writeln(fout,song[r].titel); writeln(fout,song[r].album); writeln(fout,song[r].interpret); end; end; closefile(fout); |
So nun brauch ich folgendes, ich muss z.B. wenn ich bereits 1 - 5 belegt habe ...
ein weiteres zwischen drin einfügen. Also an Position 3 ... wie funktioniert das den genau ?
Gruß
Nersgatt - Mi 06.05.09 10:45
Siehste, langsam bekommst Du den Dreh raus! :les:
Schau Dir mal in der Hilfe "SetLength" an.
Delete - Mi 06.05.09 10:52
Und bitte nicht
Zitat: |
Delphi-Quelltext 1:
| if savedialog1.execute = true | |
sondern
Delphi-Quelltext
1:
| if savedialog1.execute |
Donn!e DarKo - Mi 06.05.09 11:03
DeddyH hat folgendes geschrieben : |
Und bitte nicht
Zitat: | Delphi-Quelltext 1:
| if savedialog1.execute = true | |
sondern
Delphi-Quelltext 1:
| if savedialog1.execute | |
Sry, so wurde es mir von meiner lehrerin erklärt.
Also das true einfach weg lassen ?
Na ja der unterricht ist nun vorbei, hab jetzt nen anderes fach.
Ich danke für die ausführliche hilfe. Hat mich aufjedenfall weiter gebracht :)
:D :D
Hab jetzt schonmal einen ansatz geschrieben, von dem Position einfügen.
Mal schauen obs klappt. Also heute mittag, nach der Schule ;)
Hab ja noch einiges aufzuhollen.
Vielen Dank nochmal !
Gruß
ffgorcky - Mi 06.05.09 13:22
Ja, die Funktion savedialog1.execute gibt ja einfach nur einen boolschen Wert zurück, ob denn gespeichert oder abgebrochen wurde. Und Dich interessiert ja genau der Wert, weil Du ja auch auf den Abfragst, also brauchst Du das dahinter nicht.
Jede If-Frage ist ja eigentlich einfach nur:
Wenn ja, dann mach dies...
und eventuell dann noch:
Wenn nicht, dann mach jenes...
was ja dann (insgesamt) so zu lösen wäre (mit wasAuchImmer als boolscher Variable):
Delphi-Quelltext
1: 2: 3: 4:
| if wasAuchImmer then machDieses(); else machJenes(); |
Und wenn Du abfragen möchtest, ob der Dialog abgebrochen wurde (also wenn das - warum auch immer - aus Sicht des Users doch noch nicht gespeichert werden soll), dann heißt das so:
Delphi-Quelltext
1:
| if not savedialog1.execute then |
...und zum Thema
Donn!e DarKo hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3:
| for r:= 1 to 30 do begin if r < songnr then |
|
Da würde ich das eher so schreiben:
Delphi-Quelltext
1:
| for r:= 1 to songnr do |
Damit ersparst Du Dir doch eine Zeile, die das ganze ja auch nicht gerade übersichtlicher macht.
...wobei da ja auch wieder die Frage ist, ob Du die allererste Zeile -also die Zeile 0 (=Null)- wirklich nicht mit einbeziehen möchtest.
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!