logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak posortować dane z pliku w Delphi7 i wyświetlić w Memo?

ja1 01 Lut 2006 22:03 1691 9
REKLAMA
  • #1 2247242
    ja1
    Poziom 13  
    Posty: 131
    Ocena: 3
    Witam
    Chce posortowac w delphi rosnąco takie dane z pliku i wyswietlic w memo:
    13,45 kredki
    7,34 gumki
    23,86 zeszyty
    11,22 pisaki
    Jak to zrobic.
    Dzieki
  • REKLAMA
  • REKLAMA
  • #3 2248982
    ja1
    Poziom 13  
    Posty: 131
    Ocena: 3
    Sortowanie liczb znam i umie to robic.
    Może sie zle wyraziłem , ale mnie chodzi o posortowanie alfabetyczne.
    Podaje przyklad:
    Gwozdzie
    Krzesla
    Zeszyty
    Drukarki , itd
    Te przedmioty mają byc układane według alfabetu
    Dzięki
  • REKLAMA
  • #4 2249474
    sq8lst
    Poziom 13  
    Posty: 61
    Pomógł: 4
    Ocena: 1
    tymi samymi algorytmami moze sortowac alfabetycznie
  • #5 2249490
    radziow
    Poziom 16  
    Posty: 132
    Pomógł: 22
    Ocena: 9
    to tak
    var
    F:TextFile;
    ss:TStringList;
    t:string;
    begin
    assignFile(f,'nazwa.tx');
    reset(f);
    ss:=TStringList.Create;
    while not EOf(f) do
    begin
    readln(t);
    ss.add(t);
    end;
    closeFile(f);

    ss.Sort;

    //a pozniej masz posortowane
    memo1.lines.assign(ss);
  • #6 2249543
    spros
    Poziom 17  
    Posty: 186
    Pomógł: 16
    Ocena: 26
    wrzucasz wszystkie te elementy w jakis komponent ktory ma atrybut SORTED (chyba TListBox ma) ustawiony na TRUE.
    komponent ten nie jest widoczny tj atrybut HIDE ma ustawiony na TRUE.
    potem wszystkie te slowa wpisujesz to memo w kolejnosci w jakiej wystepuja w posortowanym komponencie.
    koniec. nie wywolujesz jawnie zadnej funkcji do sortowania. choc przepisujesz slowa z jednego miejsca do drugiego to i tak sortowanie to bedzie szybsze niz jakbys sam napisal.

    no nie zdazylem. TStringList tez ma wlasciwosc SORTED :)
  • #7 2250045
    Jaca
    Poziom 32  
    Posty: 1332
    Pomógł: 239
    Ocena: 217
    Zerknij czy może być. Kilka "kopiuj/wklej" i jest...
    Załączniki:
    • sort.zip (4.71 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #8 2252064
    ja1
    Poziom 13  
    Posty: 131
    Ocena: 3
    Do Jaca
    Dzięki za program , ale są pewnw problemy:
    22,45 jabłka
    85,45 gruszki
    3,67 sliwki

    Program sortuje tak:
    22,45 jabłka
    3,67 sliwki
    85,45 gruszkii

    Ja chce aby było tak:
    3,67 sliwki
    22,45 jabłka
    85,45 gruszki
  • REKLAMA
  • #9 2252439
    radziow
    Poziom 16  
    Posty: 132
    Pomógł: 22
    Ocena: 9
    No to musisz rozdzielić liczby na liczby a tekst jako tekst :)

    zawsze możesz zmienić moją procedurke

    type
    PDane =^TDane;
    TDane = record
    cena:real;
    nazwa:string;
    end;


    function Sortowanie(item1,item2:Pointer):integer;
    begin
    if PDane(Item1).cena<Pdane(item2).cena then result:=-1 else
    if Pdane(Item1).Cena>Pdane(item2).Cena then result:=1 else
    result:=0;
    end;

    var
    F:TextFile;
    lista:TList
    t:string;
    c:real;
    d:PDane;
    begin
    assignFile(f,'nazwa.tx');
    reset(f);
    lista:=TList.Create;
    while not EOf(f) do
    begin
    readln(f,cena, t);
    new(d);
    d.cena:=cena;
    d.nazwa:=t;
    lista.add(d);
    end;
    closeFile(f);

    lista.sort(Sortowanie);


    odczyt danych to chyba sobie poradzisz ... jakbyś miał kłopoty z odczytem ceny (bo nie wiem co delphi lubi bardziej dla liczb zmiennoprzecinkowych czy kropke czy przecinek) to będziesz musiał sobie sam poradzić np przez odczytanie całej lini i pos(' ',odcyztany_string) pozniej pokopiowac to na 2 stringi i StrToFloat zeby zamienic cene .... ewentualnie jeszcze strReplace ten przecinek na kropke bo z tym mogą być problemy (ale oczywiście nie muszą)
  • #10 2252644
    spros
    Poziom 17  
    Posty: 186
    Pomógł: 16
    Ocena: 26
    ja1 napisał:

    Ja chce aby było tak:
    3,67 sliwki
    22,45 jabłka
    85,45 gruszki


    to sie nazywa sortowanie alfanumeryczne a nie alfabetyczne.
    pozdrawiam.

Podsumowanie tematu

✨ Dyskusja dotyczy sortowania danych z pliku w Delphi 7 i wyświetlania ich w komponencie TMemo. Początkowo poruszono temat sortowania rosnącego według wartości liczbowych z tekstem, następnie autor wyjaśnił, że potrzebuje sortowania alfabetycznego po nazwach przedmiotów. Zaproponowano użycie TStringList z metodą Sort, która sortuje alfabetycznie linie tekstu. W przypadku sortowania według wartości liczbowych i tekstu jednocześnie, zasugerowano rozdzielenie danych na pola: liczba (real) i tekst (string), a następnie użycie TList z własną funkcją porównującą elementy według wartości liczbowej. Przykład implementacji funkcji sortującej i struktury rekordu z polami cena i nazwa został podany. Wskazano także, że sortowanie alfanumeryczne wymaga rozdzielenia i odpowiedniego porównania elementów, gdyż standardowe sortowanie TStringList sortuje tylko alfabetycznie.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA