Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизTurbo Pascal 7. Использование BlockWrite, BlockRead Найти похожие ветки
← →
worldmen (2010-03-02 00:35) [0]Нужно написать прогу на Турбо Паскале с использованием 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);
← →
Германн © (2010-03-02 00:50) [1]
> ReWrite(FailOut, Buf);
Объясни эту строку. Как и что тут должно выполниться?
← →
Игорь Шевченко © (2010-03-02 00:55) [2]в турбо паскале тоже есть отладчик
← →
Германн © (2010-03-02 01:21) [3]
> в турбо паскале тоже есть отладчик
>
> Возникает ошибка: "Runtime error 101" на
> BlockWrite(FailOut,stydent,Buf);
>
Ну как бы, Игорь.
Отладчик уже задействован. А вопрос в "Начинающим".
← →
icWasya © (2010-03-02 09:51) [4]В 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 ...
Это конечно придирки, но препод тоже может прицепиться
← →
Anatoly Podgoretsky © (2010-03-02 11:27) [5]А главная придирка будет, почему сдалано с помощью нетипизированых файлов, когда здесь сильно напрашивается типизированый файл.
И конечно правильное название типов и переменных, что бы не было подобного бардака какType
stydents= record
иvar
stydent : array[1..40] of stydents;
Тут еще нелады со множесвенным и единсвенным
← →
worldmen (2010-03-04 21:21) [6]Спасибо, получилось. (нетипизироваными файлами я уже сделал, мне надо теперь типизированными сделать).
А как теперь считать эту инфу из этого файла StudOut.dat, если там записи должны быть в виде... Я даже незнаю в каком виде.
← →
worldmen (2010-03-04 21:23) [7]Думаю они в таком виде:
Иванов И.Н. 2 4 9 6Петров С.В. 5981Сидоров А.В. 6828
← →
Anatoly Podgoretsky © (2010-03-04 21:26) [8]> worldmen (04.03.2010 21:23:07) [7]
А для типизированого файла это не важно, работа ведется не с позициями, а с типами.
← →
Anatoly Podgoretsky © (2010-03-04 21:27) [9]> worldmen (04.03.2010 21:21:06) [6]
http://www.podgoretsky.com/Redir.aspx?id=143&DownloadFile=~/ddp/PasFiles.aspx
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.078 c