![]() |
Datenbank mit zufällig generierten Einträgen/Suchfunktion
Hi.
Ich hoffe, hier kann mir jemand helfen. In der Schule müssen wir mir Delphi mal wieder ein Programm coden...leider war ich in der letzten Stunde (als wir damit angefangen haben) nicht da, bin mit den Leuten in meinem Kurs nicht so gut gestellt und habe einen Lehrer, der weder dazu befähigt ist, etwas zu erklären, noch Lust dazu hat. Mein Fazit dazu lautete folglich so: Selbst versuchen, das zu verstehen ist angesagt, und da mein Nachschlagewerk zu Delphi (Objektorientierte Programmierung mit ~) dazu leider auch keinen Ratschlag aufzuweisen hat, frage ich hier. Das Projekt soll eine Art Datenbank sein, die Kundendaten erfasst. Diese Kundendaten soll das Programm vorher (FormCreate) zufällig generiert (aus den Buchstaben A bis Z) und in einer Listbox gespeichert haben. Alle Zeichenketten haben 8 Zeichen lang zu sein, meinetwegen ABCDEFG. Wenn das fertig ist, brauche ich eine Suchfunktion, die die Listbox durchsucht und aus den vorhandenen Einträgen gezielt welche sucht, die die eingegebene Zahlenfolge irgendwo in sich selbst aufweisen. Mit dem gefundenen Ergebnis soll ein Editfeld, das ich vorher erstellt habe, gefüllt werden. Leider habe ich keine Ahnung, wie ich das alles anstellen soll, und wäre euch wirklich dankbar, wenn man mir das ein wenig erklären würde. Gut wären auch ein paar Codezeilen als Beispiel, mit denen ich dann gucken könnte, ob ich es nachvollziehen kann. Wichtigste Fragen wären: - Wie erstelle ich zufällig 8-stellige Zahlenketten (Buchstaben A - Z) und speichere diese in einer Listbox? (- Wozu benutze ich "delimiter" in diesem Projekt?) - Wie durchsuche ich den Inhalt meiner Listbox nach bestimmten Buchstabenketten? Wäre sehr, sehr nett, wenn ihr mir ein wenig Klarheit verschaffen könntet. |
Re: Datenbank mit zufällig generierten Einträgen/Suchfunktio
Zitat:
Delphi-Quellcode:
s := ' ';
for i := 1 to 8 do begin s[i] := Chr(Random(26) + 64); end; list.add( s); Zitat:
Zitat:
Delphi-Quellcode:
for i := 0 to List.Count -1 do
begin if pos(list.Strings[i], '<suchstr>') > 0 then ... //gefunden |
Re: Datenbank mit zufällig generierten Einträgen/Suchfunktio
Herzlich willkommen in der Delphi-PRAXiS.
mkinzler kann schneller schreiben, als ich denken kann, aber weil ich soviel geschrieben habe, musst du es jetzt auch lesen. Um eine Zeichenkette mit acht zufällig ausgewählten Buchstaben zu erstellen könntest du so vorgehen: Setze die Länge deiner String-Variable ( ![]()
Delphi-Quellcode:
Buchstaben haben einen CodeWert - der von 'A' ist Ord('A') ist 65 und es gilt für jeden Buchstaben c: Chr(Ord(c)) = c. Der Nachfolger von 'A' ist 'B', kann man auch so erreichen:
s[i] := 'A';
Delphi-Quellcode:
Einen Zufallswert im Bereich 0..n-1 erhältst du mit Random(n). Da A bis Z einen zusammenhängenden Bereich von 26 Buchstaben bilden (ASCII, ANSI) weißt du jetzt welchen Wert n haben sollte.
c := 'A';
c := Chr(Ord(c) + 1); Wenn du geschickt bist, dann schreibst du dir eine Funktion:
Delphi-Quellcode:
Innerhalb deiner Funktion steht dir das Ergebnis als Variable mit dem Namen Result zur Verfügung. Versuche mal dein Glück.
function RandomStr(size: Cardinal): String;
begin end; Grüße vom marabu |
Re: Datenbank mit zufällig generierten Einträgen/Suchfunktio
Erstmal vielen lieben Dank euch beiden, mir wird schon einiges viel klarer.
Ich hoffe mal, dass die Umsetzung davon genauso funktioniert, die bereitet mir als Delphi-Anfänger immer noch gern Probleme. Zu meiner Schande muss ich gestehen, dass ich etwas vergessen habe, was das zufällige Erstellen von Zeichenketten angeht: Und zwar müssen wir nicht nur 1,2 oder 10 Einträge generieren, sondern etwa 1000. Natürlich könnte ich das alles jetzt in eine Prozedur stecken und 1000 mal aufrufen und durchlaufen lassen, aber das geht doch sicher schneller und einfacher? |
Re: Datenbank mit zufällig generierten Einträgen/Suchfunktio
Einfach Schleife drum rum
Delphi-Quellcode:
Und Schon hast du 1000 Einträge aus zufälligen Zeichenketten in deiner StringListe
for j := 1 to 1000 do
begin s := ' '; for i := 1 to 8 do begin s[i] := Chr(Random(26) + 65); end; list.add( s); end; |
Re: Datenbank mit zufällig generierten Einträgen/Suchfunktio
Hallo, ich bin es wieder.
Erstmal danke an mkinzler für den Tip mit der Schleife. Nun habe ich versucht, das alles umzusetzen, aber irgendwie klappt es noch nicht. Ich poste mal den Code, ja? Dazu natürlich meine Ideen und was ich bis jetzt dazu überlegt habe. Übrigens: Wenn ich den Suchen-Teil allein ausführen will, bekomme ich einen ReadError.
Delphi-Quellcode:
So sieht es bis jetzt aus, und einige Teile funktionieren sogar, aber der Rest...nun:
unit msuchen;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) edkunde: TEdit; Label1: TLabel; Label2: TLabel; edkundennummer: TEdit; edumsatz: TEdit; edtyp: TEdit; ListBox1: TListBox; bt_suchen: TButton; Button2: TButton; Button3: TButton; Edit5: TEdit; Label3: TLabel; Label4: TLabel; bt_test: TButton; procedure bt_suchenClick(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } kunde: string; ZArray : array['A'..'Z'] of char; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.bt_suchenClick(Sender: TObject); var i:integer; begin for i := 0 to Listbox1.Count -1 do begin if pos(listbox1.items[i], '<suchstr>') > 0 then ... //gefunden end; procedure TForm1.FormCreate(Sender: TObject); var j:integer; i:integer; s:string; begin for j := 1 to 1000 do s := ' '; for i := 1 to 8 do begin s[i] := Chr(Random(26) + 65); end; listbox1.add( s); end; end. procedure TForm1.Button4Click(Sender: TObject); zuordnen(delimiter:char; quelle:string; var e1,e2,e3,e4:tedit) begin e1.text:=copy(quelle,1,pos(delimiter,quelle)-1); delete(quelle,1,ps(delimiter,quelle)); e2.text:=copy(quelle,1,pos(delimiter,quelle)-1); --- {zuordnen('#',kundenbox.items[i],edname,edkundennummer, edumsatz,edtyp); end; }
Delphi-Quellcode:
Aus j, i und s habe ich Variablen gemacht.
procedure TForm1.FormCreate(Sender: TObject);
var j:integer; i:integer; s:string; begin for j := 1 to 1000 do s := ' '; for i := 1 to 8 do begin s[i] := Chr(Random(26) + 65); end; listbox1.add( s); end; Nun funktioniert das Einfügen in die Listbox (Listbox1) aber nicht, kann mir jemand erklären, wie ich das ändern könnte, sodass es funktioniert? Und was mache ich mit listbox1.add( s);?
Delphi-Quellcode:
Das gehört zur Suchfunktion.
begin
procedure TForm1.bt_suchenClick(Sender: TObject); var i:integer; begin for i := 0 to Listbox1.Count -1 do begin if pos(listbox1.items[i], '<suchstr>') > 0 then ... //gefunden end; Könnte man das Ergebnis der Suche so in das Editfeld schreiben: if pos(listbox1.items[i], '<suchstr>') > 0 then edit1.caption + 'ergebnis'? 'ergebnis' müsste irgendetwas mit einem Listbox-Index oder so sein, glaube ich. Weiß das vielleicht jemand? Wäre sehr nett, wenn mir jemand helfen könnte. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz