Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 16.01.2018
Сообщений: 22

Подскажите пожалуйста, как исправить ошибку "Runtime exception: Попытка считывания за концом текстового файла"

10.05.2020, 22:33. Показов 671. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача: Ведомость студентов, сдававших сессию, содержит ФИО и оценки по
четырем предметам. Вывести список студентов, сдавших сессию со средним
баллом больше 7.
При попытке считать инфу с файла, появляется такая ошибка "12_1.pas(25) : Runtime exception: Попытка считывания за концом текстового файла". Подскажите пожалуйста, как исправить??
(на мой английский не обращайте внимания, это черновой вариант )
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
uses System;
type students = record
     f,i,o : string;
     m1,m2,m3,m4 : longint;
     sr : real;
     end;
var
  a : array[1..1000] of students;
  t : byte;
  f : text;
  n,i,step,data2 : longint;
  tmp : integer;
  s,next,name_of_file: string;
  z1: text;
begin
  writeln('Ввод из файла - 1, с клавиатуры - 0');
  readln(t);
  if (t=1) then
  begin
    writeln('Введите название файла. Пр: data.txt');
    assign(z1,'data1.txt');
    reset(z1);    
    data2:=0;
    readln(z1,s);
    readln(z1,n);
    readln(z1,s);
    for i:=1 to n do 
    begin
      readln(z1,s);
      step:=0;
      while (s<>'') do
      begin
        next:='';
        while (s<>'') and (s[1]<>' ') do
        begin
          next:=next+s[1];
          delete(s,1,1);
        end;
        while (s<>'') and (s[1]=' ') do delete(s,1,1);
        // Загружаем в структуру значения с файла
        if (step=0) then a[i].f := next;
        if (step=1) then a[i].i := next;
        if (step=2) then a[i].o := next;
        if (step=3) then val(next,a[i].m1,tmp); // val - перевод из int в string
        if (step=4) then val(next,a[i].m2,tmp);
        if (step=5) then val(next,a[i].m3,tmp);
        if (step=6) then val(next,a[i].m4,tmp);
        inc(step);
      end;
      a[i].sr := (a[i].m1 + a[i].m2 + a[i].m3 + a[i].m4)/(4.0);
    end;
  close(z1);
  end;
  if (t=0)
  then begin
    writeln('Количество студентов');
    readln(n);
    writeln('Введите данные через пробел(фамилия имя отчество оценка1 оценка2 оценка3 оценка4)');
    writeln();
    writeln('Пример: Иванов Иван Иванович 8 8 8 8');
    writeln();
    for i:=1 to n do 
    begin
      writeln('Информация про ',i,'-го студента');
      readln(s);
      step:=0;
      while (s<>'') do
      begin
        next:='';
        while (s<>'') and (s[1]<>' ') do
        begin
          next:=next+s[1];
          delete(s,1,1);
        end;
        while (s<>'') and (s[1]=' ') do delete(s,1,1);
        // Загружаем в структуру значения с файла
        if (step=0) then a[i].f := next;
        if (step=1) then a[i].i := next;
        if (step=2) then a[i].o := next;
        if (step=3) then val(next,a[i].m1,tmp); // val - перевод из int в string
        if (step=4) then val(next,a[i].m2,tmp);
        if (step=5) then val(next,a[i].m3,tmp);
        if (step=6) then val(next,a[i].m4,tmp);
        inc(step);
      end;
      a[i].sr := (a[i].m1 + a[i].m2 + a[i].m3 + a[i].m4)/(4.0);
      writeln();
    end;
  end;
  var f1 : text;
  writeln('Введите название файла для вывода. Пр: data.txt');
  readln(name_of_file);
  assign(f1,name_of_file);
  rewrite(f1);
  writeln();
  writeln('Students with 7 mark or higher:');
  writeln(f1,'Students with 7 mark or higher:');
  for i:=1 to n do
    begin
      if (a[i].sr>7)
        then begin
          writeln(a[i].f,'  ',a[i].i,'  ',a[i].o,' ',a[i].m1,' ' ,a[i].m2,' ',a[i].m3,' ',a[i].m4,'. Middle mark:',' ', a[i].sr);
          writeln(f1,a[i].f,'  ',a[i].i,'  ',a[i].o,' ',a[i].m1,' ' ,a[i].m2,' ',a[i].m3,' ',a[i].m4,'. Middle mark:',' ', a[i].sr);
        end;
    end;
  close(f1);
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.05.2020, 22:33
Ответы с готовыми решениями:

Выдаёт ошибку Ошибка времени выполнения: Попытка считывания за концом текстового файла
Не могу понять структуру. Вроде пишу всё правильно, но всё равно выдаёт ошибку. Выдаёт ошибку Ошибка времени выполнения: Попытка считывания...

Выдаёт ошибку "Ошибка времени выполнения: Попытка считывания за концом текстового файла"
Выдаёт ошибку Ошибка времени выполнения: Попытка считывания за концом текстового файла Не могу понять структуру. Вроде пишу всё...

Попытка считывания за концом текстового файла
Помогите в решении, написал код процедуры &quot;ввод из документа в массив&quot;, но он не работает. Выдает ошибку &quot;попытка считывания за...

