Poslední příspěvky

Stran: 1 2 [3] 4 5 ... 10
21
Obecné / Re:Práce s textem
« Poslední příspěvek od Miroslav Baláž kdy 17-04-2018, 22:01:35 »
Zoradenie predsa poskytuje TStringList.
Ten však zoraďuje texty, nie čísla. Preto je treba čísla naformátovať s vodiacimi nulami:
Kód: Delphi [Vybrat]
  1. Format( '%0.3d', [ mojeCislo] )
Takýto zoznam sa potom ľahko zoradí. Napr. pre tento zoznam
002=jablko
004=hruška
003=marhuľa
sa využije sort a potom sa  vymenia položky takto:
Kód: Delphi [Vybrat]
  1. slZoznam.Sort;
  2. for i := 0 to slZoznam.Count-1 do
  3.   slZoznam.Values[slZoznam.Names[I]]=slZoznam.Names[I];
Naplnenie stringGridu je len hračka..
SQLite databáza a SQL príkazy, presne takéto úlohy riešia omnoho elegantnejšie a dokonalejšie. StringGrid sa nahradí dbGridom. Úloha je hotová za zlomok času. Pritom sa otvárajú nekonečné možnosti úprav a vylepšení.
22
Obecné / Re:Práce s textem
« Poslední příspěvek od Jan kdy 17-04-2018, 20:55:58 »
Je potřeba použít jeden s řadících algoritmů.
Viz. https://www.algoritmy.net/article/75/Porovnani-algoritmu
23
FireDAC / Re:FireDAC - clone
« Poslední příspěvek od Delfin kdy 17-04-2018, 16:50:33 »
Kód: [Vybrat]
function GetMemTable(SQLcommand:string): TFDMemTable;
var
  qq:TFDQuery;
  dm: TFDDataMove; // v DX tusim BatchMove (mám XE5)
begin
// vytvorím konekšn
//SQLcommand open do qq

Result := TFdmemtable.Create(Self);
dm := TFDDataMove.Create(Self);

dm.Destination := result;
dm.Source := qq;
dm.Execute;
//uzavrem konekšn a funkcia mi vráti MemTable
end
takto mi zostal rezult z funkcie aj po odpojeni od DB servera

Ke kopirovani datasetu slouzi metoda CopyDataSet nebo prime prirazeni pres property Data. Komponenta TFDDataMove slouzi spis k presunu dat mezi databazemi (byt se pro tento ucel da taky vyuzit).
24
FireDAC / Re:FireDAC - clone
« Poslední příspěvek od František kdy 17-04-2018, 16:37:36 »
Kód: [Vybrat]
function GetMemTable(SQLcommand:string): TFDMemTable;
var
  qq:TFDQuery;
  dm: TFDDataMove; // v DX tusim BatchMove (mám XE5)
begin
// vytvorím konekšn
//SQLcommand open do qq

Result := TFdmemtable.Create(Self);
dm := TFDDataMove.Create(Self);

dm.Destination := result;
dm.Source := qq;
dm.Execute;
//uzavrem konekšn a funkcia mi vráti MemTable
end
takto mi zostal rezult z funkcie aj po odpojeni od DB servera
25
Obecné / Re:Práce s textem
« Poslední příspěvek od Delfin kdy 17-04-2018, 15:31:45 »
A není jednodušší, pokud je tedy seznam v nějakém listu, nejdříve deduplikovat seznam a pak v druhém průběhu nasčítat počty stejných?

V cem by to melo byt jednodussi? Vzdyt to pocitani duplikatu muzes udelat pri jednom pruchodu zdrojovym listem.
26
Obecné / Re:Práce s textem
« Poslední příspěvek od AlienStar kdy 17-04-2018, 12:11:07 »
@JaroB - To vypadá dobře .... děkuji

předělal jsem to do StringGridu,, ale to seřazení v něm nějak nedávám

Kód: [Vybrat]
procedure TForm5.Button1Click(Sender: TObject);
var
  t: TStringList;
  i, j, c: Integer;
begin
  t := TStringList.Create;
  try
    t.Duplicates := dupIgnore;
    t.Sorted := True;
    //deduplikace
    for i := 1 to StringGrid7.RowCount -1 do
    t.Add(StringGrid7.Cells[4,i]);
    t.Duplicates := dupAccept;
    t.Sorted := False;
    //nascitani
    for i := 0 to StringGrid7.RowCount -1 do
    begin
      j := t.IndexOf(StringGrid7.Cells[4,i]);
      if j <> -1 then
      begin
        c := Integer(t.Objects[j]);
        inc(c);
        t.Objects[j] := Pointer(c)
      end;
    end;
    //setrideni

.... ???


načtu hodnoty z StringGrid7 a zapíšu je seřazené do StringGrid9
Ale jak je ve StringGrid9 seřadit ?

