Wczytywanie pliku do tablicy 2W (dyn)

0

Tak więc mam problem z wczytaniem danych z pliku do tablicy dynamicznej dwuwymiarowej.
moja tablica:

tablica:array of array of byte;

później ustalam wielkość:

SetLength(tablica,640,480);

a polecenie SizeOf(tablica) zwraca 4.
później daje BlockRead(plik,tablica[0][0],640*480) i program się wysypuje,
natomiast jak dam w pętli:
blockRead(plik,tablica[i][9],640);
to działa

chodzi mi o wczytanie całego pliku do tablicy za jednym razem. Jeśli ktoś wie o co mi chodzi i jak to zrobić to proszę o pomoc!

0

A czemu nie możesz w pętli?

0

mogę w pętli ale tak zajęłoby to znacznie mniej czasu, a ja chcę to odczytywać jak najszybciej. różnica naprawdę jest spora (na początku odczytywałem po 1 bajcie i było cienko) dlatego poszukuję jak najszybszego rozwiązania.

ps. mogę wczytywać cały plik do tablicy jednowymiarowej tylko to trzeba jeszcze przetwarzać (tesh w pętli i to nawet podwójnej).

0
Pawell napisał(a)

[...]zajęłoby to znacznie mniej czasu, a ja chcę to odczytywać jak najszybciej[...]

przez pomyłkę napisałem mniej, chciałem napisać WIĘCEJ czasu

0

Wielowymiarowej tablicy dynamicznej tak się nie da łatwo odczytać z pliku. Spowodowane jest to tym, że każda "podtablica" też jest tablicą dynamiczną, więc tablica dynamiczna 2-wymiarowa, o wymiarach [x,y] w pamięci jest tak reprezentowana:
{x} {y}(dane[0][0..y-1]) {y}(dane[1][0..y-1]) ... {y}(dane[y-1][0..y-1])
Gdzie {a} to długość danej (pod)tablicy.
W takim wypadku masz więc 2 wyjścia:

  1. albo odczytywać/zapisywać w pętli
  2. korzystać z tablicy liniowej (zamiast SetLength(a, 640, 480) -> SetLength(a, 640480) i zamiast a[x][y] -> a[x640+y].

PS (Pawell): chodzilo mi tylko o symbol ;] Czyli jako {a} oznaczyłem sobie długość tablicy o długości a ;].

0

Już wykorzystałem tą drugą opcję. Skoro nie da się inaczej to tak pozostawię. Dzięki za pomoc. Dobrze, że w ogóle wiedzieliście o co mi chodzi ;P

ps o co chodzi z tym a?

Pawel200x.5 napisał(a)

(...)Gdzie {a} to długość danej (pod)tablicy(...)

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