Помощь - Поиск - Пользователи - Календарь
Полная версия: Файлы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
freak
В общем задачка... Ввести файл F целых чисел и выдать его на печать. Удалить из него все компоненты, равные нулю (вспомагательный файл не использовать). Решите плз, очень прошу... mega_chok.gif
мисс_граффити
то есть сам хоть какие-то усилия предпринять ты не готов?..
freak
Честно отвечу, что нет... но очень надеюсь на вашу помощь...
Sozialist
Записываешь в файл и вектор одновременно, выводишь из файла, удаляешь из вектора нули, стираешь содержимое файла, записываешь из вектора, например. А еще лучше сразу с условием записывать в вектор только ненулевые элементы. Тут делов на 2 минуты
Lapp
Цитата(Sozialist @ 22.11.2007 4:41) *

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

Sozialist, что ты называешь вектором? массив?
Хорошо, а если файл на на пару гигов - тогда как? smile.gif
Sozialist
Lapp
Пусть текстовый smile.gif Я не могу представить файл на 2 гига blink.gif на деле
Lapp
Цитата(Sozialist @ 22.11.2007 9:56) *

Пусть текстовый smile.gif Я не могу представить файл на 2 гига blink.gif на деле
Нет, текстовых у меня таких нет. А бинарных - полно.. smile.gif
Sozialist
Ну а какие тогда структуры использовать? Я не встречался с подобным переполнением.
Lapp
А никакие 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
Отлично! Забыл про truncate mega_chok.gif Единственное, что мне не нравится - то, что файл может увеличиться, например, вдвое, принимая во внимание огромные размеры, это может вызвать определенные проблемы. Я бы предложил делать проверку не на ненулевые элементы, а на нулевые, тогда вероятность того, что файл увеличится вдвое, будет меньше.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.