Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.09.2011, 20:23
Setup_007 Setup_007 вне форума
Прохожий
 
Регистрация: 20.03.2011
Сообщения: 35
Репутация: 10
По умолчанию запись в файл

Есть программа моделирующая движение автомобиля, есть кнопки для торможения и ускорения авто. Суть в том чтобы при нажатии на одну из кнопок торможения шла запись скорости автомобиля и оставшегося расстояния до объекта (эти значения рассчитываются по формуле в программе). Как это лучше организовать и куда записывать? Возможно ли записать в txt файлик?
Ответить с цитированием
  #2  
Старый 06.09.2011, 21:21
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Да возможно. Нужно более точно знать условия, чтобы выбрать, что лучше использовать.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 06.09.2011 в 21:45.
Ответить с цитированием
  #3  
Старый 06.09.2011, 21:42
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Простенький пример, можно подогнать под свою прогу:
Код:
Var
 F: TextFile;
 n: Integer;
begin
 AssignFile(F, 'MyTxt.txt');
 ReWrite(F);
 For n:= 1 To 100 Do Writeln(F, '№ '+IntToStr(n));
 CloseFile(F);
end;
__________________
If end Then begin;
Ответить с цитированием
  #4  
Старый 06.09.2011, 21:55
Аватар для GriLab
GriLab GriLab вне форума
Начинающий
 
Регистрация: 26.11.2010
Адрес: Минск
Сообщения: 190
Версия Delphi: XE 15.0.3890
Репутация: 415
По умолчанию

AND_REY, если ты непротив, то я немного дополню твой код:
Код:
var
 F: TextFile;
 n: Integer;
begin
 AssignFile(F, 'MyTxt.txt');
 try
  if not FileExists('MyTxt.txt')
    Rewrite(F)
  else
    Reset(F);
  for n := 1 To 100 do 
    WriteLn(F, '№ ' + IntToStr(n));
 finally
   CloseFile(F);
 end;
end;
Ответить с цитированием
  #5  
Старый 06.09.2011, 22:13
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Да, с проверками правильнее будет.
__________________
If end Then begin;
Ответить с цитированием
  #6  
Старый 06.09.2011, 22:21
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Совсем правильно, будет так:
Код:
var
 F: TextFile;
 n: Integer;
begin
{$I-}
 AssignFile(F, 'MyTxt.txt');
 try
  if not FileExists('MyTxt.txt')
    Rewrite(F)
  else
    Reset(F);
  for n := 1 To 100 do 
    WriteLn(F, '№ ' + IntToStr(n));
 finally
   CloseFile(F);
 end;
{$I+}
end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 06.09.2011, 23:22
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,100
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А не проще так:
Код:
var
  L : TStringList;
  I : Integer;
begin
  L := TStringList.Create;
  For I := 1 To 100 Do
    L.Add('№ ' + IntToStr(n));
  Try
    L.SaveToFile('MyFile.txt');
  Finally
    L.Free;
  End;
end;

Создание, сохранение и уничтожение объекта (L) можно разнести в разные места, соответсвенно, сразу писать в него данные и не создавать доп. структуры для их хранения.
Ответить с цитированием
  #8  
Старый 06.09.2011, 23:25
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от lmikle
А не проще так:
Вот поэтому я и писал это.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #9  
Старый 07.09.2011, 23:47
Setup_007 Setup_007 вне форума
Прохожий
 
Регистрация: 20.03.2011
Сообщения: 35
Репутация: 10
По умолчанию

спасибо большое, а как потом прочитать записанную информацию? Я просто немного по другому сделал. На кнопку торможения я прописал:
Код:
// Попытка открыть файл Test.txt для записи
  AssignFile(myFile, 'Test.txt');
  ReWrite(myFile);

  // Запись данных в этот файл
  WriteLn(myFile, 'v(торможения)='+FloatToStr(Round(v*100)/100));

  // Закрытие файла
  CloseFile(myFile)
И поставил кнопку для вывода информации:
Код:
var
text   : string;
begin
  // открытие файла для чтения
  Reset(myFile);

  // Показ содержимого файла
  while not Eof(myFile) do
  begin
    ReadLn(myFile, text);
    ShowMessage(text);
  end;

  // Закрытие файла в последний раз
  CloseFile(myFile);
Но тут такая проблема возникла: в процессе моделирования движения я могу несколько раз нажимать кнопку тормоза и при выводе показывается скорость авто в момент последнего нажатия на тормоз, а мне необходима информация в момент самого первого нажатия. Что можно придумать?

Последний раз редактировалось lmikle, 08.09.2011 в 00:50.
Ответить с цитированием
  #10  
Старый 08.09.2011, 00:17
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Проверять наличие файла и, если файл существует, писать не Rewrite, а Reset. Соответственно при открытии файла, в котором может быть больше чем одна запись, читать только первую.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #11  
Старый 11.10.2011, 23:47
Setup_007 Setup_007 вне форума
Прохожий
 
Регистрация: 20.03.2011
Сообщения: 35
Репутация: 10
По умолчанию

подскажите, хочу отрыть тот же файл и дописать информацию к той которая там уже есть. У меня же при этом старая информация затирается и в ответе я вижу только то что хотел дописать. как решить эту проблему?
Ответить с цитированием
  #12  
Старый 11.10.2011, 23:56
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Я уже писал: "писать не Rewrite, а Reset".
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #13  
Старый 12.10.2011, 00:07
Setup_007 Setup_007 вне форума
Прохожий
 
Регистрация: 20.03.2011
Сообщения: 35
Репутация: 10
По умолчанию

{$I-}
AssignFile(myFile, 'Test.txt');
if FileExists('C:\Documents and Settings\Àäìèíèñòðàòîð\Ðàáî÷èé ñòîë\ÀÂÒÎ_3\Test.txt')
then
Reset(myFile);
else
ReWrite(myFile);

WriteLn(myFile, 'Ïðîåçä íà êðàñíûé ñèãíàë ñâåòîôîðà');

CloseFile(myFile);
{$I+}
у меня так вот прописано и как я понимаю это значит если такой то файл существует то Reset иначе Rewrite...а дальше идет запись.
Ответить с цитированием
  #14  
Старый 12.10.2011, 00:10
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

А вот теперь используй процедуру Append для добавления записи в конец файла.
Код:
    AssignFile(f, OpenDialog1.FileName);
    Append(f);
    Writeln(f, 'I am appending some stuff to the end of the file.'); 
    { insert code here that would require a Flush before closing the file }
    Flush(f);  { ensures that the text was actually written to file }
    CloseFile(f);
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #15  
Старый 12.10.2011, 00:20
Setup_007 Setup_007 вне форума
Прохожий
 
Регистрация: 20.03.2011
Сообщения: 35
Репутация: 10
По умолчанию

Спасибо, работает) А что означает Flush(f)?
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:21.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025