Formatowanie łańcucha tekstu

0

Jak napisać procedurę [???] która z łańcucha tekstowego np.
'abcde;C:\Program Files\program\sss.exe;gghghh' wydobędzie ścieżkę do pliku

Działanie funkcji:

  1. Najpierw funkcja znajduje :\
  2. Potem idzie do przodu od :\ aż znajdzie niedozwolony znak lub idzie do przodu o jeden znak (literę dysku) (dozwolone znaki to 'a'..'z','A'..'Z','0'..'9',' ','','-','_','.','(',')','[',']','~')
  3. Potem idzie do tyłu aż znajdzie niedozwolony znak
  4. Gdy na końcu wyciągniętej ścieżki będzie spacja to ją usuwa
  5. Gdy na końcu wyciągniętej ścieżki będą dwa znaki \ to jeden z nich usuwa

Próbowałem już to pisać na wszystkie sposoby ale jakoś mi nie wychodziło :(

Oto przykład mojej procedury niestety nie działa poprawnie :(

procedure TForm1.Button1Click(Sender: TObject);
var
A:String;
Start,Koniec:integer;
begin
A:='abcde;C:\Program Files\program\sss.exe;gghghh';
  Koniec := Pos(':\', A);
  Start := Koniec;
   if Koniec > 0 then
  begin
    repeat
      Dec(Start);
    until (not (A[Start] in ['a'..'z','A'..'Z','0'..'9',' ','\','-','_','.',':','&','(',')','[',']']));
   A := Copy(A, Koniec-1, Koniec+Start);
   end;
   Showmessage(A);
   end;

Z góry dziękuję za pomoc :)

0

FileSplit

0

Ma ktoś może jakiś inny pomysł. Bo powyższego niewiem jak użyć nawet w helpie nic o tym NIE MA :(

0

Nie czekałbym na gotowca. Rozpisałeś sobei algorytm, to teraz zrób po kolei procedury (lub w jednej sobei pooddzielaj) i sprawdzaj co amsz i gdzie w pliku na przykładach. Podzieliłeś zadanei na probelmy łatwe w implementacji - teraz tylko siąść i pisać. Jak nie wiesz jak łatwiej to zawsze możesz używać
for i:=1 to length(napis) do
begin
znak:=napis[i];
if znak ..... else .......
end;

0

A takie prościutkie (choc prymitywne rozwiązanie):

1.ustalasz położenia znaków ";" w łańcuchu
2.usuwasz z niego wszystko aż do opierwszego ";" i wszystko, co następuje po drugim znaku ";" -> otrzymałes ścieżkę do pliku wraz nazwą tego pliku.
3. usuwasz "od tyłu" wszystko aż do znaku "/" (wraz z nim) i KONIEC.

PS. Zamiast usuwać, możesz przepisywać do drugiego łańcucha

0

Można po prostu użyć procedury Split (podzieli stringa wedle zadanych znaków stopu), potem Trim (usunie spacje na początku i końcu stringa) na koniec tylko sprawdzić czy nie ma dodatkowego "/".

Po co wyważać otwarte drzwi?

1 użytkowników online, w tym zalogowanych: 0, gości: 1