Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 запись в файл/чтение из файла Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
ericson



Зарегистрирован: 06.10.2011
Сообщения: 1
Откуда: Perm

СообщениеДобавлено: Вс Янв 15, 2012 8:47 am Ответить с цитатой Вернуться к началу

Два вопроса к знатокам по записи и чтению из файла.
Вопрос по записи в файл.
Записываю два параметра в файл, используя следующий модуль:
Код:
s = "D://QUICK//service//01" ;
p1 = Lt ;
p2 = EquD ;

fh = fopen( s+".txt", "w");
if( fh )
{
ymdt = DateTime();

for( i = BarCount-10 ; i < BarCount; i++ )
{
ds = StrReplace( DateTimeToStr(ymdt[i]), " ", ";") + ", " + NumToStr (p1[i], 1.1, False )+ ", "
+ NumToStr (p2[i], 1.2, False )+"\n";
fputs( ds, fh );
}
fclose( fh );
}
в файле получается следующий список:
13.01.2012;23:35:00, 3.0, 494.30
13.01.2012;23:35:00, 3.0, 494.30
13.01.2012;23:36:00, 5.0, 413.30
13.01.2012;23:37:00, 5.0, 413.30
13.01.2012;23:40:00, 5.0, 413.30
13.01.2012;23:42:00, 5.0, 413.30
13.01.2012;23:43:00, 5.0, 413.30
13.01.2012;23:46:00, 1.0, 413.30
13.01.2012;23:49:00, 1.0, 413.30
13.01.2012;23:49:00, 1.0, 413.30
таймфрейм - 50-tick, поэтому в течение одной минуты баров может быть несколько с одним временем. См. две нижних строчки списка.
Вопрос: «Как сделать обозначение времени каждого бара в списке индивидуальным (номер бара в минуте)? Где настроить этот формат?»
Второй вопрос по чтению из этого файла.
Использую такой модуль:
Код:
s = "D://QUICK//service//01" ;
fh = fopen( s+".txt", "r");
if( fh ) {
str = fgets( fH );
Ltz = StrToNum(StrExtract(str, 1));
EquDz = StrToNum(StrExtract(str, 2));
fclose( fh );
}
Считывание происходит с первой строки списка, сверху (значения 3.0, 494.30), а хотелось бы чтобы с последней, нижней строки (1.0, 413.30).
Вопрос: «Как изменить код чтобы считывать последнюю (нижнюю) или предпоследнюю (вторую снизу) строку списка?»
Заранее спасибо.
Посмотреть профиль Отправить личное сообщение
BRTO



Зарегистрирован: 01.03.2009
Сообщения: 105

СообщениеДобавлено: Вс Янв 15, 2012 12:31 pm Ответить с цитатой Вернуться к началу

Может, это поможет?
http://www.amisite.ru/files/as_file.htm
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вс Янв 15, 2012 10:03 pm Ответить с цитатой Вернуться к началу

А почему бы не писать время бара с секундами?
Я в форматах не шарю (ymdt[i]), " ", ";") но если взять просто
DateTimeToStr(DateTime()), то во времени получаются секунды и этим бары отличаются.

Прочитать последную строку можно только перебрав все строки. Типа так
Код:
fh = fopen(  s+".txt", "r");
str1 = Ltz1 = EquDz1 = 0;
if( fh )
{
  while( ! feof( fh ) )
  {
    str = fgets( fH );
    Ltz1 = Ltz;
    EquDz1 = EquDz;
    Ltz = StrToNum(StrExtract(str, 1));
    EquDz = StrToNum(StrExtract(str, 2));
  }
}

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
shaman1244



Зарегистрирован: 08.12.2015
Сообщения: 19

СообщениеДобавлено: Ср Июн 08, 2016 11:43 am Ответить с цитатой Вернуться к началу

Добрый день! Помогите разобраться.

Есть необходимость читать файл вида:

Код:

18.05.2016 19:05:06 | Long  || 2   ||| 92220 |||| 18.05.2016 19:05:19 ||||| 92130 |||||| -90    ||||||| -241.36
18.05.2016 19:08:40 | Short || -2  ||| 92100 |||| 18.05.2016 19:16:08 ||||| 92150 |||||| -50    ||||||| -136.66
18.05.2016 19:16:11 | Long  || 2   ||| 92160 |||| 18.05.2016 19:17:19 ||||| 92050 |||||| -110   ||||||| -293.7
18.05.2016 19:18:08 | Short || -2  ||| 92030 |||| 18.05.2016 19:21:07 ||||| 92100 |||||| -70    ||||||| -189.01
18.05.2016 19:21:09 | Long  || 2   ||| 92110 |||| 18.05.2016 19:27:09 ||||| 92060 |||||| -50    ||||||| -136.66
18.05.2016 19:27:12 | Short || -2  ||| 92060 |||| 18.05.2016 19:30:40 ||||| 92160 |||||| -100   ||||||| -267.53


Написал такой код:

Код:

email=0;
if(Name() == "RIM6")
{
   f_LT_1 = fopen(logs+"LOG_TRADES_1.TXT", "r");
   if(f_LT_1 )
   {
      while(!feof(f_LT_1 ))
      {
         LT_1 = fgets(f_LT_1 );
      }
      fclose(f_LT_1 );
   }
   LT_LAST_1=AS_READ_PARAM_STR("LT_1", Name() , "last_TT ");
   if(LT_LAST_1 != LT_1)
   {
      email=1;
      AS_WRITE_STRING("LT_1",  Name() , "prev_TT",
            AS_READ_PARAM_STR("LT_1",  Name() , "last_TT "));
      AS_WRITE_STRING("LT_1",  Name(), "last_TT ", LT_1);
      AlertIf(email==1, "EMAIL", AS_READ_PARAM_STR("LT_1", Name(), "prev_TT") + "\n" +
            AS_READ_PARAM_STR("LT_1", Name(), "last_TT "), 0);
      email=0;
   }
}


На выходе получаю такой ини файл:

Код:

[RIM6]
prev_TT=18.05.2016 20:14:26 | Short || -2  ||| 91990 |||| 18.05.2016 20:23
last_TT=19.05.2016 19:58:15 | Long  || 1   ||| 88640 |||| 19.05.2016 20:11:09 ||||| 88650 |||||| 10     ||||||| 10.43


Ошибка в том, что при переводе last_TT в prev_TT он обрезает кусок. Почему такое может быть?
И почему он не присылает имейл? Ведь тестовое письмо приходит все нормально.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Ср Июн 08, 2016 12:33 pm Ответить с цитатой Вернуться к началу

Попробуй поменять строку
Код:
AS_WRITE_STRING("LT_1",  Name() , "prev_TT ", AS_READ_PARAM_STR("LT_1",  Name() , "last_TT "));

на
Код:
AS_WRITE_STRING("LT_1",  Name() , "prev_TT ", LT_LAST_1);

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
shaman1244



Зарегистрирован: 08.12.2015
Сообщения: 19

СообщениеДобавлено: Ср Июн 08, 2016 4:04 pm Ответить с цитатой Вернуться к началу

Заменил, также кусок обрезает в ини.

Но имейл все таки отправил. Прислал prev_TT только целым необрезанным, а last_TT в имейл не вставляет.
Посмотреть профиль Отправить личное сообщение
yser



Зарегистрирован: 30.11.2011
Сообщения: 76

СообщениеДобавлено: Ср Июн 08, 2016 9:57 pm Ответить с цитатой Вернуться к началу

shaman1244 писал(а):
Заменил, также кусок обрезает в ини.

Но имейл все таки отправил. Прислал prev_TT только целым необрезанным, а last_TT в имейл не вставляет.

года два назад, встречался в проблемами при использовании
AS_WRITE_STRING и AS_READ_PARAM_STR,
если с тех пор плагин не менялся - то думаю причина в них.
http://amisite.ru/phpBB2/viewtopic.php?t=1987

в последствии написал альтернативу на alf для работы с ини файлами,
в этом треаде http://amisite.ru/phpBB2/viewtopic.php?p=22804 есть код в аттаче.
Посмотреть профиль Отправить личное сообщение
shaman1244



Зарегистрирован: 08.12.2015
Сообщения: 19

СообщениеДобавлено: Чт Июн 09, 2016 11:09 am Ответить с цитатой Вернуться к началу

yser писал(а):

года два назад, встречался в проблемами при использовании
AS_WRITE_STRING и AS_READ_PARAM_STR,
если с тех пор плагин не менялся - то думаю причина в них.
http://amisite.ru/phpBB2/viewtopic.php?t=1987

в последствии написал альтернативу на alf для работы с ини файлами,
в этом треаде http://amisite.ru/phpBB2/viewtopic.php?p=22804 есть код в аттаче.


Спасибо! Вечером попробую прикрутить.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Чт Июн 09, 2016 1:12 pm Ответить с цитатой Вернуться к началу

Действительно есть такой глюк. Причем читает из ini нормально, пишет тоже нормально, а вот если читать и писать, то глюк. Пока не придумал как побороть.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Чт Июн 09, 2016 1:24 pm Ответить с цитатой Вернуться к началу

Попробуй
Код:

email=0;
if(Name() == "RIM6")
{
  f_LT_1 = fopen(logs+"LOG_TRADES_1.TXT", "r");
  if(f_LT_1 )
  {
    while(!feof(f_LT_1 ))
    {
      LT_1 = fgets(f_LT_1 );
    }
    fclose(f_LT_1 );
  }
  LT_LAST_1=AS_READ_PARAM_STR("LT_1", Name() , "last_TT ");
  if(LT_LAST_1 != LT_1)
  {
    LT_LAST_1 = StrTrim(LT_LAST_1, "", 3);
    email=1;
    AS_WRITE_STRING("LT_1",  Name() , "prev_TT ", LT_LAST_1);
    AS_WRITE_STRING("LT_1",  Name(), "last_TT ", LT_1);
    AlertIf(email==1, "EMAIL", AS_READ_PARAM_STR("LT_1",  Name() , "prev_TT ") + "\n"
                        + AS_READ_PARAM_STR("LT_1",  Name() , "last_TT "),0);
    email=0;
  }
}


_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
shaman1244



Зарегистрирован: 08.12.2015
Сообщения: 19

СообщениеДобавлено: Ср Июн 29, 2016 10:37 pm Ответить с цитатой Вернуться к началу

Цитата:
Попробуй


Олег, спасибо! Этот вариант работает.
Посмотреть профиль Отправить личное сообщение
shaman1244



Зарегистрирован: 08.12.2015
Сообщения: 19

СообщениеДобавлено: Пн Сен 12, 2016 10:08 pm Ответить с цитатой Вернуться к началу

А если без StrTrim, можно как то сделать? у меня Ами 5.40.3
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Сен 13, 2016 7:48 am Ответить с цитатой Вернуться к началу

Я там плагин обновлял. Попробуй может новый не косячит так как старый.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Сен 13, 2016 8:15 am Ответить с цитатой Вернуться к началу

Нифига, можешь не проверять. С новым такая же фигня. Ща подумаю.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Сен 13, 2016 8:20 am Ответить с цитатой Вернуться к началу

Вместо StrTrim() используй
LT_LAST_1 = StrReplace(LT_LAST_1, "/n", "");

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen