Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2019, 15:20   #1
Petrov210217
Пользователь
 
Регистрация: 14.11.2018
Сообщений: 89
По умолчанию вопрос по программированию на mql4

Доброго дня! Нужна помощь! Несколько дней пытаюсь загрузить данные из файла- не выходит. Либо получаю нули, либо какие то неправильные значения.

Данные хранятся в файле .csv

Формат, начиная с первой строки:

Код:
0.2618997595368323

0.07214522501190132

-0.2603473993323489

-0.04593721334324589

-0.2869231449596886

-0.2540028686351263

-0.2068354101477481

0.09216412872632165

0.168661965521865

-0.2002489414504531

0.2022479343848878
Пример взял https://book.mql4.com/ru/functions/files, записал в функцию
Код:
int OnInit():

int handle;

handle = FileOpen(FileName1, FILE_BIN|FILE_READ);

if(handle>0)

{  

   FileReadArray(handle, w, 0, ((vhodyClose+vhodyOpen+vhodyHigh+vhodyLow+vhodyVolume)*neiro));

   int size=ArraySize(w);

      //--- распечатаем данные из массива

      for(int ii2=0;ii2<size;ii2++)

        {

        Print("w = ",w[ii2]);

        }

      Print("Total data = ",size);

      //--- закрываем файл   

   FileClose(handle);

}


на выходе получаю значения больше 1, а такого быть не должно.

Помогите подправить код. Спасибо.
ЫЫЫЫЫЫ
Petrov210217 вне форума Ответить с цитированием
Старый 24.07.2019, 15:22   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Так у вас же не бинарный файл. Вам скорее нужно FILE_CSV.
p51x вне форума Ответить с цитированием
Старый 24.07.2019, 16:00   #3
Petrov210217
Пользователь
 
Регистрация: 14.11.2018
Сообщений: 89
По умолчанию

файл FILE_CSV выдает нули вместо значений. Скрипт который записывает исходный файл действительно FILE_CSV. Но здесь проблема видимо иная.
ЫЫЫЫЫЫ
Petrov210217 вне форума Ответить с цитированием
Старый 24.07.2019, 16:15   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Нет, проблема именно в этом.

Цитата:
Сообщение от Petrov210217 Посмотреть сообщение
на выходе получаю значения больше 1, а такого быть не должно
Именно так и будет, если читать текстовой файл как бинарный. Например, '0' (текстовой) в бинарном виде будет 0x30, что 48. А если будет 0.26, то получим 0x302e3236.

Цитата:
Сообщение от Petrov210217 Посмотреть сообщение
выдает нули вместо значений
Потому что https://www.mql5.com/en/docs/files/filereadarray
Цитата:
Reads from a file of BIN type arrays of any type except string
Да и ошибки вы не проверяете.

Вам сюда https://www.mql5.com/en/docs/files/filereadnumber и изучать пример.
p51x вне форума Ответить с цитированием
Старый 24.07.2019, 16:20   #5
Petrov210217
Пользователь
 
Регистрация: 14.11.2018
Сообщений: 89
По умолчанию

То есть получается, что мне нужно сменить тип на FILE_CSV? Или переделать исходный скрипт, что бы сохранял как FILE_BIN?
ЫЫЫЫЫЫ
Petrov210217 вне форума Ответить с цитированием
Старый 24.07.2019, 16:21   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Вам нужно сменить тип, переписать чтение или переделать сохранялку.
p51x вне форума Ответить с цитированием
Старый 24.07.2019, 18:21   #7
Petrov210217
Пользователь
 
Регистрация: 14.11.2018
Сообщений: 89
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Вам нужно сменить тип, переписать чтение или переделать сохранялку.
Вот ко сохранялки
Код:
h=FileOpen("NS_w_"+Symbol()+Period()+"."+ext+"",FILE_WRITE|FILE_CSV);
                  for(int z6=0;z6<((vhodyClose+vhodyOpen+vhodyHigh+vhodyLow+vhodyVolume)*neiro);z6++)
                  {
                     double o=w[z6];
                     FileWrite(h,o);
                  }
                FileClose(h);
Вот код читалки
Код:
   int handle;
   handle = FileOpen(FileName1, FILE_CSV|FILE_READ);
   if(handle>0)
   {  
      //FileReadArray(handle, w, 0, ((vhodyClose+vhodyOpen+vhodyHigh+vhodyLow+vhodyVolume)*neiro));
      FileReadArray(handle, w);
      int size=ArraySize(w);
         //--- распечатаем данные из массива
         for(int ii2=0;ii2<size;ii2++)
           {
           Print("w = ",w[ii2]);
           }
         Print("Total data = ",size);
         //--- закрываем файл   
      FileClose(handle);
   }
На выходе получаю нули. Сменил расширение файла на txt.Не пойму, что не так.
ЫЫЫЫЫЫ
Petrov210217 вне форума Ответить с цитированием
Старый 24.07.2019, 18:26   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Опять?

Цитата:
Сообщение от Petrov210217 Посмотреть сообщение
Не пойму, что не так.
Цитата:
Сообщение от p51x Посмотреть сообщение
Цитата:
Reads from a file of BIN type arrays of any type except string
Цитата:
Сообщение от p51x Посмотреть сообщение
Вам сюда https://www.mql5.com/en/docs/files/filereadnumber и изучать пример.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по программированию С++ loveyou1337 Помощь студентам 1 09.12.2015 18:35
Вопрос по программированию с# BlackShoter Visual C++ 0 11.10.2012 21:32
Вопрос по веб программированию ysmhypno Помощь студентам 3 13.08.2012 21:50
Вопрос по программированию Mister Been Свободное общение 13 01.06.2008 20:23