Wczytanie cyfr do tablicy NxN z pliku.

0

Witam!

Mam problem z napisaniem programu, za pomocą, którego wczytam cyfry (0 lub 1 - najlepiej jeśli byłby to typ logiczny) z pliku tekstowego.
Plik wejściowy wyglądać ma mniej więcej tak:

4
1 1 0 1
0 0 1 1
0 1 1 1
0 0 0 1

W pierwszym wierszu znajduje się rozmiar (NxN) tablicy, zaś w kolejnych owa tablica.
Nie ma znaczenia jaki będzie seperarator pomiędzy liczbami (może być spacja, przecinek, ewentualnie bez).

Całą resztę programu mam już napisaną - program ma sprawdzać własności relacji (zwrotna, symetryczna, słabo antysymetryczna itd.).
Problem jest z wczytaniem tych liczb do tablicy.

Oto fragment kodu

uses crt;

const 
prel = 'D:\rel.txt';

var
F : Text; //plik tekstowy
N : Integer; // wielkosc tablicy z pliku
T : array of array of char; //tablica dwuwymiatowa n x n

i,j : Integer;
c : char;

begin
assign (F,prel);
reset (F);

readln(F,N);
N:=N-1;
SetLength(T, N, N); //ustawia wielkosc tablicy N-1 x N-1, indeksowanie od 0 :(

while not EOF(F) do
    begin
    for j:=0 to N do 
        begin
        for i:=0 to N do
            begin
            readln(F,c);
            T[i,j]:=c;
            end;
        end;
    end;
read();
end.

Zwraca błąd 216.

0
                        readln(F,c);
                        T[i,j]:=c;

Readln wczytuje całą linię, a ni stąd ni zowąd bierzesz z tego znak.
Musisz wczytać całą linię i ją ręcznie przeparsować (czyli musisz ręcznie wyciągnąć z ciągu znaków np.0 1 1 0 każdy znak i wpisać go do tablicy; jeżeli liczby mają być wyłącznie jednocyfrowe, to wystarczy zwykła pętla for).

0

Czyżby multiacc i zadawanie tego samego pytania pare razy?
http://4programmers.net/Forum/Newbie/191914-pliktxt+_tablica

Już ci odpowiedzieli, czyż nie?

0

Dziękuje Patryk27.
Zmieniłem to tak

    for j:=0 to N-1 do 
        begin
        readln (F,c);
            for i:=1 to N do
            begin
            T[j,i-1]:=c[i];
            end;
        end;

przy czym c to string i działa :)

123 - masz kiepską wiarę w ludzi.
Niestety nie mam multikonta i nie jestem autorem tamtego wątku.

0
czarny_ napisał(a)
readln(F,N);
N:=N-1;
SetLength(T, N, N); //ustawia wielkosc tablicy N-1 x N-1, indeksowanie od 0 :(

Zwraca błąd 216.

To jest źle zrobione!
Ma być tak

  ReadLn(F,N);
  SetLength(T, N, N); //ustawia wielkosc tablicy N x N, indeksowanie od 0 :(
//i dalej indeksować elementy tablicy w zakresie 0..N-1
0

pelsta - tak, wiem poprawiłem to również.
Dziękuję!

Wszystko już działa w kwestii wczytania danych i odpowiedniej konwersji.

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