[ lan-mi @ 02.07.2009. 00:23 ] @
U StringListi su sortirani brojevi tipa word, ne veci od 500, npr 1,2,3,7,55,56,57,58,77,111,112,113,114,115,116... Kako da ih dobijem kao jedan string: '1..3,7,55..58,77,111..116'? |
[ lan-mi @ 02.07.2009. 00:23 ] @
[ gpedja_70 @ 02.07.2009. 07:34 ] @
stringLista.CommaText
pozz. [ captPicard @ 02.07.2009. 07:34 ] @
Code: for i := 0 to List.Count-1 do nekiString:=nekiString+List[i]; [ lan-mi @ 02.07.2009. 09:36 ] @
Hvala ti, znam za CommaText ali onda dobijem string 1,2,3,7,55,56,57,58,77,111,112,113,114,115,116 ali ja verovatno nisam bas objasnio dobro sta mi treba.
Dakle, ako brojevi u listi idu redom npr. 1 2 3 4 5 deo stringa bi bio '1..5,' pa sledeci brojevi 55 111 112 113 onda bi ceo string izgledao ovako:'1..5,55,111..113' itd do kraja liste. [ gpedja_70 @ 02.07.2009. 10:29 ] @
onda ovako:
Code: function MakeNiceList(lista: TStrings):string; var i: integer; tmp: string; prev: integer; begin tmp := ''; prev := 1; for i := 0 to lista.Count -1 do begin if (StrToInt(lista[i]) = prev + 1) then begin if (tmp[Length(tmp)]=',') then begin Delete(tmp, Length(tmp), 1); tmp := tmp + '.'; end; end else begin if ((Length(tmp)>0) and (tmp[Length(tmp)]='.')) then tmp := tmp + '.' + lista[i-1] + ','; tmp := tmp + lista[i]+','; end; prev := StrToInt(lista[i]); end; if ((Length(tmp)>0) and (tmp[Length(tmp)]='.')) then tmp := tmp + '.' + lista[lista.Count -1] + ','; Result := tmp; end; [ lan-mi @ 02.07.2009. 10:46 ] @
To je to i radi. Hvala puno.
[ Boris B. @ 02.07.2009. 12:30 ] @
Lepo, lepo...
Aj sad to resi sa varijabilnom vremenskom zahtevnoscu manjom od O(n), odnosno O(n) u najgorem slucaju... ![]() [ gpedja_70 @ 02.07.2009. 12:34 ] @
Citat: Boris B.: Lepo, lepo... Aj sad to resi sa varijabilnom vremenskom zahtevnoscu manjom od O(n), odnosno O(n) u najgorem slucaju... ![]() slusaj, uz koju pivu ..... ![]() Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|