Помощь - Поиск - Пользователи - Календарь
Полная версия: Файлы
Форум «Всё о Паскале» > 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 Единственное, что мне не нравится - то, что файл может увеличиться, например, вдвое, принимая во внимание огромные размеры, это может вызвать определенные проблемы. Я бы предложил делать проверку не на ненулевые элементы, а на нулевые, тогда вероятность того, что файл увеличится вдвое, будет меньше.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.