[delphi] dzialania na pliczku binarnym

0

jak byscie napisali algorytm sortujacy plik binarny po dowolnym polu i pokazali wynik działania w postaci pogrupowanej w/g pola
sortowanego na liście przewijanej w formacie:
polesortowane 1 - ilosc powtorzen
...
polesortowane n - ilosc powtorzen

ogółem - suma ilosci

Struktura pliczku binarnego:

TRekTest=record
klucz:integer;
poleS1,
poleS2,
poleS3:string[5];
poleI1,
poleI2,
poleI3:integer;{2b}

plik ma 1.7 mb

probowalem z bockreadem pewnie cos zle ... bo strasznie wolno mi to chodzi. Ktos ma jakis pomysl ?

0

hmm ja myślę tak, poglądowo:
1)iterujesz po całym pliku po elementach, dane z pola wdg którego chcesz posortwać dodajesz do jakiejś listy albo do tablicy
2)przy pobieraniu danego pola, pobierasz rónież kolejny numer rekordu z którego go bierzesz, zapisujesz te dane analogicznie do jakiejś listy (albo do tablicy)
3)sortujesz elementy z listy pierwszej zachowując połączenia przez indeks z drugą (czyli zmiany w niej będą analogiczne)
4)
utwórz nowy plik
for i:= to high(lista_druga) do
begin
czytaj ze źródła element lista_druga[i]
zapisz odczytany element do nowego pliku
end
zamknij nowy plik

a może pokażesz swój kod ?

0

dzieki za odpowiedz. A moglbys opisac swoj sposob na rozmieszczenie tych rekordow w listview ? tylko i wylacznie na razie bez sortowania ... wyciaganie tych rekordow albo mi nie idzie albo dane w tym pliku sa "bezsensowne" np [scnalcnl] i inne znaki :Q

0
misiooo napisał(a)

dzieki za odpowiedz. A moglbys opisac swoj sposob na rozmieszczenie tych rekordow w listview ? tylko i wylacznie na razie bez sortowania ... wyciaganie tych rekordow albo mi nie idzie albo dane w tym pliku sa "bezsensowne" np [scnalcnl] i inne znaki :Q

z głowy:
R : TRekTest;
size:=sizeof(TRekTest);
while stream.read(R,size)=size do
ListView.NiewiemjakametodaAdd(R.poleSx)

1 użytkowników online, w tym zalogowanych: 0, gości: 1