TStrings

14 отговора 370 прегледа
#1

TStrings

Kazete mi nqkakva funkcija za tyrsene v Tstrings, IndexOf ne mi vyrshi rabota, poneze tyrsi syvpadenie na cjal string (Strings[n]) ot spisyka?
Ako mozete da mi kazete i funkcii za kopirane na chast ot edin ansi string v drug ( primerno pyrvite 3 simvola, mislq che imashe gotovi takiva funkcii, no v helpa ne otkrih podobno neshto pone za ansi string), shte sym Vi mnogo blagodaren.
Blagodarq predvaritelno.

Отговор
в отговор на |ma3x|Virus #2

Re: TStrings

1. i:=StrPos(Strings.Text,"some text"); //moje i da sam obalkal ne6to , no pone 6te te naso4i :)

2. Proveri li AnsiStrCopy mai be6e //v helpa na search pi6i ansi i 6te vidi6.
Ili pak StrCopy

Отговор
в отговор на mf2hd #3

Re: TStrings

1. i:=StrPos(Strings.Text,"some text"); bi sle dwalo da byde
1. i:=StrPos("some text",Strings.Text); //interesnoto e sled towa kak sha poznaesh w koj red e...
2. kwo ne mu hareswate na s123:=copy(s,1,3);

------------------------------
I got a COMPILER, and I'm not afraid to use it!
Отговор
в отговор на SDR #4

Re: TStrings

Mда, за това не бях помислил как ще открия в кой ред се намира.
Освен да прилагам StrPos за всеки String от ТStrings поотделно!?

Отговор
в отговор на SDR #5

Re: TStrings

1. Ami moje i da ne mu trqbva reda, a samo da proveri dali go ima. A ako mu trqbva i red , bez cikal mai nema da mine. Interesno e vse pak , dali nqma funkciq koqto da go pravi tozi nomer - ot poziciq v Text kam nomer na red? Nqmam help v momenta i nemoga da proverq.

2. Ami nqkak si e mnogo kratko :))))))

Отговор
в отговор на |ma3x|Virus #6

Re: TStrings

Абе забравих и да уточня.
Всъщност съвпадението трябва да ми е винаги в началото на всеки от стринговете.
Ако това ще помогне повече!

Отговор
в отговор на |ma3x|Virus #7

Re: TStrings

Ami vij sega dokolkoto ti shvanah problema nai lesno 6te stane mai taka :


var i:integer;
substr:string;
sl:TStringList;
begin
//priemame 4e sl e sazdaden i popalnen
for i := 0 to sl -1 do
if substr = Copy(sl,1,length(substr)) then edi_kakvo_si;
//ili pak
if StrPos(substr,sl) = 1 then edi_kakvo_si;
end;

Отговор
#8

Re: TStrings

Благодаря за всички отговори. Получената информация беше много ценна за мен!

Отговор
в отговор на |ma3x|Virus #9

Re: TStrings

sled prochitaneto na pochti vs msg po tazi tema rechih i az da picha ...
1/ text e mnogo bavno property ... po dobre da se pravi tzikul ..
2/ na nekolko mesta vidiah da polzvate copy(source,desc,count) tova che raboti za 1 byte charset ama ako e 2 ?


tui che pravete for .... i tn :))))))))

Отговор
в отговор на tdg #10

Re: TStrings

TStrings ne poddurja WideChar, taka che vinagi e 1 byte

Отговор
в отговор на andrew_nikoloff #11

Re: TStrings

ok :)))) a drugite mi zabelejki????

nay ludo zvucheche tova za broene na cr/lf v text :)))))))))))))))

Отговор
в отговор на tdg #12

Re: TStrings

E sega , ludo , celta na foruma spored men vse pak e da se obsadi dadena ideq ot vsi4ki strani, i da se vzeme , nai pravilnoto re6enie, koeto si zavisi ot problema.
Kakto sa kazali orata :) "V spora se rajda istinata".

Отговор
в отговор на mf2hd #13

Re: TStrings

tui de !!!!
tov ai kazvam ..
TSTRINGS si e prosto array ot pointers ( koito e gledal coda na vcl znae) ...
ta e mnoo po lesno v loop da gledach za daden sts v drug ot kolkoto da "karach" vseki put vcl da ti "lepi" edin za drug vs strings ot objecta ... i pamet po malko i vreme .. puk i stsrpos si vurchi idealna rabota ....

Отговор
в отговор на mf2hd #14

Re: TStrings

Второто е поне 10 пъти по-бързо :)

Отговор
в отговор на tdg #15

Re: TStrings

ne sam chak tolkowa maloumen wse pak :)
ideqta beshe

var
s:String;
x,l:integer
line:integer;
c:char;
st:char;
plen,slen:integer;
midx:integer;
pi:integer;
lo:integer;
begin
result:='Not found!';
line:=0;lo:=0;
if (pattern='') or (s='') then exit;
st:=pattern[1];
s:=strlst.text;
plen:=length(pattern);
slen:=length(s);
x:=1;
midx:=1+slen-plen;
while (x<midx) do begin
c:=s[x];
if c=#13 then begin
inc (line);
lo:=x;//twa e malko sporen moment..
end;
if c=st then begin
l:=x+plen-1;pi:=2;
while (pi<l) do if s[x+pi]=pattaern[pi] then inc (pi) else break;
if not (ip<i) then begin
result:='Found at line '+inttostr(line)+' at lineoffset '+inttostr (x-lo);
break;
end;
end;
inc (x);
end;
end;


p.s twa go pisah na "prima vista" direktno w brawsera za towa se izwinqwam za sintaktichnite greshki ne sam go testwal ama ideqta bi trqbwalo da raboti. ako nqkoj moje da go naprawi s defakto po-malko cikli/obrashteniq kam pameta neka da postne da widim

------------------------------
I got a COMPILER, and I'm not afraid to use it!
Отговор