[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 427

 

Boa tarde. Pergunta sobre um apontador de arquivo... No livro MQL4, encontrado na MQL4.community, na seção "Funções Padrão", há um exemplo do script "Operações de Arquivo", que se destina a ler dados de um arquivo e exibir objetos gráficos em uma janela de símbolos:

//--------------------------------------------------------------------
// timetablenews.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
int start()                            // Спец. функция start
  {
//--------------------------------------------------------------- 2 --
   int Handle,                         // Файловый описатель
       Stl;                            // Стиль вертикальной линии
   string File_Name="News.csv",        // Имя файла
          Obj_Name,                    // Bмя объекта
          Instr,                       // Название валюты
          One,Two,                     // 1я и 2я чать названия инстр.
          Text,                        // Текст описания события
          Str_DtTm;                    // Дата и время события(строка)
   datetime Dat_DtTm;                  // Дата и время события(дата)
   color Col;                          // Цвет вертикальной линии
//--------------------------------------------------------------- 3 --
   Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,";");// Открытие файла
   if(Handle<0)                        // Неудача при открытии файла
     {
      if(GetLastError()==4103)         // Если файла не существует,..
         Alert("Нет файла с именем ",File_Name);//.. извещаем трейдера 
      else                             // При любой другой ошибке..
         Alert("Ошибка при открытии файла ",File_Name);//..такое сообщ
      PlaySound("Bzrrr.wav");          // Звуковое сопровождение
      return;                          // Выход из start()      
     }
//--------------------------------------------------------------- 4 --
   while(FileIsEnding(Handle)==false)// До тех пор, пока файловый ..
     {                                // ..указатель не в конце файла
      //--------------------------------------------------------- 5 --
      Str_DtTm =FileReadString(Handle);// Дата и время события(дата)
      Text     =FileReadString(Handle);// Текст описания события
      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --
      Dat_DtTm =StrToTime(Str_DtTm);   // Преобразование типа данных
      Instr    =StringSubstr(Text,0,3);// Извлекаем первые 3 символа
      One=StringSubstr(Symbol(),0,3);// Извлекаем первые 3 символа
      Two=StringSubstr(Symbol(),3,3);// Извлекаем вторые 3 символа
      Stl=STYLE_DOT;                   // Для всех - стиль пунктир
      Col=DarkOrange;                  // Для всех - цвет такой
      if(Instr==One || Instr==Two)     // А для событий по нашему ..
        {                             // .. финансовому инструменту..
         Stl=STYLE_SOLID;              // .. такой стиль..
         Col=Red;                      // .. и такой цвет верт. линии
        }
      //--------------------------------------------------------- 7 --
      Obj_Name="News_Line  "+Str_DtTm;     // Имя объекта
      ObjectCreate(Obj_Name,OBJ_VLINE,0,Dat_DtTm,0);//Создаем объект..
      ObjectSet(Obj_Name,OBJPROP_COLOR, Col);       // ..и его цвет,..
      ObjectSet(Obj_Name,OBJPROP_STYLE, Stl);       // ..стиль..
      ObjectSetText(Obj_Name,Text,10);              // ..и описание 
     }
//--------------------------------------------------------------- 8 --
   FileClose( Handle );                // Закрываем файл
   PlaySound("bulk.wav");              // Звуковое сопровождение
   WindowRedraw();                     // Перерисовываем объекты
   return;                             // Выход из start()
  }
//--------------------------------------------------------------- 9 --

Abaixo, ao analisar este script no Livro sobre MQL4, a seguinte frase é dada: "se a verificação especificada (as 2 últimas linhas no bloco 5-6) for removida, um objeto extra será criado em tempo de execução. E somente depois disso, a condição final do loop será acionada e o controle será passado para o bloco 8-9".

Eu entendo corretamente? Um ponteiro de arquivo NÃO é INFLOWED BY TEXT SIGNS (por exemplo: text| onde | é um ponteiro de arquivo), mas é um ponteiro COM EXPRESSÃO, por exemplo: text onde k é o caractere "to", k-th é realçado por um ponteiro de arquivo. Isto explica a necessidade de cordas (ver p.164):

      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --

De fato. Na penúltima iteração, após a criação do ÚLTIMO objeto

2007.05.11 18:30;JPY

o ponteiro do arquivo está na posição do último objeto, ou seja

2007.05.11 18:30;JPYFabricação industrial

(onde o é o caractere" o", k é o índice de arquivo). Então, ao passar o controle para o cabeçalho da declaração, a função FileIsEnding(handle) obviamente retornará verdadeiro, porque o ponteiro do arquivo NÃO está no final do arquivo, mas no ÚLTIMO caráter desse arquivo. Então, quando as duas primeiras linhas forem executadas, o ponteiro do arquivo se moverá para o espaço vazio e se não houver linhas

      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --

o script criará um gráfico (isto é, uma linha) com uma descrição vazia e uma coordenada de tempo que corresponde a 0. Isto é o que significa na frase: "se a verificação especificada (as 2 últimas linhas no bloco 5-6) for removida, então um objeto extra será criado em tempo de execução". "

Pergunta: entendo corretamente:

a) a definição de um ponteiro de arquivo;

b) o significado da frase "Se a verificação especificada (as 2 últimas linhas no bloco 5-6) for eliminada, então um objeto extra será criado na execução do programa.E somente depois disso, a condição final do loop será acionada e o controle será passado para o bloco 8-9".

P.S. A fim de não desperdiçar o fórum, obrigado antecipadamente por sua resposta.

 
Pessoal!!! Por favor, me dêem a função de abrir a barra de horas (preciso determinar a abertura da vela anterior) e se (TimeMinute(TimeCurrent())==m && TimeSeconds(TimeCurrent())==n) por alguma razão não funciona colocando m=1 n=1 mas peço a vocês, que se importam...
 
stater:
Pessoal!!! Por favor, me dêem a função de abrir a barra de horas (preciso determinar a abertura da vela anterior) e se (TimeMinute(TimeCurrent())==m && TimeSeconds(TimeCurrent())==n) por alguma razão não funciona colocando m=1 n=1 Eu lhe imploro, quem se importa...
https://docs.mql4.com/ru/series
 
obrigado por seu feedback, mas não entendo qual função é usada para saber se uma vela de uma hora se abriu....
 
stater:
obrigado por seu feedback, mas não entendo qual função é usada para saber se uma vela de uma hora se abriu....

iTime
 
O conselheiro continua dando erro 0, você pode me dizer como verificar o que está causando isso, como encontrar este lugar?
 
FAQ:

iTime
Obrigado por sua paciência!
 
Egori4:
A EA continua dando o erro 0, aconselha - como verificar o que o está causando, como encontrar este lugar?

O erro 0 é que não há erros.

Parar de fazer Imprimir (alerta) =)

 

como se abrevia a escrita de uma fórmula se uma equação é repetida várias vezes?

 
Elektronik:

como se abrevia a escrita de uma fórmula se uma equação é repetida várias vezes?


Use a função
Razão: