Автор |
Сообщение |
ericson
Зарегистрирован: 06.10.2011
Сообщения: 1
Откуда: Perm
|
Два вопроса к знатокам по записи и чтению из файла.
Вопрос по записи в файл.
Записываю два параметра в файл, используя следующий модуль:
Код:
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
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А почему бы не писать время бара с секундами?
Я в форматах не шарю (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
|
Добрый день! Помогите разобраться.
Есть необходимость читать файл вида:
Код: |
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
|
Попробуй поменять строку
Код: |
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
|
Заменил, также кусок обрезает в ини.
Но имейл все таки отправил. Прислал prev_TT только целым необрезанным, а last_TT в имейл не вставляет. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
yser
Зарегистрирован: 30.11.2011
Сообщения: 76
|
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
|
Спасибо! Вечером попробую прикрутить. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Действительно есть такой глюк. Причем читает из ini нормально, пишет тоже нормально, а вот если читать и писать, то глюк. Пока не придумал как побороть. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Попробуй
Код: |
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
|
Олег, спасибо! Этот вариант работает. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
shaman1244
Зарегистрирован: 08.12.2015
Сообщения: 19
|
А если без StrTrim, можно как то сделать? у меня Ами 5.40.3 |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Я там плагин обновлял. Попробуй может новый не косячит так как старый. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Нифига, можешь не проверять. С новым такая же фигня. Ща подумаю. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Вместо StrTrim() используй
LT_LAST_1 = StrReplace(LT_LAST_1, "/n", ""); |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|