Avatar billede puddelundercover Nybegynder
17. juli 2003 - 16:18 Der er 5 kommentarer og
1 løsning

Drag'n'drop og reg exp

Hejsa,

Mit lille mysterium går ud på, at jeg vil trække et link (almindeligt tekst-link) fra IE over i et edit-felt i min applikation...

Jeg skal dog ikke bruge hele linket, kun ID-nummeret:
http://www.blabla.com/index.asp?var1=bla&ID=1234&var2=bla

Er der nogen som ka fremtrylle et lille kodeeksempel på dette? *S*

Mvh
Puddel
Avatar billede cautoo Nybegynder
17. juli 2003 - 19:27 #1
Et drag and drop component kan du finde her: http://www.torry.net/draganddrop.htm

og en funktion til at hive ID ud fra en url kan laves med funktionerne copy, length og pos

function Pos(Substr: string; S: string): Integer;
function Copy(S; Index, Count: Integer): string;
function Length(S): Integer;

en komplet funktion kunne være:
function hentID(tekst: String) : String;
var
  s: String;
  I: Integer;
begin
  s := tekst;
  i := pos('?', s);
  if i < 0 then
  exit;
  s := copy(s, i+1, length(s));
  if ((s[1] = 'I') and (s[2] = 'D') and (s[3] = '=')) then
  begin
    s := copy(s, 4, length(s));
  end
  else
  begin
    i := pos('&ID=', s);
    if i < 0 then
    exit;
    s := copy(s, i+4, length(s));
  end;
  i := pos('&', s);
  if i < 0 then
  result := s;
  result := copy(s, 0, i-1);
end;
Avatar billede nop Nybegynder
18. juli 2003 - 10:58 #2
Følgende er en smart funktion som ville forkorte cautoo's løsning en smule.
Bemærk iøvrigt at hvis "test.asp?" benyttes så giver cautoo's fejl, han skulle nok prøve: if copy(s,i+1,3)='ID=' then ...., fordi copy ikke giver fejl ved kortere streng end man prøver at klippe ud.

function inString(const subStr: string; const str: string; start: integer): integer;
//returnerer index på substr i str, men starter fra start i str.
//hvis ikke fundet, eller start er størrer end længden på str, returneres 0.
begin
  if start <= length(str) then
    result:=pos(subStr,copy(str,start,length(str)-start+1))
  else
    result:=0;
end; //inString
Avatar billede nop Nybegynder
18. juli 2003 - 11:08 #3
..og copy kan også klippe "uden" for stengen, resultat er en tom streng, selvom rangecheckking er slået til gives ikke fejl.
Ved brug af index: str[1000] fx, så vil der ikke blive checkket om index er udenfor strengen, medmindre man har slået rangecheck på. Så der returneres tegnet fra ram på adressen (tilfældigt) eller gives access-violations fejl (hvis udenfor programmets allokerede hukommelse).
Avatar billede nop Nybegynder
18. juli 2003 - 11:44 #4
Ups.. der skal stå:
result:=pos(subStr,copy(str,start,length(str)-start+1))+start-1

Fejlen er rettet !
Avatar billede nop Nybegynder
18. juli 2003 - 12:05 #5
OK jeg prøver igen, der var stadig en fejl i inString, for at råde bod på fejlen så lavede jeg en generel funktion til at finde værdien for et parameter i en url. Man bruger den sådan her:
  val:=getParam('test.asp?a=&b=123&d=','b'); //returnerer strengen '123'
Den er testet så alt skulle være i orden, osse med tomme strenge, sidste i listen, først i listen osv.

function inString(const subStr: string; const str: string; start: integer): integer;
//returnerer index på substr i str, men starter fra start i str.
//hvis ikke fundet, eller start er størrer end længden på str, returneres 0.
begin
  if start <= length(str) then begin
    result:=pos(subStr,copy(str,start,length(str)-start+1));
    if result<>0 then result:=result+start-1;
  end else
    result:=0;
end; //inString


function getParam(const url,param: string): string;
//returnerer parameter med navn <param> i url'en.
//der skelnes ikke mellem store og små bogstaver i navnet.
//hvis navnet ikke findes returneres en tom streng.
var
  i,j:    integer;
  lu,lp:  string;
begin
  result:='';
  lu:=lowercase(url); lp:=lowercase(param);
  i:=pos('?',lu);
  if i=0 then exit;
  if copy(lu,i+1,length(lp)+1)=lp+'=' then
    i:=i+length(lp)+2
  else begin
    i:=inString('&'+lp+'=',lu,i+1);
    if i=0 then exit;
    i:=i++length(lp)+2;
    if i>length(lu) then exit;
  end;
  j:=inString('&',lu,i);
  if j=0 then j:=length(lu)+1;
  result:=copy(url,i,j-i);
end; //get param
Avatar billede puddelundercover Nybegynder
18. juli 2003 - 13:17 #6
Tak skal I ha, det var bare super duper det jeg ledte efter :-D
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