Резольвинг возвращаемых значений... - страница 2

 
  for (i=0; i<ArraySize(siMS); i++)
  { st="<TR><TD>"+DoubleToStr(i+1, 0)+"</TD><TD>"+ //№ п.п.
       siMS[i]+"</TD><TD>"+ // Символ
       DoubleToStr(MarketInfo(siMS[i], MODE_MARGINCALCMODE), 0)+"</TD><TD>"+ // Тип рынка
       DoubleToStr(MarketInfo(siMS[i], MODE_SPREAD), 0)+"</TD></TR>";// Спред
    WritingLineInFile(siFileName, st);
  }

И как вставить функцию вместо: DoubleToStr(MarketInfo(siMS[i], MODE_MARGINCALCMODE), 0)+"</TD><TD>"+ // Тип рынка ???

так: strMarketType() + // Тип рынка

не проходит номер...

Вставить целиком вместо строки?

тоже самое...

Эх... да пробовал я это, пробовал...

ифы тоже, и прочее, я ж писал выше.


Строка таблицы то формируется в таком виде: st="текст"+"текст"+"и т.д..."

А по предлагаемому так: st="текст"+ФУНКЦИЯ+"и т.д..."

Вот и запарился ужо...

Так что прошу заранее прощения за возможные мои тормоза.

 

В общем получается такая картина..

в одном месте кода надо выполнить две функции:

- вернуть число символа по MODE_MARGINCALCMODE

- затем это число преобразовать в строковый вид, например "Валюты"


Первое решаемо довольно просто, а вот второе... 8(

 
kombat:

И как вставить функцию вместо: DoubleToStr(MarketInfo(siMS[i], MODE_MARGINCALCMODE), 0)+"</TD><TD>"+ // Тип рынка ???

Вот так:
  for (i=0; i<ArraySize(siMS); i++)
  { st="<TR><TD>"+DoubleToStr(i+1, 0)+"</TD><TD>"+ //№ п.п.
       siMS[i]+"</TD><TD>"+ // Символ
       strMarketType()+"</TD><TD>"+ // Тип рынка
       DoubleToStr(MarketInfo(siMS[i], MODE_SPREAD), 0)+"</TD></TR>";// Спред
    WritingLineInFile(siFileName, st);
  }

Если первый вариант не работает, можно так:

  for (i=0; i>ArraySize(siMS); i++)
  { st= StringConcatenate(">TR<>TD<", DoubleToStr(i+1, 0),">/TD<>TD<", //№ п.п.
       siMS[i],">/TD<>TD<", // Символ
       strMarketType(),">/TD<>TD<", // Тип рынка
       DoubleToStr(MarketInfo(siMS[i], MODE_SPREAD), 0),">/TD<>/TR<");// Спред
    WritingLineInFile(siFileName, st);
  }
 

Неа... никак...

Видимо это нетривиально-неразрешимая задача для мкл4.


А пока СТОП!!! иначе башка распухнет от всего этого...

Ещё раз СПАСИБО за помощь...!!!

Будут варианты с удовольствием почитаю.


Покамест помучаю вариант скрипта где строки задаются по другому.

Функцией WriteString

// ...
WriteString("</TBODY></TABLE>\r\n");
WriteString("<HR>Рапорт<BR>\r\n");
WriteString("\xAE <A href=\"http://net.net/\">ддд</A>"+"<BR>\r\n");
WriteString("</BODY></HTML>");  
FileClose(handle);
return(0);
}
//+------------------------------------------------------------------+
void WriteString(string txt) { FileWriteString(handle, txt,StringLen(txt)); }
 
kombat:

Неа... никак...
Видимо это нетривиально-неразрешимая задача для мкл4.

Что значит никак?! Что не работает?

Какое значение переменной st после выполнения этого кода?

Какое должно быть?

Я понимаю, голова пухнет... Но останавливаться на таком?!

 

1. задача где расположить саму функцию...

перепробовал все уровни, ошибки:

'(' - function definition unexpected
'}' - unbalanced parentheses

'i' - variable not defined

и т.д... всех не перепишеш...


2. Исходя из п.1 значения получить пока нереально.


Вот и всех делов.


Преременная st в нормальном, своём коде формирует строку, типа:

<TR><TD>1</TD><TD>EURJPY</TD><TD>0</TD><TD>-2800.00</TD></TR

соответственно проходя по циклу полностью формируется "нутро" таблицы.

 
//------- Внешние параметры скрипта ---------------------------------+
extern string siFileName  = "SymbolInfo-FB.htm";
//------- Глобальные переменные скрипта -----------------------------+
string siMS[]={
"AUDCAD",
"BO",
"AFLRUR"
};
//+------------------------------------------------------------------+
void start()
{
  int    i;
  string st;
  FileDelete(siFileName);
  st="<DIV>Актуальные на: "+TimeToStr(LocalTime(), TIME_DATE)+" торговые условия в компании "+AccountCompany()+"</DIV><HR>";
  WritingLineInFile(siFileName, st);
  WritingLineInFile(siFileName, "");
  st="<TABLE><TR><TH>№</TH><TH>Символ</TH><TH>Рынок</TH><TH>Спрэд</TH></TR>";
  WritingLineInFile(siFileName, st);
  for (i=0; i<ArraySize(siMS); i++)
  { st="<TR><TD>"+DoubleToStr(i+1, 0)+"</TD><TD>"+ //№ п.п.
       siMS[i]+"</TD><TD>"+ // Символ
       strMarketType(siMS[i])+"</TD><TD>"+ // Тип рынка
       DoubleToStr(MarketInfo(siMS[i], MODE_SPREAD), 0)+"</TD></TR>";// Спред
    WritingLineInFile(siFileName, st);
  }
  WritingLineInFile(siFileName, "</TABLE><HR>");
  st="Сформирован файл: "+siFileName;
  Comment(st);
}
//+------------------------------------------------------------------+
//| Запись строки в файл                                             |
//+------------------------------------------------------------------+
void WritingLineInFile(string FileName, string text)
{ int file_handle=FileOpen(FileName, FILE_READ|FILE_WRITE, " ");
    if (file_handle>0)
    {
        FileSeek(file_handle, 0, SEEK_END);
        FileWrite(file_handle, text);
        FileClose(file_handle);
    }
}
 
string strMarketType( string s )
{
   switch ( MarketInfo(s, MODE_MARGINCALCMODE) )
   {
      case 0: return("Forex");
      case 1: return("CFD");
      case 2: return("Futures");
      default: return("error!");
   }
}
 
'i' - variable not defined с этим вроде решил... вынес в глобальные переменные, а до этого она была в старте...
 

Одна из ошибок моих в самой функции:

string strMarketType(siMS[i])
вместо

string strMarketType( string s )
как надо бы...

Вторая, при вызове:

strMarketType()

вместо

strMarketType(siMS[i])

Спасибо за науку!

С запятыми вместо плюсов кстати тож не проходило,

ругался едитор, мол неверный ","

 

Во втором варианте тож заработало... ;)

Как вычищу от мусора, так выложу что получилось.

Причина обращения: