Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 12.03.2018
Сообщений: 331

Ошибка с считыванием информации из файла

26.05.2018, 16:59. Показов 1216. Ответов 4

Студворк — интернет-сервис помощи студентам
Program1.pas(98) : Ошибка времени выполнения: Входная строка имела неверный формат. - почему неверный формат?

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
108
109
110
111
112
program lab6;
 
const nMax = 10;
 
type
  Workers = record
    Literary: String[50];
    Author: String[50];
    Year: integer;
    Category: String[10];
  end;
  tWorkers = array[1..nMax] of Workers;
 
var
  Lit: tWorkers;
  f: Text;
  fname: String[30];
  m, i: byte;
  cont: char;
  tmp: Workers;
 
procedure postYear(var wk: tWorkers; n: byte);
var post: integer;
begin
writeln('После какого года отобразить публикации?: ');
readln(post);
  writeln('Публикации после ', post, ' года'); 
  for var i: byte := 1 to n do 
  begin
    if wk[i].Year > post then 
      writeln(wk[i].Literary:15, wk[i].Author:50, wk[i].Year:15, wk[i].Category:10); 
  end;
end;
 
 
 
begin
 
 
  m := 1;
      writeln('Программа "Библиографический список" '); 
    writeln('1 - Создать новый файл'); 
    writeln('2 - Обработать существующий файл'); 
    writeln('3 - Завершить работу программы'); 
  
  while m <> 3 do
  begin
    
    readln(m);
    
    case m of
      1:
        begin
          write('Введите имя файла: ');
          readln(fname);
          writeln('Файл ', fname, ' создан');
          
          assign(f, fname); 
          rewrite(f);
          
          i := 1;
          
          cont := 'y';
          while cont = 'y' do 
            with tmp do
            begin
              writeln('Введите название  ', i,  '-литерат. источнка'); readln(Literary); 
              write('ФИО автора: ');      readln(Author);
              write('Год издания: ');   readln(Year); 
              write('Категория( книга или статья? ): ');   readln(Category); 
              writeln(f, Literary:15, Author:50, Year:15, Category:10); 
              Lit[ i ]:=tmp;
              i := i + 1;
              
              write('Клавиша y – продолжить ввод, другая  – прекратить ввод : ');
              readln(cont); 
              
              writeln();
              writeln();
              
              writeln('1 - Создать новый файл'); 
    writeln('2 - Посмотреть существующий файл'); 
    writeln('3 - Завершить работу программы'); 
            end;
          close(f);
        end;
      2:
        begin
          write('Введите имя файла '); 
          readln(fname); 
          assign(f, fname); 
          reset(f);
          i := 0; 
          while not eof(f) do
          begin
          i := i + 1; 
            with Lit[i] do
              readln(f, Literary, Author, Year, Category); 
          end; 
          close(f);
          for i := 1 to nMax do 
            with Lit[i] do 
              writeln(Literary:15, Author:50, Year:15, Category:10);
     writeln();
postYear(Lit, nMax);
        end;
    
    end;
    
  end;
 
end.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.05.2018, 16:59
Ответы с готовыми решениями:

Сформировать одномерный массив считыванием данных из файла, и найти максимальный и минимальный элемент массива
Помогите плиз! Сформировать одномерный массив считыванием данных из файла, и найти максимальный и минимальный элемент массива!

Непонятки cо считыванием из файла.
Всё работает, не могу понять как сделать чтобы пользователь вводил имя файла. Компилятор уже еле дышит. #include...

Проблема со считыванием данных из файла
Здравствуйте, помогите пожалуйста. мне нужно считывать год мес. день с файла, но прога либо не делает ничего, либо выдают сообщение о...

4
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,434
26.05.2018, 19:03
Лучший ответ Сообщение было отмечено koks_ikkkk как решение

Решение

Потому что, вы записываете в текстовый файл одну строку, а считать пытаетесь 3+число;
Переделал на типизированный файл.

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
program lab6;
 
const
  nMax = 10;
 
type
  Workers = record
    Literary: String[50];
    Author: String[50];
    Year: integer;
    Category: String[10];
  end;
  tWorkers = array[1..nMax] of Workers;
 
var
  Lit: tWorkers;
  f: file of Workers;
  fname: String[30];
  m, i: byte;
  cont: char;
  tmp: Workers;
 
procedure postYear(var wk: tWorkers; n: byte);
var
  post: integer;
begin
  writeln('После какого года отобразить публикации?: ');
  readln(post);
  writeln('Публикации после ', post, ' года'); 
  for var i: byte := 1 to n do 
  begin
    if wk[i].Year > post then 
      writeln(wk[i].Literary, wk[i].Author, wk[i].Year, wk[i].Category); 
  end;
end;
 
 
 
begin
  
  
  m := 1;
  writeln('Программа "Библиографический список" '); 
  writeln('1 - Создать новый файл'); 
  writeln('2 - Обработать существующий файл'); 
  writeln('3 - Завершить работу программы'); 
  
  while m <> 3 do
  begin
    readln(m);
    case m of
      1:
        begin
          write('Введите имя файла: ');
          readln(fname);
          writeln('Файл ', fname, ' создан');
          assign(f, fname); 
          rewrite(f);
          i := 1;
          cont := 'y';
          while cont = 'y' do 
            with tmp do
            begin
              writeln('Введите название  ', i, '-литерат. источнка');readln(Literary); 
              write('ФИО автора: ');readln(Author);
              write('Год издания: ');readln(Year); 
              write('Категория( книга или статья? ): ');
              readln(Category);
              write(f, tmp); 
              Lit[i ] := tmp;
              i := i + 1;
              write('Клавиша y – продолжить ввод, другая  – прекратить ввод : ');
              readln(cont); 
              writeln;
              writeln('1 - Создать новый файл'); 
              writeln('2 - Посмотреть существующий файл'); 
              writeln('3 - Завершить работу программы'); 
            end;
          close(f);
        end;
      2:
        begin
          write('Введите имя файла '); 
          readln(fname); 
          assign(f, fname); 
          reset(f);
          i := 0; 
          while not eof(f) do
          begin
            i := i + 1; 
            read(f, tmp);
            lit[i] := tmp;
          end; 
          close(f);
          for i := 1 to nMax do 
            with Lit[i] do 
              write(Literary, ' ', Author, ' ', Year, ' ', Category);
          writeln;
          postYear(Lit, nMax);
        end;
    end;
  end;
end.
1
0 / 0 / 1
Регистрация: 12.03.2018
Сообщений: 331
26.05.2018, 19:30  [ТС]
Объяснит, почему читает одну строку?
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
26.05.2018, 19:47
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Цитата Сообщение от koks_ikkkk Посмотреть сообщение
writeln(f, Literary:15, Author:50, Year:15, Category:10);
Ввели в файл 1 строку из 4х слов разделенных пробелами

А прочитать пытаетесь считать поля записи
readln(f, Literary, Author, Year, Category);

Читать тогда нужно так
Pascal
1
2
3
4
5
6
7
8
9
readln(f,s);//прочитали строку из файла
while pos('  ',s)>0 do delete(s,pos('  ',s),1);//удалим лишние пробелы
Literary:=copy(s,1,pos(' ',s)-1);//получили первое поле
delete(s,1,pos(' ',s));//удалили начало строки
Author:=copy(s,1,pos(' ',s)-1);//получили второе поле
delete(s,1,pos(' ',s));//удалили начало строки
Year:=strtoint(copy(s,1,pos(' ',s)-1));//получили год
delete(s,1,pos(' ',s));//удалили начало строки
Category:=s;//остаток строки 4 поле
0
0 / 0 / 1
Регистрация: 12.03.2018
Сообщений: 331
26.05.2018, 21:15  [ТС]
Тогда не пойму, почему работает похожая программа? ( Тоже тип текстовый )

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
108
109
110
111
112
113
114
115
program lab6;
 
const nMax = 10;
 
type
  Workers = record
    Surname: String[20];
    Initials: String[5];
    Status: String[20];
    Year: integer;
    Salary: integer;
  end;
  tWorkers = array[1..nMax] of Workers;
 
var
  People: tWorkers;
  f: Text;
  fname: String[30];
  m, i: byte;
  cont: char;
  tmp: Workers;
 
procedure nowYear(var wk: tWorkers; n: byte);
begin
  writeln('Сотрудники, которые были приняты в 2018г. :'); 
  for var i: byte := 1 to n do 
  begin
    if wk[i].Year = 2018 then 
      writeln(wk[i].Surname:20, wk[i].Initials:5, wk[i].Status:20, wk[i].Salary:20); 
  end;
end;
 
 
 
begin
 
 
  m := 1;
      writeln('Программа "Список сотрудников предприятия" '); 
    writeln('1 - Создать новый файл'); 
    writeln('2 - Обработать существующий файл'); 
    writeln('3 - Завершить работу программы'); 
  
  while m <> 3 do
  begin
    
    readln(m);
    
    case m of
      1:
        begin
          write('Введите имя файла: ');
          readln(fname);
          writeln('Файл ', fname, ' создан');
          
          assign(f, fname); 
          rewrite(f);
          
          i := 1;
          
          cont := 'y';
          while cont = 'y' do 
            with tmp do
            begin
              writeln('Введите данные  ', i,  '-итого сотрудника'); 
              write('Фамилия: ');  readln(Surname); 
              write('Инициалы: ');      readln(Initials);
              write('Должность: ');      readln(Status); 
              write('Год приёма: ');   readln(Year); 
              write('Оклад: ');   readln(Salary); 
              writeln(f, Surname:20, Initials:5, Status:20, 
Year:20, Salary:20); 
              People[ i ]:=tmp;
              i := i + 1;
              
              write('Клавиша y – продолжить ввод, другая  – прекратить ввод : ');
              readln(cont); 
              
              writeln();
              writeln();
              
              writeln('1 - Создать новый файл'); 
    writeln('2 - Посмотреть существующий файл'); 
    writeln('3 - Завершить работу программы'); 
            end;
          close(f);
        end;
      2:
        begin
          write('Введите имя файла '); 
          readln(fname); 
          assign(f, fname); 
          reset(f);
          i := 0; 
          while not eof(f) do
          begin
          i := i + 1; 
            with People[i] do
              readln(f, Surname, Initials, Status, Year, Salary); 
          end; 
          
          close(f);
          for i := 1 to nMax do 
            with People[i] do 
              writeln(Surname:20, Initials:5, Status:20, 
     Year:20, Salary:20);
     writeln();
NowYear(People, nMax);
        end;
    
    end;
    
  end;
 
end.
Добавлено через 1 час 2 минуты
разобрался
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.05.2018, 21:15
Помогаю со студенческими работами здесь

Считыванием данных из файла в массив
На днях начал изучать Qt GUI, и столкнулся с проблемой, не могу считать матрицу с файла, может кто помочь? Есть .txt файл, с данными: ...

Сложность со считыванием данных из файла в массив
Программа должна по нажатию кнопки считывать из файла числа и записывать их в массивы структуры. Для реализации я написал вот такой код: ...

Трабл с считыванием данных из бинарного файла
суть проблемы, программа отлично работает с данными после запуска, считывает и записывает на диск как и положенно (это не сложно проверить...

Проблема считыванием данных из файла (Fortran 90)
Доброго времени суток. Написал программку по считыванию данных из столбцов столбцов Y1-1,Z-1,My-1,Mz-1,Y1-2,Z-2,My-2,Mz-2 из 3M9.dat...

Ошибка со считыванием массива String
import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class contestSecond { ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru