Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ "Сырая прога"

Автор: jackal 2.05.2003 13:46

Люди посмотрите мою ещё "сырую" прогу!

Привет всем!
Вот имеется прога по файлам:
Имеется текстовфй файл. Нужно поменять в файле максимальную строку на минимальную и наооборот.(Естесственно записать всё это в файл).

Максимум и минимум в файле нашёл. Но как поменять? И записать?
Пробовал через write(f,x) пишет Runtime 105 error! Подскажите плиз!

Код
program kontr1;
uses wincrt;
type myfile=text;
var f:myfile;  a,max,min1:string;
   min:byte;
begin
assign(f,'e:bptimka1.txt');
reset(f);
max:='';
min:=255;
while not eof(f)  do
while not eoln(f) do
  begin
   readln(f,a);
  if length(a)>length(max) then
  max:=a;
  if length(a)<min then
     begin
     min:=length(a);
    min1:=a;
     end;
 end;

writeln(max);
writeln(min1);
close(f);
end.

Автор: AlaRic 2.05.2003 19:36

105 ошибка - файл не открыт для записи!
reset - открытие файла только для чтения, используй rewrite

Автор: jackal 2.05.2003 19:53

Alaric спасибо!
Но как же поменять максимальную на минимальную строку и наооборот(записать в файл)?

Автор: ___ALex___ 2.05.2003 19:55

Обязательно текстовый файл использовать?

Автор: GLuk 2.05.2003 19:56

Имеется ли возможность открыть второй файл для записи, после закрыть исходный, а затем переименовать получившийся?

Иначе слишком выкобениваться надо...  :-/

Автор: jackal 2.05.2003 20:07

Gluk , Да возможно и так!!!

Автор: jackal 2.05.2003 20:17

Был бы файл не тектовый я бы давно бы уже сделал smile.gif

Автор: ___ALex___ 2.05.2003 20:28

щас если до хоккея успею напишу smile.gif

Автор: jackal 2.05.2003 20:50

Всё я сам сделал!!!

Код
program kontr1;
uses wincrt;
type myfile=text;
var f,l:myfile;
   a,max,min1:string;
   min:byte;
begin
assign(f,'e:bptimka1.txt');
assign(l, 'e:bptimka2.txt')   ;
reset(f);
max:='';
min:=255;
while not eof(f)  do
while not eoln(f) do
begin
readln(f,a);
if length(a)>length(max) then
max:=a;
if length(a)<min then
begin
min:=length(a);
min1:=a;
end;
end;
close(f);
reset(f);
rewrite(l);
while not eof(f) do
begin
readln(f,a);
if a=max then writeln(l,min1) else ;
if a=min1 then writeln(l,max) else
if (a<>max) and (a<>min1) then writeln(l,a);
end;
close(f);
close(l);
erase(f);
rename(l,'e:bptimka1.txt') ;
end.

Автор: ___ALex___ 2.05.2003 21:34

Код
program For_jackal;
uses Crt;
var
 InF, OutF: Text;
 S, MaxStr, MinStr: String;
 NStrMax, NStrMin, i, MinLen: Word;
 MaxLen: Byte;

Begin

 ClrScr;
 Assign(InF, 'C:SFile.txt');
 Reset(InF);
 MaxLen := 0;
 MinLen := 256;
 while not Eof(InF) do begin
  Inc(i);
  ReadLn(InF, S);
  if MaxLen < Length(S) then begin
   MaxLen := Length(S);
   NStrMax := i;
   MaxStr := S;
  end;
  if MinLen > Length(S) then begin
   MinLen := Length(S);
   NStrMin := i;
   MinStr := S;
  end;
 end;
 if (i < 2) or (MinLen = MaxLen) then Exit;
 Assign(OutF, 'C:OutFile.txt');
 Rewrite(OutF);
 Reset(InF);
 i := 0;
 while not Eof(InF) do begin
  Inc(i);
  ReadLn(InF, S);
  if i = NStrMax then WriteLn(OutF, MinStr) else
  if i = NStrMin then WriteLn(OutF, MaxStr) else WriteLn(OutF, S);
 end;
 Close(InF);
 Erase(InF);
 Close(OutF);
 Rename(OutF, 'C:SFile.txt');
 Write('Операция прошла успешно');
 repeat until KeyPressed

End.


раз уж написал ;)

Автор: AlaRic 2.05.2003 22:45

Цитата
uses wincrt;

Вопрос из зала: на виндовом пасе сидишь? Ну и как?