![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Turbo Pascal 7. Использование BlockWrite, BlockRead [XP]
worldmen © (2010-03-02 00:35:00)Нужно написать прогу на Турбо Паскале с использованием BlockWrite, BlockRead. Я ниразу их не использовал, поэтому плохо получается. Прога должна обработать текстовый файл (оценки студентов), и записать обработанные данные в нетипизированный файл.
Вот чего я написал:
Uses crt;
Type
stydents= record
familia: string[15];
ocenki : array [1..10] of integer;
srBal : real;
End;
Var
FailOut : File;
FailTxt : Text;
F01,F02,F22: string;
x,y, bal, pbal: integer;
i,o : integer;
stydent : array[1..40] of stydents;
temp : stydents;
kolvoSt : integer; {кол-во студентов в списке }
Buf : integer;
BEGIN
{ F01:= 'Student.txt'; {Vhodn
F02:= 'Student.dat';
F22:= 'StudOut.dat';}
Assign (FailTxt,'Student.txt');
Reset(FailTxt);
Readln(FailTxt, pbal); {проходной бал }
kolvoSt:=0;
While not EOF(FailTxt) do
begin
y:=0; {kol-vo ocenok }
x:=0; {kol-vo studentov }
bal:=0;
Read(FailTxt, temp.familia);
while not Eoln(FailTxt) do
begin
inc(y);
Read(FailTxt, temp.ocenki[y]);
bal:=bal+temp.ocenki[y];
end;
Readln(FailTxt);
inc(x);
temp.srBal:=bal/y; {средний бал}
kolvoSt:=kolvoSt+1;
stydent[kolvoSt]:=temp;
end;
Close(FailTxt);
Assign (FailOut,'StudOut.dat');
Buf:=SizeOf(stydent);
ReWrite(FailOut, Buf);
BlockWrite(FailOut,stydent,Buf);
Close(FailOut);
End.
Содержание файла Student.txt:
4 - Проходной бал
Иванов И.Н. 2 4 9 6
Петров С.В. 5 9 8 1
Сидоров А.В. 6 8 2 8
Возникает ошибка: " Runtime error 101" на
BlockWrite(FailOut,stydent,Buf);
Anatoly Podgoretsky (2010-03-04 21:27:00) [1]> worldmen (04.03.2010 21:21:06) [6]
http://www.podgoretsky.com/Redir.aspx?id=143&DownloadFile=~/ddp/PasFiles.aspx
Anatoly Podgoretsky (2010-03-04 21:26:00) [2]> worldmen (04.03.2010 21:23:07) [7]
А для типизированого файла это не важно, работа ведется не с позициями, а с типами.
worldmen (2010-03-04 21:23:00) [3]Думаю они в таком виде:
Иванов И.Н. 2 4 9 6Петров С.В. 5981Сидоров А.В. 6828
worldmen (2010-03-04 21:21:00) [4]Спасибо, получилось. (нетипизироваными файлами я уже сделал, мне надо теперь типизированными сделать).
А как теперь считать эту инфу из этого файла StudOut.dat, если там записи должны быть в виде... Я даже незнаю в каком виде.
Anatoly Podgoretsky (2010-03-02 11:27:00) [5]А главная придирка будет, почему сдалано с помощью нетипизированых файлов, когда здесь сильно напрашивается типизированый файл.
И конечно правильное название типов и переменных, что бы не было подобного бардака как
Type
stydents= record
и
var
stydent : array[1..40] of stydents;
Тут еще нелады со множесвенным и единсвенным
icWasya (2010-03-02 09:51:00) [6]В rewrite/reset указывается размер одной записи;
в BlockRead/BlockWrite указывается количество записейэтого размера.
поэтому либо так
Buf:=SizeOf(stydent);
ReWrite(FailOut, Buf);
BlockWrite(FailOut,stydent,1);
либо так
Buf:=SizeOf(stydent);
ReWrite(FailOut, 1);
BlockWrite(FailOut,stydent,Buf);
И при чтении соответственно
---
И на будущее называй переменные и типы так, что бы тебя другие понимали и сам не путался.
Например
вместо
type students = record
нужно
type TStudent = record
- почему студенты, хотя описывается один студент
Вместо
Buf:Integer
нужно например
BufLen:Integer
Как правило именем Buf называют массив, в который что-то пишут, а здесь это длина массива
Ну и после этого массив всех студентов вместо
student:array ...
назвать
students:array ...
Это конечно придирки, но препод тоже может прицепиться
Германн (2010-03-02 01:21:00) [7]
> в турбо паскале тоже есть отладчик
>
> Возникает ошибка: "Runtime error 101" на
> BlockWrite(FailOut,stydent,Buf);
>
Ну как бы, Игорь.
Отладчик уже задействован. А вопрос в "Начинающим".
Игорь Шевченко (2010-03-02 00:55:00) [8]в турбо паскале тоже есть отладчик
Германн (2010-03-02 00:50:00) [9]
> ReWrite(FailOut, Buf);
Объясни эту строку. Как и что тут должно выполниться?