4
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
11.05.2020, 05:07
Ошибка в файле, который вы пытаетесь считать.
Вот его и смотрите или показывайте…
0
0 / 0 / 0
Регистрация: 16.01.2018
Сообщений: 22
11.05.2020, 20:49  [ТС]
Спасибо, ошибка действительно в входном файле.
Но сейчас новая беда: не получается правильно создать входной файл.
Если пишу так: Demyan Demyan Demyan 8 9 6 9, то появляется ошибка 'Input string was not in a correct format'
А если так: 8 9 6 9 Demyan Demyan Demyan, то эти значения не записываются в переменные и по итогу получаю пустой результат..
Подскажите, пожалуйста, как правильно указать данные в входном файле?

Добавлено через 1 минуту
Спасибо, ошибка действительно в входном файле.
Но сейчас новая беда: не получается правильно создать входной файл.
Если пишу так: Demyan Demyan Demyan 8 9 6 9, то появляется ошибка 'Input string was not in a correct format'
А если так: 8 9 6 9 Demyan Demyan Demyan, то эти значения не записываются в переменные и по итогу получаю пустой результат..
Подскажите, пожалуйста, как правильно указать данные в входном файле?
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
12.05.2020, 04:36
Вы не понимаете сами чего хотите!

Во-первых, строковая переменная считывается до конца строки. Всегда. Поэтому после её считывания из этой строки больше не чего ожидать, кроме eoln разумеется.

В-вторых, в своей программе вы используете только операторы readln при чтении из файла.
А это значит, что происходит и программа далее будет считывать уже со следующей строки.

Я же не просто так просил файл!
В вашем случае он должен быть примерно такой:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Иванов
Иван
Иванович
5
4
5
4
5
Петров
Семён
Семёнович
4
3
5
4
3
И читаться он должен примерно так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
var t : Text;
Reset(t, 'data.txt');
while not eof(t) do
  begin
    var s : students;
    ReadLn(t, s.f); if eof(t) then break; // если вдруг больше нет данных,
    ReadLn(t, s.i); if eof(t) then break; // а мы ещё не успели всё заполнить,
    ReadLn(t, s.m1); if eof(t) then break; // то придётся прервать выполнение
    ReadLn(t, s.m2); if eof(t) then break; // операции считывания
    ReadLn(t, s.m3); if eof(t) then break;
    ReadLn(t, s.m4); if eof(t) then break;
    // считали всё хорошо
    s.sr := (s.m1+s.m2+s.m3+s.m4) / 4; // сразу считаем среднее
    inc(n); a[n] := s; // и добавляем новый элемент в массив
  end;
...
А в том случае, если вся информация в одну строку, то нужно считывать строку и „распарсивать“ её — разделять на подстроки и заполнять соответствующие переменные.

Т.е. для файла вида:
Code
1
2
Иванов Иван Иванович 5 4 5 4
Петров Семён Семёнович 4 3 5 4
Подойдёт примерно такой код:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
...
  foreach var s in ReadLines('data.txt') do
    begin
      var w := s.ToWords; // Должно быть 7 значений: 3 строковых и 4 числовых
      if w.Count <> 7 then continue; // Не 7 параметров.
      var st : students;
      st.f := w[0]; st.i := w[1]; st.o := w[2];
      st.m1 := StrToInt(w[3]); st.m2 := StrToInt(w[4]); st.m3 := StrToInt(w[5]); st.m4 := StrToInt(w[6]);
      st.sr := (st.m1 + st.m2 + st.m3 + st.m4) / 4;
      inc(n); a[n] := st;
    end;
...
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
12.05.2020, 05:18
Цитата Сообщение от JuriiMW Посмотреть сообщение
строковая переменная считывается до конца строки. Всегда
Не совсвем. Для чтения 1 слова в строку - можно использовать ReadLexem:
Pascal
1
2
3
begin
  Arr(ReadLexem, ReadLexem, ReadLexem).PrintLines;
end.
Эта программа считывает 3 слова и выводит их отдельно (в разные строки вывода).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.05.2020, 05:18
Помогаю со студенческими работами здесь

Ошибка времени выполнения: Попытка считывания за концом текстового файла
program ya_ustal; var f:text;m,l:string; a,b,c:integer; begin b:=0; m:='D:\input.txt'; assign(f,m); reset(f); while not...

Ошибка времени выполнения: Попытка считывания за концом текстового файла
Доброго времени суток. Возникла проблема с считыванием матрицы с файла, а именно: &quot; Ошибка времени выполнения: Попытка считывания за...

Unhandled Exception: System.IO.IOException: Попытка считывания за концом потока ввода
program FordBellman; uses crt; const InputFile = 'input.txt'; OutputFile = 'output.txt'; Nmax = 10; { Число вершин...

Ошибка времени исполнения. Попытка считывания с концом
var min, max, a: integer; first: boolean; begin assign(input,'input.txt'); reset(input); first:=true; while not...

Как исправить ошибку считывания данных из файла
Добрый день, друзья! Подскажите, пожалуйста, как исправить ошибку считывания данных из файла? ValueError: invalid literal for int() with...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru