AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Teilstring suchen

Ein Thema von Hugo Hasi · begonnen am 17. Apr 2008 · letzter Beitrag vom 6. Jun 2008
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Hugo Hasi

Registriert seit: 9. Feb 2008
4 Beiträge
 
#1

Teilstring suchen

  Alt 17. Apr 2008, 19:17
Hallo Leute... ich will lieber nicht wissen der wievielte Thread das zu diesem Thema ist , und ich hab mir auch einige dazu durchgelesen, aber trotzdem tut das Programm nicht das, was es eigentlich soll.
Also es geht um ein TList, die Autoren und die Bücher, die diese geschrieben haben, verwalten soll. Man gibt sozusagen Autor und Titel in zwei Felder ein und dann erscheinen die in der Liste.
Nun will ich aber den Autor suchen können... es erscheint auch keine Fehlemeldung aber, wenn ich einen Autor suche, erscheint gleich die Nachricht'Der Autor konnte nicht gefunden werden.', obwohl der Autor in der Liste steht. Vielleicht ist ja jemand so nett und kann sich mal anschauen, was ich da so (alles) falsch gemacht habe. Hoffe ich hab alle nötigen Infos da unten stehen... wäre echt hilfreich!!!
thx


Delphi-Quellcode:
procedure TForm1.SuchenButtonClick(Sender: Tobject);
var gefunden,j,n,suchbegriff,zeile:string;
i,max,separator:integer;
begin
 autorfeld.Text:=suchbegriff;
 i:=0;
 gefunden:=n;
 max:=Listenfenster.Items.Count-1;
 repeat
  Listenfenster.Items.Strings[i];
  zeile:=Listenfenster.Items.Strings[i];
  separator:=pos(#45,zeile);
  autorfeld.text:=copy(zeile,1,separator-1);
  if(autorfeld.text=suchbegriff) then begin
   i:=Listenfenster.ItemIndex;
   gefunden:=j;
  end else begin
  i:=+1;
  end;
 until (gefunden=j)or (i>max);
  if (gefunden=n) then begin
  ShowMessage('Der Autor konnte nicht gefunden werden.');
 end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Teilstring suchen

  Alt 17. Apr 2008, 19:22
Hallo und Willkommen in der DP

wie sieht Dein Autorfeld denn aus? Ist das ein Record oder nur ein String? Außerdem hast Du einige Fehler im Code (i := +1 z.B.).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Teilstring suchen

  Alt 17. Apr 2008, 19:31
Um noch ein paar Fehler mehr aufzulisten:

autorfeld.Text:=suchbegriff; Ist wohl andersrum gemeint.

gefunden:=n; Du hast n nichts zugewiesen, was soll das bringen?

Listenfenster.Items.Strings[i]; Da steht einzeln in Zeile 10, was soll das bringen?

i:=+1; Sollte wohl:

Delphi-Quellcode:
i := i + 1;
// oder
Inc(i);
heißen.

Hier mal ein kleiner Vorschlag:

Delphi-Quellcode:
var
  Search, Author, ItemStr: String;
  I: Integer;
  Found: Boolean;
begin
  Search := Edit1.Text;
  Found := false;

  for I := 0 to ListBox1.Count - 1 do
  begin
    ItemStr := ListBox1.Items[I];
    Author := Copy(ItemStr, 1, Pos(#45, ItemStr));
    if Pos(Search, Author) > 0 then
    begin
      ShowMessage('Autor: "' + Author + '" gefunden' + #13#10 + 'Index: ' +
        IntToStr(I));
      Found := true;
    end;
  end;

  if (not (Found)) then
    ShowMessage('Sorry, kein Autor gefunden');
end;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Teilstring suchen

  Alt 17. Apr 2008, 19:32
Für gefunden würde sich eher eine Booleanvariable eignen.

Delphi-Quellcode:
procedure TForm1.SuchenButtonClick(Sender: Tobject);
var
    suchbegriff,zeile: string;
    i,max,separator:integer;
    gefunden: Boolean;
    sl: TStrings;
begin
  sl := TStringList.Create;
  sl.Delimiter = #45;
  suchbegriff := autorfeld.Text;
  i:=0;
  gefunden:=False;
  max:=Listenfenster.Items.Count-1;
  while (i < max) and not gefunden do
  begin
    sl.DelimitedText := Listenfenster.Items.Strings[i];
    autorfeld.text:= sl.Strings[1];
    if(autorfeld.text=suchbegriff) then gefunden:= True else i:=+1;
  end;
  if not gefunden) then
  begin
      ShowMessage('Der Autor konnte nicht gefunden werden.');
  end;
end;
Markus Kinzler
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Teilstring suchen

  Alt 17. Apr 2008, 19:33
öhm... weißt du überhaupt was du da machst ?!
versuchs mal so:
Delphi-Quellcode:
procedure TForm1.SuchenButtonClick(Sender: Tobject);
var
  I, Index: Integer;
begin
  Index := -1;
  if Listenfenster.Items.Count > 0 then
    for I := 0 to Pred(Listenfenster.Items.Count) do
      If Pos(autorfeld.text, Listenfenster.Items[i]) > 0 then
        begin
          Index := I;
          Break;
        end;
  if Index < 0 then
    ShowMessage('Der Autor konnte nicht gefunden werden.');
end;
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Teilstring suchen

  Alt 17. Apr 2008, 19:37
Das mit dem Break finde ich nicht so ideal. Was machst Du, wenn der in der Liste ein Autor mehrmals vertreten ist?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Teilstring suchen

  Alt 17. Apr 2008, 19:40
Noch ein Vorschlag:
Delphi-Quellcode:
function SearchSubString(const s, //gesuchter String
                         Sep: string; //Trennstring
                         const sList: TStrings //Liste
                         ): integer; //gefundene Position in der Liste
var found: Boolean;
    i: integer;
begin
  found := false;
  Result := -1;
  i := 0;
  while (i < sList.Count) and not found do
    begin
      if Copy(sList[i],1,Pos(Sep,sList[i]) - 1) = s then
        begin
          Result := i;
          found := true;
        end
      else
        inc(i);
    end;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Teilstring suchen

  Alt 17. Apr 2008, 19:48
Du hast das gleiche Problem, wenn sich mehrere Autoren finden. Das ganze ein bisschen erweitert:

Delphi-Quellcode:
function SearchSubString(const s, //gesuchter String
                         Sep: string; //Trennstring
                         const sList: TStrings //Liste
                         ): String; //Kommatext mit den gefundenen Items
var
  i, max: integer;
  ResTmp, ItemStr: String;
begin
  i := 0;
  ResTmp := '';
  max := sList.Count;
  while (i < max) do
  begin
    ItemStr := sList[I];
    ItemStr := Copy(ItemStr, 1, Pos(Sep, ItemStr));
    if Pos(s, ItemStr) > 0 then
    begin
      ResTmp := ResTmp + IntToStr(I) + ',';
    end;

    inc(i);
  end;

  Result := Copy(ResTmp, 1, Length(ResTmp) - 1);
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Teilstring suchen

  Alt 17. Apr 2008, 19:58
Dann eben so:
Delphi-Quellcode:
type DynArr = array of integer;

procedure SearchSubString(const s, //gesuchter String
                          Sep: string; //Trennstring
                          const sList: TStrings; //Liste
                          var ResultArr: DynArr); //dynamisches Array nimmt Trefferpositionen auf
var i: integer;
begin
  SetLength(ResultArr,0);
  i := 0;
  while (i < sList.Count) do
    begin
      if Copy(sList[i],1,Pos(Sep,sList[i]) - 1) = s then
        begin
          SetLength(ResultArr,Length(ResultArr) + 1);
          ResultArr[High(ResultArr)] := i;
        end;
      inc(i);
    end;
end;
[edit] Achja:if Pos(s, ItemStr) > 0 then findet den Suchstring auch mittendrin, ob das so gewollt ist? [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Teilstring suchen

  Alt 17. Apr 2008, 20:04
Und das ganze noch ein bisschen verbessert, da bei Detlefs Lösung nur exakte Strings gefunden werden:

Delphi-Quellcode:
type TDynIntArray = array of Integer;

procedure SearchSubString(const s, //gesuchter String
                         Sep: string; //Trennstring
                         const sList: TStrings; //Liste
                         var ResultArr: TDynIntArray); // Trefferpositionen
var
  i, max: integer;
  ItemStr: String;
begin
  i := 0;
  max := sList.Count;
  SetLength(ResultArr, 0);
  while (i < max) do
  begin
    ItemStr := sList[I];
    ItemStr := Copy(ItemStr, 1, Pos(Sep, ItemStr));

    if Pos(s, ItemStr) > 0 then
    begin
      SetLength(ResultArr, Length(ResultArr) + 1);
      Resultarr[High(ResultArr)] := I;
    end;

    inc(i);
  end;
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 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