27
Obecné / Re:Práce s textem
« Poslední příspěvek od JaroB kdy 17-04-2018, 08:32:30 »
A není jednodušší, pokud je tedy seznam v nějakém listu, nejdříve deduplikovat seznam a pak v druhém průběhu nasčítat počty stejných?
Zkusil jsem to klasicky jako cvičení na dva listboxy a jedno tlačítko. V jednom je tvůj seznam a do druhého to nasypu.

Kód: Delphi [Vybrat]
  1. var
  2.   t: TStringList;
  3.   i, j, c: Integer;
  4. begin
  5.   t := TStringList.Create;
  6.   try
  7.     t.Duplicates := dupIgnore;
  8.     t.Sorted := True;
  9.     //deduplikace
  10.     for i := 0 to ListBox1.Items.Count - 1 do
  11.       t.Add(ListBox1.Items[i]);
  12.     t.Duplicates := dupAccept;
  13.     t.Sorted := False;
  14.     //nascitani
  15.     for i := 0 to ListBox1.Items.Count - 1 do
  16.     begin
  17.       j := t.IndexOf(ListBox1.Items[i]);
  18.       if j <> -1 then
  19.       begin
  20.         c := Integer(t.Objects[j]);
  21.         inc(c);
  22.         t.Objects[j] := Pointer(c)
  23.       end;
  24.     end;
  25.     //setrideni
  26.     ListBox2.Items.Clear;
  27.     for i := 0 to t.Count-1 do
  28.       ListBox2.Items.Add(Format('%.*d',[4, Integer(t.Objects[i])]) + '=' + t[i]);
  29.     t.Assign(ListBox2.Items);
  30.     t.Sort;
  31.     ListBox2.Items.Clear;
  32.     for i := t.Count - 1 downto 0 do
  33.       ListBox2.Items.Add(Copy(t[i], Pos('=', t[i]) + 1) + ' = ' + IntToStr(StrToInt(Copy(t[i], 1, Pos('=', t[i]) - 1))));
  34.   finally
  35.     t.Free
  36.   end;
  37.  
28
Obecné / Re:Práce s textem
« Poslední příspěvek od Delfin kdy 16-04-2018, 23:18:22 »
Jedna z moznosti ktera by mela fungovat i na "starych" Delphi je napr.:

Kód: Delphi [Vybrat]
  1. function Comparer(List: TStringList; Index1, Index2: Integer): Integer;
  2. begin
  3.   Result := CompareValue(Integer(List.Objects[Index2]), Integer(List.Objects[Index1]));
  4. end;
  5.  
  6. procedure TForm1.Button1Click(Sender: TObject);
  7. var
  8.   S: string;
  9.   I: Integer;
  10.   Index: Integer;
  11.   Input: TStringList;
  12.   Output: TStringList;
  13. begin
  14.   Input := TStringList.Create;
  15.   try
  16.     Input.LoadFromFile('C:\InputFile.txt');
  17.     Output := TStringList.Create;
  18.     try
  19.       for I := 0 to Input.Count - 1 do
  20.       begin
  21.         S := Input[I];
  22.         Index := Output.IndexOf(S);
  23.         if Index = -1 then
  24.           Output.AddObject(S, TObject(Integer(1)))
  25.         else
  26.           Output.Objects[Index] := TObject(Integer(Output.Objects[Index]) + 1);
  27.       end;
  28.  
  29.       Output.CustomSort(Comparer);
  30.  
  31.       StringGrid1.RowCount := Output.Count;
  32.       StringGrid1.ColCount := 2;
  33.       StringGrid1.FixedRows := 0;
  34.       StringGrid1.FixedCols := 0;
  35.       for Index := 0 to Output.Count - 1 do
  36.       begin
  37.         StringGrid1.Cells[0, Index] := Output[Index];
  38.         StringGrid1.Cells[1, Index] := IntToStr(Integer(Output.Objects[Index]));
  39.       end;
  40.     finally
  41.       Output.Free;
  42.     end;
  43.   finally
  44.     Input.Free;
  45.   end;
  46. end;

Jinak preju hodne zdaru uciteli vyucujicimu Delphi v teto dobe ;)
29
Obecné / Re:Práce s textem
« Poslední příspěvek od Miroslav Baláž kdy 16-04-2018, 23:08:55 »
Databaza a SQL:
Kód: MySQL [Vybrat]
  1. SELECT TypOvoce, Count( * ) AS Pocet
  2.         FROM tabulkaOvoce
  3.         GROUP BY TypOvoce
nie som si isty, ci je mozny sort hned, ale takto urcite:
Kód: MySQL [Vybrat]
  1. SELECT TypOvoce, Pocet FROM
  2.         (
  3.         SELECT TypOvoce, Count( * ) AS Pocet
  4.                 FROM tabulkaOvoce
  5.                 GROUP BY TypOvoce
  6.         )
  7.         ORDER BY Pocet desc, TypOvoce

30
Obecné / Re:Práce s textem
« Poslední příspěvek od raul kdy 16-04-2018, 21:28:52 »
Treba sort, pak project, pocitat a plnit grid ?
Stran: 1 2 [3] 4 5 ... 10