Stealth Client Forum

Альтернативный клиент Ultima Online
Текущее время: 17.11.2017 21:13

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Запись в файл
СообщениеДобавлено: 31.01.2008 23:07 
Не в сети Moderator
Moderator

Зарегистрирован: 28.03.2006 21:29
Сообщения: 559
Тема восстановлена из кеша гугла. Если автор сможет повторить свой пост (в новой теме) - я этот удалю.

Цитата:
Запись в файл

Edred
Moderator

Joined: 28 Mar 2006
Posts: 654
Location: Saint-Petersburg
Posted: Tue May 01, 2007 1:41 Post subject:

--------------------------------------------------------------------------------

Это полезная вещь, надо ее в инклюды.

Back to top


id
Neophyte



Joined: 24 Dec 2006
Posts: 46

Posted: Fri May 04, 2007 8:59 Post subject:

--------------------------------------------------------------------------------

Вроде Стелс TStringList поддерживает еще.
Тогда еще вариант:
Code:
var
ts: TStringList;
begin
ts:=TStringList.Create();
ts.Text := текст; //или ts.Add(текст) построчно
ts.SaveToFile('путь');
ts.Free;
end;


Back to top


id
Neophyte



Joined: 24 Dec 2006
Posts: 46

Posted: Fri May 04, 2007 9:01 Post subject:

--------------------------------------------------------------------------------

Вспомнил, что в своих некоторых скриптах делал эту возможность и взял оттуда процедуру.
Code:
procedure WriteLog(mes: string);
begin
if not WriteToLog then exit;
with TStringList.Create do
begin
try
LoadFromFile(LogName);
Add(FormatDateTime('dd.mm.yyyy hh:mm:ss > ', Now) + mes);
SaveToFile(LogName);
finally
Free;
end;
end;
end;

WriteToLog - бул.
LogName - стринг.
Из конфига.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Запись в файл
СообщениеДобавлено: 04.07.2011 16:39 
В сети Developer
Developer

Зарегистрирован: 24.03.2005 17:05
Сообщения: 3637
xmind писал(а):
Код:
procedure WriteToFile(filepath: string;   data: string);
...


изменил на

перезаписать содержимое файла
Код:
procedure WriteToFile(filepath: string; data: string);
var mode: Word;
begin
if FileExists(filepath) then mode := fmOpenReadWrite
else mode := fmCreate;
with TFileStream.Create(filepath,mode) do
  try
    WriteBuffer(data,Length(data)*2);
  finally
    Free;
  end;
end;


добавить строку в файл
Код:
procedure WriteToFile(filepath: string; data: string);
var mode: Word;
begin
if FileExists(filepath) then mode := fmOpenReadWrite
else mode := fmCreate;
with TFileStream.Create(filepath,mode) do
  try
    Seek(0,soFromEnd);
    WriteBuffer(data,Length(data)*2);
  finally
    Free;
  end;
end;


да, можно было это сделать параметром, но я решил не усложнять :)


xmind писал(а):
пример:
WriteToFile('C:\log.txt', 'hello world' + #13#10);
#13#10 - перевод строки

_________________
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Запись в файл
СообщениеДобавлено: 13.08.2011 0:39 
Не в сети Neophyte
Neophyte

Зарегистрирован: 13.08.2011 0:36
Сообщения: 23
Есть вопрос. Юзаю инклюд Визитора, строка кода
Код:
WriteToFile('E:\S\log.txt', 'Started ' +DateTimeToStr(Now));

Если дописываю перевод строки после SateTime.., то функция ругается на неверное число параметров. Но даже просто с символом перевода - в файл не дописываются строки, а просто заменяются. Т.е. в файле всегда одна строка =( Т.е. хочу узнать следующее : как использовать вставку времени\ника чара + символ перевода строки, и как сделать, что бы функция дописывала в файл, а не заменяла все в нем? Заранее спасибо за ответ


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Запись в файл
СообщениеДобавлено: 13.08.2011 0:49 
В сети Developer
Developer

Зарегистрирован: 24.03.2005 17:05
Сообщения: 3637
копай в сторону Seek(0, soFromEnd);

_________________
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Запись в файл
СообщениеДобавлено: 13.08.2011 1:11 
Не в сети Neophyte
Neophyte

Зарегистрирован: 13.08.2011 0:36
Сообщения: 23
Vizit0r писал(а):
копай в сторону Seek(0, soFromEnd);



Спасибо, помогла вставка строки перед WriteBuffer(data,Length(data));.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Запись в файл
СообщениеДобавлено: 13.08.2011 9:37 
В сети Developer
Developer

Зарегистрирован: 24.03.2005 17:05
Сообщения: 3637
изменил свой пост с функциями

_________________
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Запись в файл
СообщениеДобавлено: 22.11.2013 1:43 
Не в сети Novice
Novice

Зарегистрирован: 11.06.2008 20:33
Сообщения: 70
пример с добавлением строки в файл, вешает новый стелс 6.1.4 наглухо.

А точнее "Seek(0,soFromEnd);"


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Запись в файл
СообщениеДобавлено: 22.11.2013 4:38 
В сети Developer
Developer

Зарегистрирован: 24.03.2005 17:05
Сообщения: 3637
1) Seek исправил, в апдейте будет работать.
2)изменил пример, потому что символы в строке теперь имеют по 2 байта - умножать длину надо на 2.

_________________
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Запись в файл
СообщениеДобавлено: 06.01.2016 20:51 
Не в сети Novice
Novice

