элементы в типизированном файле
-
- Сообщения: 21
- Зарегистрирован: 13 окт 2013, 22:33
задача стоит в следующем: нужно не используя оператора seek вставить в типизированный файл вставить любые элементы на начало файла и в середину. но обязательно без seek. была мысль как-то через pos и insert, но не доганяю как это сделать. пожалуйста обьясните
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Если открыть файл в режиме изменения (чтения и записи), то seek(x) — это reset (прыжок в начало), а потом read (x-1) раз.
Read тоже двигает курсор
Read тоже двигает курсор
-
- Сообщения: 21
- Зарегистрирован: 13 окт 2013, 22:33
Assign(f),'fail.dat');
Reset(f);
Writeln('vvedi dani');
Readln(тут типа считали);
Writeln('vvedi dani');
Readln(опять например считали);
//дальше что?
read(x-1); ??так я понял?
Reset(f);
Writeln('vvedi dani');
Readln(тут типа считали);
Writeln('vvedi dani');
Readln(опять например считали);
//дальше что?
read(x-1); ??так я понял?
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Так я не понял, файл у Вас типизированный или нет?
-
- Сообщения: 21
- Зарегистрирован: 13 окт 2013, 22:33
да типизированный. было сказано сделать с seek и без него. я уже сделал с seek и понял что это именно типизированный файл.
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Ну так свой пример с seek дайте. Не писать же мне всё с нуля!
-
- Сообщения: 21
- Зарегистрирован: 13 окт 2013, 22:33
Код: Выделить всё
type
dani=record
stroka:string[45];
cifra,b:real;
end;
var
sh:dani;
f:file of dani;
d:dani;
begin
Assign(f , 'd:\test.dat');
Rewrite(F);
With sh do begin
writeln('vvedi stroky');
readln(sh.stroka);
Writeln('vvedi cifry');
readln(sh.cifra);
readln(d.b);
end;
Seek(f,0);
Write(f,sh);
seek(f,128);
write(f,d);
Close(F);
End.
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Код: Выделить всё
type
dani=record
stroka:string[45];
cifra,b:real;
end;
var
sh:dani;
f:file of dani;
d:dani;
i:integer;
begin
Assign(f , 'c:\tmp\test.dat');
Rewrite(F);
With sh do begin
writeln('vvedi stroky');
readln(sh.stroka);
Writeln('vvedi cifry');
readln(sh.cifra);
readln(d.b);
end;
Seek(f,0);
Write(f,sh);
seek(f,128);
write(f,d);
Close(F);
reset(f);
read(f,d);
writeln('Stroka:',d.stroka,' cifra:',d.cifra,' b:',d.b);
for i:=0 to 127 do read(f,d);
writeln('Stroka:',d.stroka,' cifra:',d.cifra,' b:',d.b);
close(f);
End.
а
for i:=0 to 127 do read(f ,d) ; — это как раз замена Seek(f,128), но 127 здесь не абсолютная позиция, а +127 к позиции 1, после того, как одно чтение уже было выполнено
-
- Сообщения: 21
- Зарегистрирован: 13 окт 2013, 22:33
но всеравно в программе встречаеться вашей seek ... ладно и на том спасибо