wczytywanie danych z pliku tekstowego

wczytywanie danych z pliku tekstowego
WO
  • Rejestracja: dni
  • Ostatnio: dni
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.

Kopiuj
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.

pelsta
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 819
0
woyaru napisał(a)
Kopiuj
readln(plik,ocena);

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

WO
  • Rejestracja: dni
  • Ostatnio: dni
0

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

flabra
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.