Зарегистрирован: 28.01.2012 19:48
Сообщения: 148
Подскажите, как добавить символ разрыва строки в WriteBuffer(data,Length(data)*2); чтобы каждая запись в примере начиналась с новой строки:

Код:
procedure WriteToFile(path: string; data: string);
var mode: Word;
begin
   if FileExists(path) then begin
      mode := fmOpenReadWrite;
   end else begin
      mode := fmCreate;
   end;
   with TFileStream.Create(path,mode) do try
       Seek(0,soFromEnd);
      WriteBuffer(data,Length(data)*2);
   finally
       Free;
   end;
end;

_________________
Stealth 8.5.1 | Клиент: 7.0.13.4


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Запись в файл
СообщениеДобавлено: 06.01.2016 21:31 
В сети Developer
Developer

Зарегистрирован: 24.03.2005 17:05
Сообщения: 3637
tempstr : String;

tempstr := data + #13 + #10;

_________________
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Запись в файл
СообщениеДобавлено: 07.01.2016 15:33 
Не в сети Novice
Novice

Зарегистрирован: 28.01.2012 19:48
Сообщения: 148
Не хочет так.
Код:
procedure WriteToFile(path: string; data: string);
var mode: Word;
begin
   if FileExists(path) then begin
      mode := fmOpenReadWrite;
   end else begin
      mode := fmCreate;
   end;
   with TFileStream.Create(path,mode) do try
       Seek(0,soFromEnd);
      WriteBuffer(data + #13 + #10, Length(data)*2);
   finally
       Free;
   end;
end;


Writeln(data); чёт тоже не пашет.

_________________
Stealth 8.5.1 | Клиент: 7.0.13.4


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Запись в файл
СообщениеДобавлено: 07.01.2016 23:27 
В сети Developer
Developer

Зарегистрирован: 24.03.2005 17:05
Сообщения: 3637
ты читал что я писал? Я не писал про "data + #13 + #10". Наверное неспроста я написал про новую переменную, да?
Причем, Length(data)*2 должно быть (Length(data)+2)*2.

_________________
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Запись в файл
СообщениеДобавлено: 08.01.2016 13:38 
Не в сети Novice
Novice

Зарегистрирован: 28.01.2012 19:48
Сообщения: 148
Vizit0r писал(а):
ты читал что я писал? Я не писал про "data + #13 + #10". Наверное неспроста я написал про новую переменную, да?
Причем, Length(data)*2 должно быть (Length(data)+2)*2.

Растолкуй мне какая разница между:
Код:
WriteBuffer(data + #13 + #10, Length(data)*2);

и
Код:
tempstr := data + #13 + #10;
WriteBuffer(tempstr, Length(data)*2);

?

Цитата:
(Length(data)+2)*2

А про это ты написать забыл, да? :twisted:

Но оно всё равно не пашет, что я делаю не так?
Код:
procedure WriteToFile(path: string; data: string);
var mode: Word;
tempstr : string;
begin
   if FileExists(path) then begin
      mode := fmOpenReadWrite;
   end else begin
      mode := fmCreate;
   end;
   with TFileStream.Create(path,mode) do try
      tempstr := data + #13 + #10;
      Seek(0, soFromEnd);
      WriteBuffer(tempstr, (Length(data)*2)*2);
   finally
      Free;
   end;
end;

WriteToFile(<путь>, 'test string');


ИзображениеИзображение

_________________
Stealth 8.5.1 | Клиент: 7.0.13.4


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Запись в файл
СообщениеДобавлено: 08.01.2016 14:20 
В сети Developer
Developer

Зарегистрирован: 24.03.2005 17:05
Сообщения: 3637
НУ ПЛЮС ЖЕ!
(Length(data)+2)

Код:
Program prodaza_runok;

procedure WriteToFile(path: string; data: string);
var mode: Word;
tempstr : string;
begin
   if FileExists(path) then begin
      mode := fmOpenReadWrite;
   end else begin
      mode := fmCreate;
   end;
   with TFileStream.Create(path,mode) do
   try
      tempstr := data + #13#10;
      Seek(0, soFromEnd);
      WriteBuffer(tempstr,(Length(data)+2)*2);
   finally
      Free;
   end;
end;


begin
WriteToFile('d:\Stealth\my\zzz.txt', 'test string');
end.


итог, в UTF-16
Код:
test string
test string
test string
test string
test string


GeeZeR писал(а):
Растолкуй мне какая разница между:
Код:
WriteBuffer(data + #13 + #10, Length(data)*2);

и
Код:
tempstr := data + #13 + #10;
WriteBuffer(tempstr, Length(data)*2);

?


WriteBuffer первым параметром принимает переменную неопр. типа. Переменную, а не значение. А data + #13 + #10 это как раз и есть значение.

Кстати - возможно, в результате преоразований скрипт-код это значение и влетает в WriteBuffer как переменная. Впрочем, это уже ньюансы.

_________________
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Запись в файл
СообщениеДобавлено: 08.01.2016 14:59 
Не в сети Novice
Novice

Зарегистрирован: 28.01.2012 19:48
Сообщения: 148
Да, моя невнимательность, спасибо заработало!

_________________
Stealth 8.5.1 | Клиент: 7.0.13.4


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Тюнинг и аксессуары. Тюнинг внедорожников: магазин 4х4 в Одессе. Интернет магазин "AMAX".
Также, на правах рекламы: школьный сайт: school-work.net и еще один: https://www.youtube.com/channel/UCFSPHKHjP22tEl8Rjcst9Fw.


Рейтинг@Mail.ru
Powered by phpBB® Forum Software © phpBB Group