Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

Butch87 18. Mär 2010 08:55

Re: Suchen, vergleichen
 
Ja, is doch klar. Die Gebäudenamen sind auch unterschiedlich lang. Wenn du jetzt immer, sagen wir mal, die 30igste Stelle ausliest bekommst du immer, je nach Gebaudenamenlänge, einen anderen Char zurück.

Am besten suchst du nach dem ersten Leerzeichen im String. Das ist nämlich immer hinter dem Gebäudenamen. Nun kannst die Xte Stelle (deine Stufe) raus suchen. Nimm dazu den String nach dem ersten Leerzeichen. Der String ist ja nach dem Gebäudenamen überall gleich (bis zur Stufe zumindest, und die willst du ja heben).

DeddyH 18. Mär 2010 09:16

Re: Suchen, vergleichen
 
Mit einer ListView (vsReport mit 2 Spalten) könnte man das z.B. so darstellen:
Delphi-Quellcode:
var sl: TStringlist;
    i, StufePos, BracketPos: integer;
    Item: TListItem;
begin
  sl := TStringlist.Create;
  try
    sl.LoadFromFile(<Dateiname>);
    for i := 0 to sl.Count - 1 do
      begin
        Item := ListView.Items.Add;
        //Alles bis zum ersten Leerzeichen kopieren
        Item.Caption := Copy(sl[i],1,Pos(' ',sl[i]) - 1);
        //Position des Wortes "Stufe"
        StufePos := Pos('Stufe',sl[i]);
        //Position der ersten schließenden Klammer
        BracketPos := Pos(')',sl[i]);
        //alles zwischen den ermittelten Positionen kopieren
        Item.SubItems.Add(Copy(sl[i],StufePos + 6, BracketPos - StufePos - 6));
      end;
  finally
    sl.Free;
  end;
end;

Sir Rufo 18. Mär 2010 09:30

Re: Suchen, vergleichen
 
Ich würde den Gebäudenamen aber suchen lassen bis zum ersten Erscheinen von " ("
Das erscheint mir eindeutiger

DeddyH 18. Mär 2010 09:43

Re: Suchen, vergleichen
 
Klar, kann man auch machen, falls ein Gebäudename ein Leerzeichen enthalten darf. Aber darum ging es mir auch nicht, ein bisschen soll der TE ja selbst erledigen ;)

p80286 18. Mär 2010 16:23

Re: Suchen, vergleichen
 
Lägen die Daten in dieser Form vor:
Code:
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
Dann wär das alles kein Problem.

Gruß
K-H

Jens Hartmann 18. Mär 2010 16:59

Re: Suchen, vergleichen
 
Zitat:

Zitat von p80286
Lägen die Daten in dieser Form vor:

Liegen sie aber ja scheinbar nicht. Deshalb denke ich, das Sir Rufo da schon den richtigen Ansatz gegeben hat. Es sieht aufjedenfall so aus, als wär die "(" immer vor der Stufe, also sollte es in etwa so gehen...

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  ipos:integer;
  form:string;
  temp:string;
begin
  temp:='';
  form:='';
  ipos:=pos('(',Memo1.Text);
  if Memo1.Text[ipos+1] in ['0'..'9'] then
    begin
      temp:=Memo1.Text[ipos+1];
      Memo2.Text:=Memo1.Text[ipos]+temp;//Obwohl ich diesen Sinn noch nicht ganz versteh.
    end;
end;
Gruß Jens

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

Re: Suchen, vergleichen
 
er meint bei mir immer :

[Fehler] Unit1.pas(30): Undefinierter Bezeichner: 'TListItem'

kann mir wer da helfen ?

DANKE übringens für die Lösungsvorschläge :)

Jens Hartmann 19. Mär 2010 19:11

Re: Suchen, vergleichen
 
Dann fehlt die Unit, hast Du den wie Deddy geschrieben hat überhaupt eine TListView in dein Projekt eingefügt. Das ist eine Komponenten, die DeddyH als anzeige vorgeschlagen hat.

Gruß Jens

jonsen2.0.0.9 19. Mär 2010 19:38

Re: Suchen, vergleichen
 
@ jens...das

Delphi-Quellcode:
Memo2.Text:=Memo1.Text[ipos]+temp;
gehört wenn dann außerhalb der if bedingung also nach das end...dies soll immer! ausgefürht werden :)


die andere lösung find ich auch richtig gut danke

jonsen2.0.0.9 19. Mär 2010 19:55

Re: Suchen, vergleichen
 
Liste der Anhänge anzeigen (Anzahl: 1)
so leute...hab ma das programm für meine zwecke ein bischen umgeschrieben...jetzt geht das aber nicht mehr richtig -.-

das problem: wenn ich auf wandeln drücke...wird hinter dem namen nicht nur die stufe, sondern auch noch eine klammer und ein paar zahlen (welche rohstoffe man für das ausbauen braucht) angezeigt....dies soll nicht so sein...hoffe ihr findet den fehler den ich übersehe :)

MFG
Jonsen


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 Uhr.
Seite 2 von 3     12 3      

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