Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Suchen, vergleichen (https://www.delphipraxis.net/149259-suchen-vergleichen.html)

jonsen2.0.0.9 17. Mär 2010 17:39


Suchen, vergleichen
 
Hi,

ich schriebe jetzt mal ein Programm, bzw. ich versuche es, mit dem man in einem Spiel etwas formatieren kann.

Naja...ich hab folgendes Problem:

Die zu formatierende Liste ist allerdings unterschiedlich, deshalb muss ich nach bestimmten begriffen suchen.

Meine erste Frage:

Wie durchsuche ich einen String nach bestimmten Begriffen?

So dann hab ich noch eine Frage:

Ich habe einen String. Ich möchte gerne wissen ob an der Stelle x in diesem String ein "Integer" also eine Zahl (sind ja alles chars) steht.

Ein String ist ja bekanntlich eigentlich nur ein array der aus chars besteht. ich möchte nun wissen (ohne try strtoint) ob das zeichen

Delphi-Quellcode:
string[x]
eine Zahl ist.

gibt es da eine möglichkeit mit z.B. if? (an dieser Stelle weiss ich, dass man dies mit try strtoint lösen könnte) aber ich suche eine andere möglichkeit.

Hoffe ihr könnt mir helfen :)

MFG
Jonsen

Jens Hartmann 17. Mär 2010 17:43

Re: Suchen, vergleichen
 
Schau mal hier...

Delphi-Quellcode:
if Pos('Ich Suche', 'Suchstring') > 0 then
  ...
//Pos(Suchstring, Stringvar.)
auf die Frage mit dem Integer. Du musst mit Pos prüfen, aber...
Delphi-Quellcode:
  tryStrToInt
wäre da schon ratsam...


Gruß Jens

dominikkv 17. Mär 2010 17:58

Re: Suchen, vergleichen
 
Überprüfen, ob ein Char eine Zahl darstellt, würde ich so:
Delphi-Quellcode:
if MyString[I] in ['0'..'9'] then
  showmessage(Format('Das Zeichen "%s" ist eine Zahl!', [MyString[I]]));

jonsen2.0.0.9 17. Mär 2010 18:39

Re: Suchen, vergleichen
 
vielen dank :)

aber wie finde ich heraus an welcher position (was x ist) der anfangsbuchstabe oder der endbuchstabe von dem gesuchten ist?

und was ist wenn es das was ich suche mehr als einmal gibt?

MFG
Jonsen

Jens Hartmann 17. Mär 2010 18:54

Re: Suchen, vergleichen
 
Wie wäre es z.B. mit einer Schleife. Aber vieleicht solltest Du mal deinen Code zeigen, damit man das eventuell besser beurteilen kann. Mit einer Schleife könntest Du das z.B. in etwa so gestalten...

Delphi-Quellcode:
var
  iPos : integer;
begin
...
  while Pos('Suchetext', Text) > 0 do
    begin
      iPos := Pos('Suchtext', Text);
      ShowMessage(IntToStr(iPos));
    end;
Gruß Jens

dominikkv 17. Mär 2010 19:03

Re: Suchen, vergleichen
 
Zitat:

Zitat von Jens Hartmann
Wie wäre es z.B. mit einer Schleife. Aber vieleicht solltest Du mal deinen Code zeigen, damit man das eventuell besser beurteilen kann. Mit einer Schleife könntest Du das z.B. in etwa so gestalten...

Delphi-Quellcode:
var
  iPos : integer;
begin
...
  while Pos('Suchetext', Text) > 0 do
    begin
      iPos := Pos('Suchtext', Text);
      ShowMessage(IntToStr(iPos));
    end;
Gruß Jens

Da hast du dir aber eine feine Endlosschleife gebastelt :feuerchen:


Zitat:

Zitat von jonsen2.0.0.9
ber wie finde ich heraus an welcher position (was x ist) der anfangsbuchstabe oder der endbuchstabe von dem gesuchten ist?

Pos() liefert dir diese Position! (Bitte in der Hilfe nachlesen)
Zitat:

Zitat von jonsen2.0.0.9
und was ist wenn es das was ich suche mehr als einmal gibt?

Da musst du dir, wie Jens schon sagte, eine Schleife bauen. Schau dir mal PosEx an, dort kannst du noch einen Offset angeben.

