Автор: 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
Был бы файл не тектовый я бы давно бы уже сделал
Автор: ___ALex___ 2.05.2003 20:28
щас если до хоккея успею напишу
Автор: 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;
Вопрос из зала: на виндовом пасе сидишь? Ну и как?