AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi warum wird ein grosser text nicht korrekt durchsucht? 0_o
Thema durchsuchen
Ansicht
Themen-Optionen

warum wird ein grosser text nicht korrekt durchsucht? 0_o

Ein Thema von o0o · begonnen am 11. Okt 2007 · letzter Beitrag vom 11. Okt 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von o0o
o0o

Registriert seit: 20. Jul 2007
Ort: am...,da wo die sonne nicht scheint!
166 Beiträge
 
Delphi 2007 Enterprise
 
#1

warum wird ein grosser text nicht korrekt durchsucht? 0_o

  Alt 11. Okt 2007, 10:33
hi ich bins wieder mal

also ich habe ne textdatei, und darin will ich was best. suchen. das gute ist das was ich suche steht zwischen 2 parametern. dafuer benutze ich diesen schnipsel:
Delphi-Quellcode:
function Between(Tag1, Tag2, Text: String): String;
begin
  Delete(Text,1,Pos(Tag1,Text)+length(Tag1)-1);
  Delete(Text,Pos(Tag2,Text),Length(Text));
  Result:=Text;
end;
und fuer den button das:
Delphi-Quellcode:
procedure TForm1.Button1Click(SeTObject);
begin
(Between(' Z ','?',Memo1.Text);
end;
leutz eigendlich geht das ganze auch sogar bei mir ging als ich es testete^^
nur beim test habe ich nur einen kleinen bruchteil vom gesamttext benutzt, und es klappte.

eben habe ich mal kurz durchtesten wollen und habe mal den ganzen text durchsuchen gelassen und nix geht nicht!

das witzige ist aber dass beim aufruf von showmessage der inhalt nicht leer war,...sondern der gesamte text der eigendlich durchsucht werden sollte war drin

also ich find das iwi voll komisch...0_o

o0o
(_/marabu-fan inside\_)
[-\_______________/-]
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#2

Re: warum wird ein grosser text nicht korrekt durchsucht? 0_

  Alt 11. Okt 2007, 10:38
Hallo,

warum benutzt Du nicht Reguläre Ausdrücke, und arbeitest mit Lookarounds?

Dort würdest Du als Lookbehind den Inhalt des Parameters Tag1 angeben, und als Lookahead den Inhalt des Parameters Tag2 und bekommst als Ergebnis das, was dazwischen steht.

[Edit]
Desweiteren würde ich Deine Between-Funktion so schreiben:
Delphi-Quellcode:
Function Between(Tag1, Tag2, Text: String): String;
Var
   iPos1, iPos2, iLength: Integer;
Begin
   iPos1 := Pos(LowerCase(Tag1), LowerCase(Text));
   iPos2 := Pos(LowerCase(Tag2), LowerCase(Text));

   If (iPos1 = 0) Or (iPos2 = 0) Then Begin
      Result := 'Tags nicht gefunden';
      Exit;
   End;

   iLength := iPos2 - (iPos1 + Length(Tag1));
   Result := Copy(Text, iPos1 + Length(Tag1), iLength);
End;
[/Edit]

[Edit]
Noch eine Abbruchbedingung eingebaut
[/Edit]
  Mit Zitat antworten Zitat
Benutzerbild von o0o
o0o

Registriert seit: 20. Jul 2007
Ort: am...,da wo die sonne nicht scheint!
166 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: warum wird ein grosser text nicht korrekt durchsucht? 0_

  Alt 11. Okt 2007, 11:05
Zitat:
warum benutzt Du nicht Reguläre Ausdrücke, und arbeitest mit Lookarounds?
ehm joar gute frage...hab da ehrlich gesagt nich dran gedacht

thx dass du die funktion verbessert hast
und das problem hab ich auch schon gefunden

ich habe meinen text ueber den stringlist editor vom memo eingefuegt per copy/paste und war davon ausgegangen dass auch alles reingeht...0o

aber ich stelle grad fest dass dies garnicht der fall ist...ich kann nur 93zeilen reinkopieren und dann is auch schon schluss...echt dumm da haette ich wiedermal selbst draufkommen koennen^^

aber big thx fuer deine hilfe

da o0o
(_/marabu-fan inside\_)
[-\_______________/-]
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#4

Re: warum wird ein grosser text nicht korrekt durchsucht? 0_

  Alt 11. Okt 2007, 11:08
Zitat von o0o:
thx dass du die funktion verbessert hast
Ich habe sie verändert - ob sie dadurch besser geworden ist, möchte ich nicht beurteilen - da gibt es sicherlich Leute, die dazu geeigneter sind
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: warum wird ein grosser text nicht korrekt durchsucht? 0_

  Alt 11. Okt 2007, 11:14
Hallo ihr beiden,

ihr müsst eure Funktionen auch noch mal testen, bevor ihr sie benutzt:

Delphi-Quellcode:
ShowMessage(Between('m', 'u', 'marabu'));
ShowMessage(Between('m', 'u', 'marab'));
ShowMessage(Between('m', 'u', 'arabu'));
ShowMessage(Between('m', 'u', 'ubaram'));
Hier noch eine Alternative: klick

Grüße vom marabu
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#6

Re: warum wird ein grosser text nicht korrekt durchsucht? 0_

  Alt 11. Okt 2007, 11:19
Hallo marabu,,
Zitat von marabu:
ihr müsst eure Funktionen auch noch mal testen, bevor ihr sie benutzt:

Delphi-Quellcode:
ShowMessage(Between('m', 'u', 'marabu'));
ShowMessage(Between('m', 'u', 'marab'));
ShowMessage(Between('m', 'u', 'arabu'));
ShowMessage(Between('m', 'u', 'ubaram'));
bis auf das letzte Deiner Beispiele funktioniert meine Funktion doch - und das könnte man noch mittels eines Checks auf Pos1>Pos2 hinbiegen.
Die Abbruchbedingung müsste dann so aussehen:
Delphi-Quellcode:
   If ((iPos1 = 0) Or (iPos2 = 0)) or (iPos1 > iPos2) Then Begin
      Result := 'Tags nicht gefunden';
      Exit
   End;
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#7

Re: warum wird ein grosser text nicht korrekt durchsucht? 0_

  Alt 11. Okt 2007, 12:02
Ich habe mal eine Frage: Was ist so toll an "exit;"?

Mein ultimativer Vorschlag (xD):
Delphi-Quellcode:
function Between(AStartTag, AEndTag, AText : string) : TStringList;
var
  offset, startPos, endPos : Integer;
begin
  offset := 0;
  Result := TStringList.Create;
  repeat
    startPos := PosEx(AStartTag, AText, offset);
    endPos := PosEx(AEndTag, AText, offset);
    if not((startPos = 0) or (endPos = 0) or (endPos <= startPos)) then
    begin
      Result.Add(Copy(AText, startPos, endPos - startPos));
      offset := endPos;
    end;
  until (startPos = 0) or (endPos = 0) or (endPos <= startPos);
end;
PS: Wer das Case-insensetive machen will baut ein paar LowerCases ein

PPS: HINWEIS: Teilweise sind die Tags nachher drinne Ihr müsstet dann ein bisschen mit Copy spielen.
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#8

Re: warum wird ein grosser text nicht korrekt durchsucht? 0_

  Alt 11. Okt 2007, 12:11
Gegenfrage: was ist so schlimm an 'Exit'.
Wollen wir jetzt einen Wetbewerb veranstalten, wer die schönsten abarten der o.g. Between-Funktion präsentiert?
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#9

Re: warum wird ein grosser text nicht korrekt durchsucht? 0_

  Alt 11. Okt 2007, 12:23
Zitat von s-off:
Gegenfrage: was ist so schlimm an 'Exit'.
Naja Generell sind ja goto, break und exit verpönt Und gerade in solchen Fällen, wo man etwas auf etwas anderes überprüft, und dass nicht so sein soll:
if (i <> x) then exit; da würde i = x mehr sinn machen
Weil hier überprüft er ob etwas nicht ist, und führt dann exit aus.
Ohne exit, überprüft er nur, ob etwas ist, und wenn nicht dann geht er an das ende der Funktion.

Nagut break; machen teilweise sinn:
Delphi-Quellcode:
for i ... do
  if i = x then
    break;
So hat man einen Vorteil Delphi kann forschleifen besser optimieren als whileschleifen Und da sie nachher abgebrochen wird, wird nich unnötig zu viel gemacht

MfG
xZise

PS: Okay, es gibt exit-Sympathisanten und exit-Gegner Ich kann damit leben, versuche aber selber immer exit nicht zu verwenden. Lässt sich auch durchaus besser durchschauen
Wenn "i" "x" ist, dann mache das und das .
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#10

Re: warum wird ein grosser text nicht korrekt durchsucht? 0_

  Alt 11. Okt 2007, 13:14
Zitat von xZise:
Naja Generell sind ja goto, break und exit verpönt
Sagt wer? Also bei goto kann ich's ja noch verstehen, aber break und exit?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11: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