Jens Hartmann 17. Mär 2010 19:12

Re: Suchen, vergleichen
 
Sorry, ja da hast Du recht, da fehlte ja auch was...

Delphi-Quellcode:
var
  iPos : integer;
  Text : String;
begin
...
  Text := MyString;
  while Pos('Suchetext', Text) > 0 do
    begin
      iPos := Pos('Suchtext', Text);
      ShowMessage(IntToStr(iPos));
      Delete(Text,1,iPos+1);
    end;
Gruß Jens

jonsen2.0.0.9 17. Mär 2010 19:24

Re: Suchen, vergleichen
 
bisher sieht das so aus :

(is erstmal für die-staemme.de)

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var ipos:integer;
    form:string;
    temp:string;
begin
temp:='';
form:='';
ipos:=pos('Hauptgebäude  (Stufe',memo1.Text);
ipos:=ipos+21;
if memo1.Text[ipos+1] in ['0'..'9'] then temp:=memo1.Text[ipos+1];
memo2.Text:=memo1.Text[ipos]+temp;
end;
gibt mir aber was falsches zurück...
und immer etwas anderes -.-

MFG
Jonsen

Jens Hartmann 17. Mär 2010 21:16

Re: Suchen, vergleichen
 
Wenn Du noch nicht viel hast, dann häng doch mal kurz dein Projekt an. Dann kann man eventuelle sehen wo das Problem liegt. Was steh den z.B. im Memo etc.

Gruß Jens

jonsen2.0.0.9 18. Mär 2010 05:08

Re: Suchen, vergleichen
 
Liste der Anhänge anzeigen (Anzahl: 1)
im grunde ist das was ich oben gepostet hab alles, da es ja noch nicht so funktioniert :(

sobald dieses stück geht, ist der rest einfach...


so im memo1 steht:

Hauptgebäude (Stufe 15) 2883 3060 2242 8 1:51:10 Rohstoffe verfügbar heute um 14:28 Uhr
Kaserne (Stufe 5) 635 584 286 2 0:35:54 Rohstoffe verfügbar heute um 07:48 Uhr
Stall (Stufe 3) 540 503 520 2 1:23:07 Rohstoffe verfügbar heute um 07:31 Uhr
Werkstatt (Stufe 1) 378 307 328 1 0:57:43 Rohstoffe verfügbar heute um 07:02 Uhr
Erste Kirche (Stufe 1) Gebäude vollständig ausgebaut
Schmiede (Stufe 11) 2796 2605 3050 16 5:57:24 Rohstoffe verfügbar heute um 14:27 Uhr
Versammlungsplatz (Stufe 1) Gebäude vollständig ausgebaut
Statue (Stufe 1) Gebäude vollständig ausgebaut
Marktplatz (Stufe 10) 1009 1135 1009 14 2:14:01 Rohstoffe verfügbar heute um 08:54 Uhr
Holzfäller (Stufe 17) 2220 3731 1659 8 2:40:05 Rohstoffe verfügbar heute um 16:07 Uhr
Lehmgrube (Stufe 16) 2977 2150 1250 10 2:13:24 Rohstoffe verfügbar heute um 14:45 Uhr
Eisenmine (Stufe 16) 2734 3170 2187 18 2:40:05 Rohstoffe verfügbar heute um 14:10 Uhr
Bauernhof (Stufe 10) 620 642 383 0:59:34 Rohstoffe verfügbar heute um 07:45 Uhr
Speicher (Stufe 10) 1007 880 555 1:12:55 Rohstoffe verfügbar heute um 08:54 Uhr
Versteck (Stufe 3) 98 117 98 0:24:56 Rohstoffe verfügbar heute um 06:12 Uhr
Wall (Stufe 7) 252 548 101 2 1:43:25 Rohstoffe verfügbar heute um 06:39 Uhr


eine liste der gebäude und deren stufe...dies möchte ich formatieren :)

erst suche ich das gebäude dann kommme ich durch die position auf die Stufe und trage dies dann in memo2 mit einem Link zu dem entsprechenden bild ein... :)

wenn ich aber nach Hauptgebäude suche und dann immer die gleichen stellen auslese...steht bei mir immer etwas anders :(


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 Uhr.
Seite 1 von 3  1 23      

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-2025 by Thomas Breitkreuz