Помощь - Поиск - Пользователи - Календарь
Полная версия: Запись в текстовый фаил
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Spaun
Здравствуйте есть программа и для нее надо организовать запись результатов работы программы в текстовый фаил. Не могли бы кто нибудь подсказать как осуществить сие действие.
Вот код:

program nomer4;
uses crt;
type
sport=record
sur:string;
name:string;
nomber:integer;
ass:byte;
res:integer;
end;
var
mas:array[1..100] of sport;
x,y:real;
n,i,maxI,minI:integer;
g:text;
procedure spisok(x:real);
begin
writeln('Самый лучший и худший из результатов :');
writeln;
writeln;
writeln('-------------------------------------------');
writeln('Фамилия|',' Имя |','Номер школы|','Класс|','Результат|');
writeln('-------------------------------------------');
maxI := 1;
minI := 1;
for i:=2 to n do begin
if mas[i].res > mas[maxI].res then maxI:=i;
if mas[i].res < mas[minI].res then minI:=i;
end;
begin
writeln(mas[maxI].sur:7,'|',mas[maxI].name:7,'|',mas[maxI].nomber:11,'|',mas[maxI].ass:5,'|',mas[maxI].res:9,'|');
writeln(mas[minI].sur:7,'|',mas[minI].name:7,'|',mas[minI].nomber:11,'|',mas[minI].ass:5,'|',mas[minI].res:9,'|');
end;

writeln('--------------------------------------------');
end;
BEGIN
assign (g, 'C:\123.txt');
rewrite (g);
clrscr;
writeln('Введите количество спортсменов');
readln(n);
for i:=1 to n do
begin
writeln('Введите фамилию');readln(mas[i].sur);
writeln('Введите имя');readln(mas[i].name);
writeln('Введите номер школы');readln(mas[i].nomber);
writeln('Введите класс');readln(mas[i].ass);
writeln('Введите результат');readln(mas[i].res);
writeln('___________________________________________________________________');
end;
clrscr;
writeln('-------------------------------------------');
writeln('Фамилия|',' Имя |','Номер школы|','Класс|','Результат|');
writeln('-------------------------------------------');
for i:=1 to n do
begin
writeln(mas[i].sur:7,'|',mas[i].name:7,'|',mas[i].nomber:11,'|',mas[i].ass:5,'|',mas[i].res:9,'|');
end;
writeln('-------------------------------------------');
writeln;
writeln;
writeln;
spisok(x);
close(g)
end.


Alеx J'Root
Где-то я это уже видел ))

Если хочешь занести в файл, то везде где ты выводишь на экран инфу с помощью writeln('Инфа'), заменяешь на writeln(g,'Инфа');

volvo
Угу... И написать все дважды, да? Первый раз - для вывода на экран, а второй - в файл...

Все проще гораздо: выносишь все действия по выводу информации (и ТОЛЬКО выводу, все подсчеты и вычисления делаются заранее, и никакого отношения к этой процедуре иметь не должны) в отдельную процедуру:
procedure WriteResults(var f: text);
begin
{ __Всё__ выводим в файл f }
end;

, и при необходимости напечатать те же данные на экране -

WriteResults(output);
Spaun
Цитата(volvo)

Угу... И написать все дважды, да? Первый раз - для вывода на экран, а второй - в файл...

Все проще гораздо: выносишь все действия по выводу информации (и ТОЛЬКО выводу, все подсчеты и вычисления делаются заранее, и никакого отношения к этой процедуре иметь не должны) в отдельную процедуру:

procedure WriteResults(var f: text);
begin
{ __Всё__ выводим в файл f }
end;




, и при необходимости напечатать те же данные на экране -

WriteResults(output);






Да но как тогда сделать чтобы чтобы обращение в процедуру было все время за разными данными, или просто сделать несколько процедур, да и еще не объяснишь как с помощью
Цитата(volvo)
WriteResults(output); 
сделать вывод данных на экран, а то понять не могу как оно должно работать.
Spaun
подскажите пожалуйста как организовать добавление данных и результатов поиска в существующий файл.
буду очень благодарен..
есть в принципе вариант вместо
 ...
rewrite (g);
...

поставить
 append (g);

единственное что от этого измениться так это то чту будет до запись в фаил и то неизвестно как а вот по поводу поиска... незнаю.. mad.gif
volvo
Цитата
Да но как тогда сделать чтобы чтобы обращение в процедуру было все время за разными данными
У тебя в программе нет разных данных, вычисляется только мин/макс, поэтому было предложено такое решение. Если тебе надо вычислять каждый раз разные вещи - об этом надо было говорить сразу. Уточняй, что именно может понадобиться выводить в файл...

Цитата
понять не могу как оно должно работать.
С экраном (она же консоль) можно работать точно так же, как с обычным текстовым файлом... Для этого нужно либо самому связать файл с устройством CON:
Assign(f, 'CON'); Rewrite(f);
... { Здесь - вывод в файл (в смысле, на экран) }
Close(f);

либо воспользоваться стандартным паскалевским файлом output, который уже связан с этим устройством...

Цитата
единственное что от этого измениться так это то чту будет дозапись в фаил и то неизвестно
wacko.gif Что неизвестно? Что будет добавление? Используешь Append, значит, информация будет добавляться...
Alеx J'Root
Поиск по фамилии:

Procedure Search;
Var
i:integer;
sur:string;
fl:boolean;
Begin
Assign(g,'C:\123.txt');
Reset(g);
writeln('Введите фамилию для поиска: ');
readln(sur);
fl:=false;
For i:=1 to n do
begin
read(g,mas[i].sur);
If sur=mas[i].sur then
begin
writeln('Фамилия: ', mas[i].sur);
writeln('Имя: ', mas[i].name);
writeln('Номер школы: ', mas[i].nomber);
writeln('Класс: ', mas[i].ass);
writeln('Результат: ', mas[i].res);
writeln('___________________________________________________________________');
fl:=true;
end;
end;
If not fl then
writeln('Записи с такой фамилией нет!');
readln;
end;
Spaun
В таком случае не могли бы вы мне помочь организовать типизированный фаил... unsure.gif
Alеx J'Root
Это процедура поиска работает и с текстовым файлом. smile.gif Хотя я её не тестил писал прямо тут, но должно работать.

А добаление.. просто тебе нужно открыть файл через Append(g) и записывать дальше.
Spaun
Цитата(Alеx J'Root)
А добаление.. просто тебе нужно открыть файл через Append(g) и записывать дальше.

спасибо конечно, с этим я уже разобрался но меня стал интересовать вопрос если эту же программу сделать через "типизированный фаил" то менять можно будет любое значение и поиск упроститься...?
Alеx J'Root
Цитата
менять можно будет любое значение

Не понял blink.gif Например, найти запись в файле и помять ей результат???
Цитата
поиск упроститься

нет


P.S. это лично моё мнение smile.gif
Spaun
а в чем же тогда преимущества типизированного файла?
Alеx J'Root
Он использует меньше памяти, когда работаешь с числами, т.к. на каждое число 2 байта, а в текстовом на каждую цифру по 1-ому + пробелы. А когда работаешь с текстом, то всё зависит от задачи. А вообще почитай книжки smile.gif
volvo
Цитата
а в чем же тогда преимущества типизированного файла?
Изменение любой записи без необходимости переписывания всех остальных (т.е., прямой, а НЕ последовательный доступ) - достаточное преимущество?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.