Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Datenbank mit zufällig generierten Einträgen/Suchfunktion (https://www.delphipraxis.net/61951-datenbank-mit-zufaellig-generierten-eintraegen-suchfunktion.html)

Alecto 28. Jan 2006 16:34


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.

mkinzler 28. Jan 2006 16:51

Re: Datenbank mit zufällig generierten Einträgen/Suchfunktio
 
Zitat:

Wichtigste Fragen wären:

- Wie erstelle ich zufällig 8-stellige Zahlenketten (Buchstaben A - Z) und speichere diese in einer Listbox?
Delphi-Quellcode:
s := '       ';
for i := 1 to 8 do
begin
  s[i] := Chr(Random(26) + 64);
end;
  list.add( s);
Zitat:

(- Wozu benutze ich "delimiter" in diesem Projekt?)
Du kannst die bei einer Stringliste mit der Eigenschaft .DelimitedText alle Einträge der Liste in einem String zurückliefern lassen. Die Trennung der Felder erfolgt durch das ,in der Eigenschaft .Delimiter eingestellte, Zeichen.

Zitat:

- Wie durchsuche ich den Inhalt meiner Listbox nach bestimmten Buchstabenketten?
Delphi-Quellcode:
for i := 0 to List.Count -1 do
begin
  if pos(list.Strings[i], '<suchstr>') > 0 then ... //gefunden

marabu 28. Jan 2006 17:06

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-Referenz durchsuchenSetLength). Danach kannst du die Variable wie ein character array ansprechen - s[1] ist dabei der erste Buchstabe. Du kannst ihn durch einen anderen Wert ersetzen:

Delphi-Quellcode:
s[i] := 'A';
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:

Delphi-Quellcode:
c := 'A';
c := Chr(Ord(c) + 1);
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.

Wenn du geschickt bist, dann schreibst du dir eine Funktion:

Delphi-Quellcode:
function RandomStr(size: Cardinal): String;
begin
end;
Innerhalb deiner Funktion steht dir das Ergebnis als Variable mit dem Namen Result zur Verfügung. Versuche mal dein Glück.

Grüße vom marabu

Alecto 28. Jan 2006 20:42

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?

mkinzler 28. Jan 2006 20:57

Re: Datenbank mit zufällig generierten Einträgen/Suchfunktio
 
Einfach Schleife drum rum
Delphi-Quellcode:
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;
Und Schon hast du 1000 Einträge aus zufälligen Zeichenketten in deiner StringListe

Alecto 4. Feb 2006 17:09

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:
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;   }
So sieht es bis jetzt aus, und einige Teile funktionieren sogar, aber der Rest...nun:

Delphi-Quellcode:
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;
Aus j, i und s habe ich Variablen gemacht.
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:
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;
Das gehört zur Suchfunktion.

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 13:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz