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

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

Форум «Всё о Паскале» _ Задачи _ Файлы

Автор: freak 21.11.2007 21:18

В общем задачка... Ввести файл F целых чисел и выдать его на печать. Удалить из него все компоненты, равные нулю (вспомагательный файл не использовать). Решите плз, очень прошу... mega_chok.gif

Автор: мисс_граффити 21.11.2007 21:32

то есть сам хоть какие-то усилия предпринять ты не готов?..

Автор: freak 22.11.2007 1:02

Честно отвечу, что нет... но очень надеюсь на вашу помощь...

Автор: Sozialist 22.11.2007 8:41

Записываешь в файл и вектор одновременно, выводишь из файла, удаляешь из вектора нули, стираешь содержимое файла, записываешь из вектора, например. А еще лучше сразу с условием записывать в вектор только ненулевые элементы. Тут делов на 2 минуты

Автор: Lapp 22.11.2007 12:17

Цитата(Sozialist @ 22.11.2007 4:41) *

Записываешь в файл и вектор одновременно, ...

Sozialist, что ты называешь вектором? массив?
Хорошо, а если файл на на пару гигов - тогда как? smile.gif

Автор: Sozialist 22.11.2007 13:56

Lapp
Пусть текстовый smile.gif Я не могу представить файл на 2 гига blink.gif на деле

Автор: Lapp 22.11.2007 14:08

Цитата(Sozialist @ 22.11.2007 9:56) *

Пусть текстовый smile.gif Я не могу представить файл на 2 гига blink.gif на деле
Нет, текстовых у меня таких нет. А бинарных - полно.. smile.gif

Автор: Sozialist 22.11.2007 17:25

Ну а какие тогда структуры использовать? Я не встречался с подобным переполнением.

Автор: Lapp 22.11.2007 17:36

А никакие smile.gif. Только сам файл.
Можно, например, так:

var
f:file of integer;
i,j,k,s:LongInt;
z:boolean;

begin
Assign(f,'t');
ReSet(f);
i:=0;
j:=0;
z:=false;
s:=FileSize(f);
while j<s do begin
Seek(f,j);
Read(f,k);
if k<>0 then begin
if z then begin
Seek(f,i);
Write(f,k)
end;
Inc(i)
end
else z:=true;
Inc(j);
end;
Seek(f,i);
Truncate(f);
Close(f)
end.

Автор: Sozialist 22.11.2007 22:45

Отлично! Забыл про truncate mega_chok.gif Единственное, что мне не нравится - то, что файл может увеличиться, например, вдвое, принимая во внимание огромные размеры, это может вызвать определенные проблемы. Я бы предложил делать проверку не на ненулевые элементы, а на нулевые, тогда вероятность того, что файл увеличится вдвое, будет меньше.