Avatar billede cr2000 Nybegynder
04. november 2003 - 13:15 Der er 13 kommentarer og
1 løsning

Speciel pos funktion. Baglens søgning med position.

Jeg sad og skulle udtænke en funktion til at gøre følgende men så gik jeg kold.

Den skal kunne finde den substreng som er tættest på position i den givne streng.

Altså f.eks:
function Posleft(Substr: string; S: string; position: interger): Integer;

F.eks

var
Streng1 : String;
Index : Integer;
Begin
Streng1 := '<form name="lort"><input type="hidden" name="test1" value="blah"><input type="hidden" name="test2" value="blah"></form>';

Index := Pos2('<',Streng1,pos('"test2"',Streng1));

end;

Og så skulle index være 66.

Pos3 funktionen kunne så være den der laver søgningen fremad men stadig med position. (Kan jeg måske nok finde ud af at lave selv)

Håber i forstår hvad jeg mener.
Avatar billede cr2000 Nybegynder
04. november 2003 - 13:19 #1
Hvis det kan fikses ville det være kanon hvis den ikke var case sensative...
Avatar billede borrisholt Novice
04. november 2003 - 13:29 #2
Altså du vil have en ALM pos. Der kan starte ved et givent INDEX, og som er Case-Insensetive ?

Jens B
Avatar billede cr2000 Nybegynder
04. november 2003 - 13:32 #3
Jens:
Ja... Og så skal jeg også bruge en der søger baglens.
Avatar billede borrisholt Novice
04. november 2003 - 14:07 #4
Her er den første :
function HestePos(const SubStr, Str : String; StartIndex : Integer) : Integer;
var
  p, q  : pChar;
begin
  Result := 0;
  if StartIndex > Length(Str) then
    exit;

  p := @Str[StartIndex];
  q := StrPos(p, Pointer(SubStr));

  if q <> nil then
    Result := integer(q) - integer(p) + StartIndex;
end;
Avatar billede cr2000 Nybegynder
04. november 2003 - 14:12 #5
Hvad er der med dig og heste?
Avatar billede borrisholt Novice
04. november 2003 - 14:15 #6
Også den her :

function BackSearch(const SubStr, Str : String; StartIndex : Integer) : Integer;
var
  Found : Boolean;
begin
  Result := 0;
  if StartIndex > Length(Str) - Length(SubStr) then
    exit;
  Result := Length(Str) - Length(SubStr);
  Found := False;

  while (not Found) and (Result > 1) do
  begin
    Found := Copy(Str, Result, Length(SubStr)) = SubStr;
    dec(Result);
  end;
end;


Jens B & Hest !
Avatar billede borrisholt Novice
04. november 2003 - 14:16 #7
Hest er et dejligt ord. Og det smitter ... Jeg har lært en masse her inde på exp at skrive HEST !

Jens B
Avatar billede cr2000 Nybegynder
04. november 2003 - 14:56 #8
Jamen tak for hjælpen... og hest!
Avatar billede cr2000 Nybegynder
04. november 2003 - 15:12 #9
Jeg kan godt nok ikke lige få den til at virke som jeg vil lige nu.

Men mon ikke jeg finder ud af det.
Avatar billede cr2000 Nybegynder
04. november 2003 - 15:16 #10
Hvis vi nu tar denne streng:
<form name="lort"><input type="hidden" name="timeout" value="600000"></form>

Jeg sætter positionen til 46
Så siger backsearch at den nærmeste '<' ligger på position 69 men den ligger jo på position 18 eller 19 ik?
Og forwardsearch siger også at den nærmeste '>' ligger på 69 ???
Avatar billede athlon-pascal Juniormester
04. november 2003 - 16:49 #11
"Pos3 funktionen kunne så være den der laver søgningen fremad men stadig med position. (Kan jeg måske nok finde ud af at lave selv)"
Kig på PosEx (er i hvert fald med i Delphi 7) :-)
Avatar billede razersedge Nybegynder
04. november 2003 - 17:13 #12
Forstår ikke helt hvad du mener med at søge baglæns. Men hvis du vil finde den sidste match af en substring i en string kan du bruge LastDelimiter.
Avatar billede cr2000 Nybegynder
04. november 2003 - 23:48 #13
Jeg kan ikke finde den der PosEX nogen steder...
Avatar billede borrisholt Novice
05. november 2003 - 08:51 #14
function BackSearch(const SubStr, Str : String; StartIndex : Integer) : Integer;
var
  Found : Boolean;
begin
  Result := 0;
  if StartIndex > Length(Str) - Length(SubStr) then
    exit;
  Result := Length(Str) - StartIndex;
  Found := False;

  while (not Found) and (Result > 1) do
  begin
    Found := Copy(Str, Result, Length(SubStr)) = SubStr;
    dec(Result);
  end;
end;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester