Skocz do zawartości
Zaloguj się, aby obserwować  
rafal92909

[PASCAL] wczytywanie liczb z pliku do tablicy

Polecane posty

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.

Edytowano przez Integer
Wciecia

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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.

Edytowano przez Integer
Wcięcia

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Z tym readln to chodziło o to, żeby przy wczytywaniu pliku przechodziło do następnej linijki, ale moja wina, zrób tak:

 

  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;

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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.

Edytowano przez Integer
Wcięcia

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

No to użyj debuggera i zobacz w którym momencie program się wywala.

 

chodzi Ci o uzycie funkcjiu debug w kompilatorze? to po uzyciu jej wyskakuje dosowskie okienko w ktorym pisze "wiersz wprowadzenia jest za dlugi" i szybko znika

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

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.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się
Zaloguj się, aby obserwować  

×