![]() |
|
|
#1
|
|||
|
|||
|
Есть программа моделирующая движение автомобиля, есть кнопки для торможения и ускорения авто. Суть в том чтобы при нажатии на одну из кнопок торможения шла запись скорости автомобиля и оставшегося расстояния до объекта (эти значения рассчитываются по формуле в программе). Как это лучше организовать и куда записывать? Возможно ли записать в txt файлик?
|
|
#2
|
||||
|
||||
|
Да возможно. Нужно более точно знать условия, чтобы выбрать, что лучше использовать.
Последний раз редактировалось angvelem, 06.09.2011 в 21:45. |
|
#3
|
||||
|
||||
|
Простенький пример, можно подогнать под свою прогу:
Код:
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; |
|
#4
|
||||
|
||||
|
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
|
||||
|
||||
|
Да, с проверками правильнее будет.
|
|
#6
|
||||
|
||||
|
Совсем правильно, будет так:
Код:
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; |
|
#7
|
|||
|
|||
|
А не проще так:
Код:
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) можно разнести в разные места, соответсвенно, сразу писать в него данные и не создавать доп. структуры для их хранения. |
|
#9
|
|||
|
|||
|
спасибо большое, а как потом прочитать записанную информацию? Я просто немного по другому сделал. На кнопку торможения я прописал:
Код:
// Попытка открыть файл 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
|
||||
|
||||
|
Проверять наличие файла и, если файл существует, писать не Rewrite, а Reset. Соответственно при открытии файла, в котором может быть больше чем одна запись, читать только первую.
|
|
#11
|
|||
|
|||
|
подскажите, хочу отрыть тот же файл и дописать информацию к той которая там уже есть. У меня же при этом старая информация затирается и в ответе я вижу только то что хотел дописать. как решить эту проблему?
|
|
#12
|
||||
|
||||
|
Я уже писал: "писать не Rewrite, а Reset".
|
|
#13
|
|||
|
|||
|
{$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
|
||||
|
||||
|
А вот теперь используй процедуру 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); |
|
#15
|
|||
|
|||
|
Спасибо, работает) А что означает Flush(f)?
|