Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 03.01.2013, 13:51   #1
neytron007
Пользователь
 
Регистрация: 05.10.2012
Сообщений: 15
По умолчанию [Delphi]Удалить в файле целых чисел определенные числа.(работает некорректно)

Дан файл целых чисел. Удалить из него положительные/отрицательные/четные/нечетные числа. Проблема в том, что постоянно удаляет только последнее число (иногда даже не полностью, если это отрицательное, то не удаляет "-"). Пробовал любые расширения файлов: int,dat,txt... С любыми одно и то же. Помогите, что неверно?

Код:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Lib;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    ButtonPol: TButton;
    ButtonOtr: TButton;
    ButtonCh: TButton;
    ButtonNeCh: TButton;
    procedure FormShow(Sender: TObject);
    procedure ButtonPolClick(Sender: TObject);
    procedure ButtonOtrClick(Sender: TObject);
    procedure ButtonChClick(Sender: TObject);
    procedure ButtonNeChClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
  Memo1.Lines.LoadFromFile('1.txt');
end;

procedure TForm1.ButtonPolClick(Sender: TObject);  //удалить положительные
begin
  Pol;
  Memo1.Lines.LoadFromFile('1.txt'); //заново заполняем мемо
end;

procedure TForm1.ButtonOtrClick(Sender: TObject);  //удалить отрицательные
begin
  Otr;
  Memo1.Lines.LoadFromFile('1.txt'); //заново заполняем мемо
end;

procedure TForm1.ButtonChClick(Sender: TObject);    //удалить четные
begin
  Ch;
  Memo1.Lines.LoadFromFile('1.txt'); //заново заполняем мемо
end;

procedure TForm1.ButtonNeChClick(Sender: TObject);   //удалить нечетные
begin
  Nech;
  Memo1.Lines.LoadFromFile('1.txt'); //заново заполняем мемо
end;

end.


Вот юнит Lib:
Код:
unit Lib;

interface

uses
  SysUtils;

var
  f,f1: file of Integer;
  i: Integer;
  procedure Pol;
  procedure Otr;
  procedure Ch;
  procedure Nech;
implementation

procedure Pol;
begin
  AssignFile(f,'1.txt');
  Reset(f);
  Assign(f1,'1_copy.txt'); //создаем вспомогательный файл
  Rewrite(f1);
  while not Eof(f) do
  begin
    read(f,i);
    if i<=0 then Write(f1,i); //записываем в него неотрицательные числа
  end;
  CloseFile(f);
  CloseFile(f1);

  Erase(f);  //удаляем остновной файл
  Rename(F1,'1.txt'); //переименовываем вспомогательный в основной
end;

procedure Otr;
begin
  AssignFile(f,'1.txt');
  Reset(f);
  Assign(f1,'1_copy.txt'); //создаем вспомогательный файл
  Rewrite(f1);
  while not Eof(f) do
  begin
    read(f,i);
    if i>=0 then Write(f1,i); //записываем в него неположительные числа
  end;
  CloseFile(f);
  CloseFile(f1);

  Erase(f);  //удаляем остновной файл
  Rename(F1,'1.txt'); //переименовываем вспомогательный в основной
end;

procedure Ch;
begin
  AssignFile(f,'1.txt');
  Reset(f);
  Assign(f1,'1_copy.txt'); //создаем вспомогательный файл
  Rewrite(f1);
  while not Eof(f) do
  begin
    read(f,i);
    if (i mod 2 =1) then Write(f1,i); //записываем в него нечетные числа
  end;
  CloseFile(f);
  CloseFile(f1);

  Erase(f);  //удаляем остновной файл
  Rename(F1,'1.txt'); //переименовываем вспомогательный в основной
end;

procedure NeCh;
begin
  AssignFile(f,'1.txt');
  Reset(f);
  Assign(f1,'1_copy.txt'); //создаем вспомогательный файл
  Rewrite(f1);
  while not Eof(f) do
  begin
    read(f,i);
    if (i mod 2 = 0) then Write(f1,i); //записываем в него четные числа
  end;
  CloseFile(f);
  CloseFile(f1);

  Erase(f);  //удаляем остновной файл
  Rename(F1,'1.txt'); //переименовываем вспомогательный в основной
end;

end.
neytron007 вне форума
Старый 04.01.2013, 08:43   #2
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Ну, во-первых:
Цитата:
Код:
f,f1: file of Integer;
и
Цитата:
Код:
Memo1.Lines.LoadFromFile('1.txt');
И сразу:
Код:
    if (i mod 2 =1) then Write(f1,i); //записываем в него нечетные числа
нужно заменить на
Код:
    if (i mod 2 <> 0) then Write(f1, i, ' '); //записываем в него нечетные числа
Для нечетных отрицательных чисел i mod 2 = -1

Последний раз редактировалось Sibedir; 04.01.2013 в 08:56.
Sibedir вне форума
Старый 04.01.2013, 14:51   #3
neytron007
Пользователь
 
Регистрация: 05.10.2012
Сообщений: 15
По умолчанию

ну а какое тогда расширение использовать? я разные пробовал, ни с каким не получается. И как можно вписывать ' ' если файл целых чисел? он пишет несовместимые типы integer и char
neytron007 вне форума
Старый 05.01.2013, 13:53   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
ну а какое тогда расширение использовать? я разные пробовал, ни с каким не получается.
расширение не при чём, это Ваш файл, можете ему давать ЛЮБОЕ удобное (подходящее на ваш взгляд расширение). Хоть .BIN, хоть .DAT, хоть .INT. (можете даже вообще никакого расширения не давать, это в данном случае, ровным счётом ни на что не влияет!)

Цитата:
И как можно вписывать ' ' если файл целых чисел?
никак. Файл целых чисел (он же типизированный файл, т.е. файл, компонентами которого являются целые числа) фактически является БИНАРНЫМ (двоичным) файлом. Каждая его компонента является целым числом. Ни Вы, ни кто другой не может записать в файл ничего другого, отличного от целого числа.

Вам нужно понять только одну очень простую вещь.
Типизированный файл может быть СОЗДАН, ИЗМЕНЁН, или ПРОСМОТРЕН (вывод содержимого) только программым путём. Его нельзя создать и редактировать в обычном текстовом редакторе. При попытке открыть такой файл в блокноте, например, Вы увидите "кракозябры"!
Поэтому Вы должны a) написать программу, которая создаёт типизирвоанный файл
b) написать программу, которая отображает содержимое типизированного файла
и только после этого можете писать программу обработки файла.

p.s. очень часто функции создания, редактирования, обработки и просмотра типизированных файлов включают в одну программу, вызов нужного действия осуществляют через меню (любого вида, хоть простейшее, консольное, где перечисляются все варианты, и пользователь вводит число, обознающие нужное действие). На форуме полно примеров обработки типизированных файлов...
Serge_Bliznykov вне форума
Старый 05.01.2013, 15:23   #5
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

neytron007, а почему вам не подходит
Код:
f,f1: TextFile;
?
В него можно и числа записывать
Код:
Write (f1, -51, ' ');
Там число будет храниться как обыктовенная текстовая надпись: '-51'.
Его и в Memo можно загрузить
Код:
Memo1.Lines.LoadFromFile('1.txt');
и вообще в любом редакторе типа Блакнота просмотреть и отредактировать.
Для начинающих самое оно.

Последний раз редактировалось Sibedir; 05.01.2013 в 15:28.
Sibedir вне форума
Старый 05.01.2013, 22:24   #6
neytron007
Пользователь
 
Регистрация: 05.10.2012
Сообщений: 15
По умолчанию

Serge_Bliznykov, спасибо! всё понял, разобрался, сделал, как посоветовали, работает! а то я через блокнот заполнял :D
neytron007 вне форума
Старый 06.01.2013, 00:59   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

отлично, поздравляю!

Тему закрываем?
Serge_Bliznykov вне форума
Старый 06.01.2013, 18:40   #8
neytron007
Пользователь
 
Регистрация: 05.10.2012
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Тему закрываем?
да, конечно
neytron007 вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан файл целых чисел. Удалить из него все отрицательные числа vaako Паскаль, Turbo Pascal, PascalABC.NET 5 12.04.2012 22:45
найти минимальный элемент в файле целых чисел viknik Помощь студентам 1 16.12.2011 07:20
вывести массив целых чисел в файле по одному в строке newstudent777 Паскаль, Turbo Pascal, PascalABC.NET 12 22.09.2011 22:17
подсчитать количество элементов в файле целых чисел Aimet Паскаль, Turbo Pascal, PascalABC.NET 0 16.06.2011 20:11