Avatar billede gravbamzula Nybegynder
29. december 2002 - 20:15 Der er 14 kommentarer og
2 løsninger

Ang. strings

Jeg har en string der indeholder en fil sti f.eks "c:\test\test1\test2" mit program skal så kunne gå baglæns til nummer 2 "\" og slætte alt foran det, således at der kommer til at stå: "test1\test2"¨

På forhånd tak...
Avatar billede dkn Nybegynder
29. december 2002 - 20:23 #1
st:String;
begin
st := 'c:\test\test1\test2';
st := copy(st, pos('\', st)+1, length(st));
st := copy(st, pos('\', st)+1, length(st));
showmessage(st);

den er ikke testet
Avatar billede dkn Nybegynder
29. december 2002 - 20:26 #2
nej hov...
Const
folder = 'c:\test\test1\test2';
st:String;
begin
st := copy(folder, 1, lastdelimiter(folder, '\')-1);
st := copy(st, 1, lastdelimiter(st, '\')-1);
st := copy(folder, length(st), length(folder));
showmessage(st);

sådan
Avatar billede arne_v Ekspert
29. december 2002 - 20:26 #3
function prefixstrip(s : string) : string;

var
  temp : string;
  i, count : integer;

begin
  temp := '';
  count := 0;
  for i := 1 to length(s) do begin
      if count >= 2 then temp := temp + s[i];
      if s[i] = '\' then count := count + 1;
  end;
  prefixstrip := temp;
end;
Avatar billede dkn Nybegynder
29. december 2002 - 20:31 #4
ok ikke hel på toppen idag....

procedure TForm1.Button1Click(Sender: TObject);
Const
folder = 'c:\test\test1\test2';
var
st:String;
begin
st := copy(folder, 1, lastdelimiter('\', folder)-1);
showmessage(st);
st := copy(st, 1, lastdelimiter('\', st));
showmessage(st);
st := copy(folder, length(st)+1, length(folder));
showmessage(st);
end;
Avatar billede gravbamzula Nybegynder
29. december 2002 - 20:32 #5
Det er fint nok men den skal "gå baglæns" f.eks ved: "c:\test\test1\test2" og ved "c:\test\test1\test2\test3\test4".. Skal den kun vise de to sidste biblioteker....
Avatar billede dkn Nybegynder
29. december 2002 - 20:34 #6
okay det gør den her function jo også:

function ToTilbage(folder:string):string;
var
st:String;
begin
st := copy(folder, 1, lastdelimiter('\', folder)-1);
st := copy(st, 1, lastdelimiter('\', st));
st := copy(folder, length(st)+1, length(folder));
result := st;
end;

procedure TForm1.Button1Click(Sender: TObject);
Const
mappe = 'c:\test\test1\test2\test3\test4';
begin
showmessage(ToTilbage(mappe));
end;
Avatar billede arne_v Ekspert
29. december 2002 - 20:36 #7
function prefixstrip(s : string) : string;

var
  temp : string;
  i, count : integer;

begin
  temp := '';
  count := 0;
  for i := length(s) downto 1 do begin
      if s[i] = '\' then count := count + 1;
      if count < 2 then temp := s[i] + temp;
  end;
  prefixstrip := temp;
end;
Avatar billede gravbamzula Nybegynder
29. december 2002 - 20:41 #8
Tusind tak Dkn.... Det virkede sku , jeg skulle have spurgt noget før :)
Avatar billede gravbamzula Nybegynder
29. december 2002 - 20:43 #9
--- Og til dig arne_v tak for svaret men jeg brugte Dkn's svar men du får lige en håndfuld....
Avatar billede arne_v Ekspert
29. december 2002 - 20:44 #10
Helt fint.

DKN's løsning er betydeligt hurtigere end min.

Men pas på hvis der ikke er 2 back-slashes.
Avatar billede dkn Nybegynder
29. december 2002 - 20:45 #11
selvtak jeg fik skam spammet lidt meget... :)
Avatar billede gravbamzula Nybegynder
29. december 2002 - 20:46 #12
hehe
Avatar billede dkn Nybegynder
29. december 2002 - 20:48 #13
okay sidste post fra min side....
Har tilføjet så den er ligeglad med en ekstra backslash:

function ToTilbage(folder: string): string;
var
  st: string;
begin
  if Copy(folder, Length(folder), 1) = '\' then
    folder := Copy(folder, 1, Length(folder) - 1);
  st := copy(folder, 1, lastdelimiter('\', folder) - 1);
  st := copy(st, 1, lastdelimiter('\', st));
  st := copy(folder, length(st) + 1, length(folder));
  result := st;
end;
Avatar billede gravbamzula Nybegynder
29. december 2002 - 20:59 #14
Lige en sidste ting: Hvad hvis man skal fjerne at efter det sidste punltum?
Avatar billede dkn Nybegynder
29. december 2002 - 21:02 #15
st:String;
begin
st := 'lalala.lalaal';
st := copy(st, 1, pos('.', st)-1);
Avatar billede gravbamzula Nybegynder
29. december 2002 - 21:24 #16
Tak
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