[ 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'?
[ 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 .....