wczytywanie danych z pliku tekstowego

0

Witam, mam plik tekstowy w ktorym dane umieszczone sa w nastepujacy sposob: na samej gorze liczba wszystkich uczniow w tymze pliku. Pod spodem imie i nazwisko ucznia, w nastepnej linii liczba jego ocen, a w kolejnej te jego oceny oddzielone spacjami. Nastepnie sa dane kolejnego ucznia w takim samym porzadku.

program Project2;
{$APPTYPE CONSOLE}
uses
  SysUtils;
var
  sciezka,tekst:string;
  plik:textfile;
  i,k,ile_s,ile_o:integer;
  ocena:real;
begin
  writeln('Podaj sciezke dostepu razem z nazwa pliku:');
  readln(sciezka);
  assignfile(plik,sciezka);
  reset(plik);
  readln(plik,ile_s);
    while not (eof(plik)) do
    begin
    readln(plik,tekst);writeln(tekst);
    readln(plik,ile_o);writeln(ile_o);
    k:=1;
      while k<=ile_o do
      begin
      read(plik,ocena);
      writeln(ocena:0:1);
      k:=k+1;
      end;
    end;
  closefile(plik);
  readln;
end.

Chce zeby program mi wypisywal po kolei te dane. Wypisuje mi dane i oceny 1 ucznia. I nastepnie wyrzuca komunikat: 'Invalid numeric input' przy linijce:
readln(plik,ile_o);writeln(ile_o);
Nie rozumiem, w 1 petli while w drugim obiegu program powinien wczytac imie i nazwisko i liczbe ocen ucznia. W takiej kolejnosci te dane znajduja sie w pliku tekstowym. Co jest zle w tym kodzie?
Oceny moga wygladac tak: 3.5 dlatego dalem jako typ real.

0
woyaru napisał(a)
readln(plik,ocena);

Readln wczytuje całą linię, czyli wszystkie oceny oddzielone spacjami.
Wg mnie program wypisał Ci dane pierwszego ucznia oraz jego pierwszą ocenę.

0

Zgadza sie, w pliku zapisane ma read. A nie readln. Pewnie po napisaniu posta to poprawilem. Ale to nie rozwiazuje mojego problemu.

0
var
  sciezka,tekst,oceny:string;
  plik:textfile;
  i,j,k,ile_s,ile_o:integer;
  ocena:real;
begin
  writeln('Podaj sciezke dostepu razem z nazwa pliku:');
  readln(sciezka);
  assign(plik,sciezka);
  reset(plik);
  readln(plik,ile_s);
  while not eof(plik) do
    begin
      readln(plik,tekst);
      writeln(tekst);
      readln(plik,ile_o);
      writeln(ile_o);
      readln(plik,oceny);
      k:=1;
      while k<=ile_o do
        begin
          i:=pos(#32,oceny);
          if i=0 then i:=256;
          val(copy(oceny,1,i-1),ocena,j);
          if(j=0)then writeln('ocena nr. ',k,' -> ',ocena:0:1);
          while oceny[i]=#32 do inc(i);
          delete(oceny,1,i-1);
          k:=k+1
        end
    end;
  close(plik);
  readln
end.

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