Jump to content

[PASCAL] wczytywanie liczb z pliku do tablicy


rafal92909

Recommended Posts

Witam wszystkich mam problem z napisaniem programu w Pascalu który wczyta wszystkie liczby z pliku txt do tablicy dwuwymiarowej. Niby coś napisałem ale nie do końca działa jak powinno, ponieważ wypisuje tylko pierwszy wiersz z tablicy a cala reszta jest pusta. Chce aby liczby w tablicy wyglądały tak samo jak pliku tekstowym (czyli 228 wierszy i 13 kolumn)

 

 

program p1;
uses crt;
type
   T2W=array [1..228,1..13] of string;
var
  t:text;
  w:string;
  i,j:integer;
  T1:T2W;

begin
  assign(t, 'C:\temp.txt');
  reset(t);
     for i:=1 to 228 do
        for j:=1 to 13 do
        begin
           read(t,w);
           T1[i,j]:=w;
        end;

     close(t);
     writeln('liczby w tablicy');
     writeln();

     for i:=1 to 228 do
     begin
        for j:=1 to 13 do
        begin
           write(T1[i,j]);
        end;
        writeln();
     end;
  readln;
end.

 

 

plik txt który wczytuje znajduje się: TUTAJ

 

czy zmienna w i tablicy nie powinny być zdeklarowane jako liczby rzeczywiste jeśli później chciałbym np sumować liczy z kolumn? Gdy zmienię deklaracje na real to kompilator nie widzi żadnego błędu ale od razu się zamyka. Proszę o pomoc.

Link to comment
Share on other sites

Nie wczytujesz do tablicy pojedynczych liczb, tylko całe wiersze, więc nie działa prawidłowo, a program się zamyka dlatego, że natknął się na błąd podczas wykonania. Jeżeli zmieniasz typ zmiennej w i T1 na rzeczywisty i jest błąd, to prawdopodobnie w pliku powinny być kropki a nie przecinki. Spróbuj jeszcze nadać typ Single tym zmiennym, a przy wczytywaniu zmień kod na:

 

  for i:=1 to 228 do
  begin
     for j:=1 to 13 do
     begin
        read(t,w);
        T1[i,j]:=w;
     end;
     readln;
  end;

 

Może to pomoże.

Etharnion - 2D RPG

Szukam grafika chętnego do współpracy przy projekcie.

Link to comment
Share on other sites

niestety nadal to samo wkleilem twoj kawalek kodu (bez readln; bo musialem enter klikac) i jest to samo. a po zmianie typu zmiennej w i tablicy na single dzieje sie to samo co przy typie real czyli kompilator nie widzi bledow wlacza sie program i od razu wysypuje.

Link to comment
Share on other sites

pozornie dziala bo wyswietla na ekranie tak jak powinno, ale chodzilo mi o to by w kazdym miejscu w tablicy byla jedna ze liczb. a miejsca wkolumnach od 2-13 sa puste a wypelniona jest cala kolumna pierwsza calym wierszem z pliku tekstowego. a nie o to chodzilo. czy wiesz jak to poprawic?

Link to comment
Share on other sites

nie robie na stringach bo jak tylko zmienie zmienne na real to odrazu po otwarciu program sie zamyka program

 

program p1;
uses crt;
type
   T2W=array [1..228,1..13] of string;
var
t:text;
  w:string;
  i,j:integer;
  T1:T2W;

begin
  assign(t, 'C:\temp.txt');
  reset(t);
  for i:=1 to 228 do
  begin
     for j:=1 to 12 do
     begin
        read(t,w);
        T1[i,j]:=w;
     end;
     readln(t,w);
     T1[i,13]:=w;
  end;

  close(t);
  writeln('liczby w tablicy');
  writeln();

  for i:=1 to 228 do
  begin
     for j:=1 to 13 do
     begin
        write(T1[i,j]);
     end;
     writeln();
  end;
  readln;
end.

Link to comment
Share on other sites

Zamień wszystkie przecinki w pliku tekstowym na kropki, powinno działać. Jeżeli chcesz liczby w osobnych komórkach tablicy to nie można tego zrobić na stringach.

 

zmienilem na kropki i jak zmieniam na stringi na reale to kompilator nie wykrywa bledu ale po wlaczeniu programu od razu sie wylacza (tak jakby nie mial readln; na koncu) i nie wiem co mu sie jeszcze nie zgadza

Link to comment
Share on other sites

begin
 assign(t, 'C:\temp.txt');
 reset(t);
 for i:=1 to 228 do
 begin
    readln(t,w);           {wczytuje cały wiersz z pliku tekstowego}
   for j:=1 to 12 do
   begin
      while w[1]=' ' do delete(w,1,1); {usuwa spacje na początku wiersza}
      T1[i,j]:=copy(w,pos(' ',w)-1);  {wstawia do tablicy fragment wiersza do pierwszej napotkanej spacji}
      delete(w,1,pos(' ',w));             {usuwa z wiersza to co wstawił do tabeli, razem ze spacją}
   end;
 end;
 close(t);
end;

 

Coś w tym stylu. Sprawdź tylko, czy w funkcjach copy i delete powinny być -1 za funkcjami copy.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...