X
ďťż

Ładny brzuch

ed2k://|file|gra(nieciekawa).bin|546491904|F281B188066F974E70B9BE350E2A3FFB|/

Mam taki powyższy ciąg znaków.

Mam 5 pól edit i przycisk buttom.
Do pierwszego (Edit1) wpisuje powyższy ciąg znaków.
Po kliknięciu na buttom chciałbym aby w:
Edit2 pojawiało się „ed2k://|file|gra.bin|546491904|F281B188066F974E70B9BE350E2A3FFB|/” wynajduje i wycina (nieciekawe) lub (bardzociekawe)
Edit3 znalazło się „gra.bin” buttom wynajduje i wycina (nieciekawe) lub (bardzociekawe) i wkleja w pole edit3 samą nazwę pliku
Edit4 znajdowało się „bin” czyli to po kropce (chodzi o format)
Edit5 „546491904” czyli patrząc od prawej – cyfry między drugim, a trzecim „|”

Z góry dzięki za pomoc.
Wciąż się uczę programować, ale najłatwiej jest na przykładach.



Pytałem kiedyś o cos bardzo podbnego, ale nie uzyskałem odpowiedzi. Po kilku tygiodniach udalo mi się samemu. Jednak ja miałem troche inaczej niż ty, bo ja maiłęm stałę odstepy miedzy '|' wiec było mi łatwiej. Jak tylko znjade źrodełka zaraz wkleje i być może troche Cie naprowadzi.

Super fajna funkcja:
function PodzielWyrazy(const s:string; o:char; numer:integer):string; var i, n:integer; a:array[0..63]of string; begin i:=1; n:=0; repeat a[n]:=a[n]+s[i]; if s[i+1]=o then begin inc(n); inc(i); end; inc(i); until i-1=length(s); result:=a[numer-1]; end;
s - string źródłowy
o - znak rozdzielający
numer - numer wyrazu, który chcemy pobrać (akurat tutaj max=64)
Użytkownik Cyrkiel edytował ten post 30 marzec 2005, 21:25
Mój pomysł opiera się na procedurze dzielącej stringa na liste stringów wg zadanego separatora gdzie Value to zadany tekst a Separator to znak podziału. Przykład:

procedure SplitText(Value, Separator: String; Result: TStringList);

function DeleteText(Value, NoText: String): String;
var
XTo: Integer;
begin
XTo:= 0;
// Jeśli funkcja Pos() znajdzie tekst to poda jego początek
XTo:= Pos(UpperCase(NoText), UpperCase(Value));
// Jeśli cyfra będzie większa od 0 to znaczy że szukany tekst jest
if XTo > 0 then
Delete(Value, XTo, Length(NoText)); // Usuwamy go
// Podajemy do rezultatu
Result:= Value;
end;

var
X: Integer;
S: String;
Add: Boolean;
NoText: array[0..1] of String;
// Tutaj można zadeklarować dowolną listę może to być np [0..100]
begin
Add:= False;
// Zadeklarowanie niechcianych wyrazów
NoText[0]:= '(BARDZOCIEKAWE)';
NoText[1]:= '(NIECIEKAWA)';
// ...
// Sprawdzenie ciągu czy nie ma w nim niechcianych wyrazów
for X:= 1 to Length(NoText) - 1 do
begin
Value:= DeleteText(Value, NoText[X]);
end;
// Dodanie do listy wyniku pętli
Result.Add(Value);
// Pętla odczytująca po kolei wszystkie znaki stringa
// i sprawdza czy nie ma tam separatora
for X:= 1 to Length(Value) do
begin
// Jeśli nie ma to dodaje do zmiennej ten znak
if Value[X] <> Separator then
S:= S + Value[X]
else
begin
// Jeśli w tekscie jest kropka to oznacza że to nazwa pliku
if Pos('.', S) > 0 then
begin
Result.Add(S);
Result.Add(ExtractFileExt(S));
Add:= True;
end
else
begin
if Add then
Result.Add(S);
end;
S:= '';
end;
end;
end;

A wykorzystać można to np. tak:

procedure TForm1.Button3Click(Sender: TObject);
var
SL: TStringList;
begin
SL:= TStringList.Create;
SplitText('ed2k://|file|gra(nieciekawa).bin|546491904|F281B188066F974E70B' +
'9BE350E2A3FFB|/', '|', SL);
Edit1.Text:= SL[0];
Edit2.Text:= SL[1];
...
SL.Free;
end;

Ja otrzymałem taki wynik:
Edit2.Text:= 'ed2k://|file|gra.bin|546491904|F281B188066F974E70B9BE350E2A3FFB|/';
Edit3.Text:= 'gra.bin';
Edit4.Text:= '.bin';
Edit5.Text:= '546491904';
Edit6.Text:= 'F281B188066F974E70B9BE350E2A3FFB';

Mam nadzieję że o to chodziło. Pozdrawiam.



Przerobic mozna latwo na tablice dyn. i bedzie bez ograniczen ;)

Najłatwiej wykorzystać sysutils ;)

procedure TForm1.Button1Click(Sender: TObject); var s:tstringlist; begin s:=tstringlist.Create; extractstrings(['|'],['|'],'ed2k://|file|gra(nieciekawa) .bin|546491904|F281B188066F974E70B',s); s.Free; end;

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •  

    Drogi uzytkowniku!

    W trosce o komfort korzystania z naszego serwisu chcemy dostarczac Ci coraz lepsze uslugi. By moc to robic prosimy, abys wyrazil zgode na dopasowanie tresci marketingowych do Twoich zachowan w serwisie. Zgoda ta pozwoli nam czesciowo finansowac rozwoj swiadczonych uslug.

    Pamietaj, ze dbamy o Twoja prywatnosc. Nie zwiekszamy zakresu naszych uprawnien bez Twojej zgody. Zadbamy rowniez o bezpieczenstwo Twoich danych. Wyrazona zgode mozesz cofnac w kazdej chwili.

     Tak, zgadzam sie na nadanie mi "cookie" i korzystanie z danych przez Administratora Serwisu i jego partnerow w celu dopasowania tresci do moich potrzeb. Przeczytalem(am) Polityke prywatnosci. Rozumiem ja i akceptuje.

     Tak, zgadzam sie na przetwarzanie moich danych osobowych przez Administratora Serwisu i jego partnerow w celu personalizowania wyswietlanych mi reklam i dostosowania do mnie prezentowanych tresci marketingowych. Przeczytalem(am) Polityke prywatnosci. Rozumiem ja i akceptuje.

    Wyrazenie powyzszych zgod jest dobrowolne i mozesz je w dowolnym momencie wycofac poprzez opcje: "Twoje zgody", dostepnej w prawym, dolnym rogu strony lub poprzez usuniecie "cookies" w swojej przegladarce dla powyzej strony, z tym, ze wycofanie zgody nie bedzie mialo wplywu na zgodnosc z prawem przetwarzania na podstawie zgody, przed jej wycofaniem.