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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2014, 00:47   #1
tane
Пользователь
 
Регистрация: 14.12.2013
Сообщений: 64
По умолчанию Записать в файл g компоненты файла f в обратном порядке

Организовать текстовый файл f, что состоит из N строк. После этого создать текстовый файл g, что содержит строки текстового файла f в обратном порядке.

Я правильно понял задание?Можно ли упростить код?

Код:
procedure TForm1.f1Click(Sender: TObject);
var f,g:TextFile;

begin
AssignFile(f,'f.txt');  
{$I-}  
append(f); 
if IOResult<>0 then  
begin
Rewrite(f);
{$I+}  
if IOResult<>0 then  
begin
ShowMessage('Ошибка созд файла');
Exit;
end;
end;

Memo1.Lines.SaveToFile('c:\f.txt');
CloseFile(f);
end;

procedure TForm1.N2Click(Sender: TObject);
var f:TextFile; i:Integer;
begin
AssignFile(f,'c:\g.txt');
{$I-}  
append(f); 
if IOResult<>0 then 
begin
Rewrite(f); 
{$I+}  
if IOResult<>0 then  
begin
ShowMessage('Ошибка созд файла');
Exit;
end;
end;
for i:=Memo1.Lines.Count - 1 downto 0 do
Writeln(f,reversestring(memo1.lines[i]));
CloseFile(f);
MessageDlg('данные добавлены ',mtInformation,[mbOK],0);
end;

end.
tane вне форума Ответить с цитированием
Старый 26.01.2014, 08:52   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

По моему мнению, Вы сделали неверно.
Вы смешали всё в кучу. Если Вы используете компоненты Delphi (и не факт, что это вообще допустимо в рамках решения данной задачи, это надо у преподавателя уточнять!), то используйте их корректно.

например, код на кнопку f1Click должен сохранять содержимое Memo в файл.
для этого достаточно написать так:
Код:
procedure TForm1.f1Click(Sender: TObject);
begin
  Memo1.Lines.SaveToFile('c:\f.txt');
end;
всё остальное я выкинул, это в данном случае - ересь, мусор и ерунда!
И Вы уверены, что файл f Вам вообще нужно создавать?!
По условию задачи он Вам ДАН!

теперь, что касается задания.
Цитата:
что содержит строки текстового файла f в обратном порядке.
на мой взгляд, это означает, что, если в файл f
есть строки:
строка1
строка2
....
строкаN-1
строкаN

то в файле g мы должны получить
строкаN
строкаN-1
...
строка2
строка1

и ни каких reversestring

т.е. если Вы уж используете компоненты, то код на кнопке N2Click может выглядеть так:
Код:
procedure TForm1.N2Click(Sender: TObject);
var 
   i : Integer;
   TS : TStringList;
   g : TextFile;
begin
   if Not FileExists('c:\f.txt') then begin
       ShowMessage('Нет исходного файла f.txt');
       Exit
   end;

   TS := TStringList.Create;
   TS.LoadFromFile('c:\f.txt');
  
   AssignFile(g,'c:\g.txt');
   Rewrite(g); 
   for i:=TS.Count - 1 downto 0 do
            Writeln(g, TS.Strings[i]);
   CloseFile(g);
   TS.Free;
end;

Последний раз редактировалось Serge_Bliznykov; 26.01.2014 в 20:53.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.01.2014, 19:56   #3
tane
Пользователь
 
Регистрация: 14.12.2013
Сообщений: 64
По умолчанию

Я думаю,вы правы по поводу обратной записи. Вот мой конечный вариант.
Код:
procedure TForm1.f1Click(Sender: TObject);


begin
Memo1.Lines.SaveToFile('c:\f.txt');

end;

procedure TForm1.N2Click(Sender: TObject);
var
   i : Integer;
   TS : TStringList;
   g : TextFile;
begin
   if Not FileExists('c:\f.txt') then begin
       ShowMessage('Нет исходного файла f.txt');
       Exit
   end;

   TS := TStringList.Create;
   TS.LoadFromFile('c:\f.txt');

   AssignFile(g,'c:\g.txt');
   Rewrite(g);
   for i:=TS.Count - 1 downto 0 do    
            Writeln(g, TS.Strings[i]);
   CloseFile(g);
   TS.Free;            
end;
tane вне форума Ответить с цитированием
Старый 26.01.2014, 20:58   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

угу.
извините, я в процедуре сохранения лишнюю строчку оставил от вашего кода. уже подправил. И Вы правильно её выкинули.

Ну, остальное, вроде бы всё как у меня

Имена файлов лучше в константах хранить. Чтобы в одном месте было написано:
Код:
const 
   inputFileName = 'c:\f.txt';
   outFileName = 'c:\g.txt';
....


Memo1.Lines.SaveToFile(inputFileName);

...
   if Not FileExists(inputFileName) then begin
       ShowMessage('Нет исходного файла ' + inputFileName);
       Exit
   end;
...
   TS.LoadFromFile(inputFileName);
....
    AssignFile(g,outFileName);
....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.01.2014, 23:54   #5
tane
Пользователь
 
Регистрация: 14.12.2013
Сообщений: 64
По умолчанию

Спасибо большое!
tane вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имеется типизированный файл с тридцатью числами. Записать в другой файл числа имеющегося файла в обратном порядке. Валентин77 Общие вопросы C/C++ 8 17.12.2013 22:53
Записать в файл G компоненты файла F в обратном порядке slay334 Помощь студентам 1 29.03.2013 14:50
Записать в другой файл числа имеющегося файла в обратном порядке. pascal_luzer Паскаль, Turbo Pascal, PascalABC.NET 1 06.04.2012 23:14
Символьный файл F. Записать в файл G компоненты файла F в обратном порядке,сначала все нечетные, затем чётные. Паскаль. ICE_LADY Помощь студентам 0 08.06.2011 17:32