Geht einfacher und übersichtlicher:
Delphi-Quellcode:
function BuildName(slFirstNamesMale, slFirstNamesFemale, slLastNames: TSTringList; bMale: Boolean = True): String;
var
Firstname, Lastname: String;
begin
result := '';
if bMale then
Firstname := slFirstNamesMale.Strings[Random(slFirstNamesMale.Count)]
else
Firstname := slFirstNamesFemale.Strings[Random(slFirstNamesFemale.Count)];
Lastname := slLastNames.Strings[random(slLastNames.Count)];
result := Firstname+' '+Lastname;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
slMale, slFemale, slLastNames: TStringlist;
begin
slMale := TStringList.Create;
slFemale := TStringList.Create;
slLastNames := TStringList.Create;
try
slMale.LoadFromFile(ExtractFilepath(ParamStr(0))+'m.txt');
slFemale.LoadFromFile(ExtractFilePath(ParamStr(0))+'w.txt');
slLastNames.LoadFromFile(ExtractFilePath(ParamStr(0))+'nach.txt');
Edit1.Text := BuildName(slMale, slFemale, slLastNames, rdbMale.Checked);
finally
FreeAndNil(slMale);
FreeAndNil(slFemale);
FreeAndNil(slLastNames);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize();
end;
Wo für du 85 Zeilen gebraucht hast, habe ich nur 35 gebraucht und bin ohne globale Variablen ausgekommen.
PS: War 10 Minuten Arbeit. Muss zu meiner Entschuldigung sagen, dass ich nicht blind tippen kann und auch nur mit zwei Fingern.
Nachtrag:
Hier die Version mit der Liste mit zufälligen männlichen und weiblichen Namen:
Delphi-Quellcode:
for Loop := 0 to StrToInt(edtCount.Text)-1 do
ListBox1.Items.Add(BuildName(slMale, slFemale, slLastNames, Boolean(Random(2))));