Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1116
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Доброе время, как добавить новую строчку в готовый файл.csv, со сдвигом в 1ую строку - если можно? Ну или как то по другому, но без пересчета/перебора существующих данных. Разве что допускается обновление наименования столбцов и строк
{
int handle= FileOpen(fileName,FILE_CSV|FILE_WRITE," "),x=0,y=0;
FILE_CSV убрать, вместо использовать FILE_ANSI если юзаеш формат "\n\t" и тд.
FILE_CSV убрать, вместо использовать FILE_ANSI если юзаеш формат "\n\t" и тд.
Доброго времени, задача переписать двумерный массив, в формат BIN, распознает ли функция на вход двумерный массив?
FileWriteArray
Конечно прочтёт как двухмерный. Извини, не в обиду... а не проще было тестовый массив из 2х2 элемента записать, прочесть и посмотреть?
В фаил записываются пустые значения NULL. arrayZ двумерный
//| Запись n элементов массива в файл |
//+------------------------------------------------------------------+
void WriteData(const int n)
{
//--- откроем файл
ResetLastError();
int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
if(handle!=INVALID_HANDLE)
{
//--- запишем данные массива в конец файла
FileSeek(handle,0,SEEK_END);
FileWriteArray(handle,arrayZ,0,n);
//--- закрываем файл
FileClose(handle);
}
else
Print("Failed to open the file, error ",GetLastError());
}
В фаил записываются пустые значения NULL. arrayZ двумерный
//| Запись n элементов массива в файл |
//+------------------------------------------------------------------+
void WriteData(const int n)
{
//--- откроем файл
ResetLastError();
int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
if(handle!=INVALID_HANDLE)
{
//--- запишем данные массива в конец файла
FileSeek(handle,0,SEEK_END);
FileWriteArray(handle,arrayZ,0,n);
//--- закрываем файл
FileClose(handle);
}
else
Print("Failed to open the file, error ",GetLastError());
}
Что-то мне сегодня лениво да и некогда... В документации, откуда ты содрал эту функцию, вообще записывают даже массив структур. А работает-ли весь пример приведённый в документации если его не менять? Проверь сам, если не работает надо писать в СД.
Это функции сериализации. Если вы хотите открывать файл текстовім читабельным форматом - пишите в файл стринги.
string s = StringFormat("первая строка: %s\n", first);
s += StringFormat("вторая строка: %s\n", second);
s += StringFormat("третяя строка: %s\n", third);
FileWrite(s);
и так далее и тому подобное.
Для чтения FileRead и парсить каждый лайн (поиграть надо, но куда денешься если хочешь читабельности).
Как дети, ей Богу. Ждать от функи роджественского чуда, типа, само все сделает красиво накидает и отформатирует )))
А вообще, с Рождеством, всем профита )))
Не юзайте заточки типа FileWriteArray и FileReadArray для тех целей, для которых они не предназначены.
Это функции сериализации. Если вы хотите открывать файл текстовім читабельным форматом - пишите в файл стринги.
string s = StringFormat("первая строка: %s\n", first);
s += StringFormat("вторая строка: %s\n", second);
s += StringFormat("третяя строка: %s\n", third);
FileWrite(s);
и так далее и тому подобное.
Для чтения FileRead и парсить каждый лайн (поиграть надо, но куда денешься если хочешь читабельности).
Как дети, ей Богу. Ждать от функи роджественского чуда, типа, само все сделает красиво накидает и отформатирует )))
А вообще, с Рождеством, всем профита )))
Подскажите можно ли обойти импорт двух мерного массива из csv., путем извлечения трех(или двух) мерного массива из индикатора в советник?
C считает ли файловая операция FileReadDouble Двумерный массив, если да то каким образом?
И вообще через какую операцию лучше перевести csv матрицу в массив.
Вообще не понимаю как, вот например взять пример
//--- прочитаем данные из файла
for(int i=0;i<size;i++)
{
time_buff[i]=(datetime)FileReadDouble(file_handle);
ma_buff[i]=FileReadDouble(file_handle);
}
как это так, записываем одни и те же данные в массив time_buff[i]и ma_buff[i]
пример из https://www.mql5.com/ru/docs/files/filereaddouble
А если у меня двух мерный массив то как мне перебор устроить.
Если использовать FileReadString, то там нужно указать длину строки, это типо надо знать количество цифр в страке, не ячеек а цифр?
По всей видимости надо использовать FileReadNumber но тоже это жесть какая та
Подскажите можно ли обойти импорт двух мерного массива из csv., путем извлечения трех(или двух) мерного массива из индикатора в советник?
C считает ли файловая операция FileReadDouble Двумерный массив, если да то каким образом?
И вообще через какую операцию лучше перевести csv матрицу в массив.
Вообще не понимаю как, вот например взять пример
//--- прочитаем данные из файла
for(int i=0;i<size;i++)
{
time_buff[i]=(datetime)FileReadDouble(file_handle);
ma_buff[i]=FileReadDouble(file_handle);
}
как это так, записываем одни и те же данные в массив time_buff[i]и ma_buff[i]
пример из https://www.mql5.com/ru/docs/files/filereaddouble
А если у меня двух мерный массив то как мне перебор устроить.
Если использовать FileReadString, то там нужно указать длину строки, это типо надо знать количество цифр в страке, не ячеек а цифр?
По всей видимости надо использовать FileReadNumber но тоже это жесть какая та
А скажи пожалуйста, когда мы говорили о записи массива FileWriteArray() ты как пытался прочесть записанное?
string path=InpDirectoryName+"//"+InpFileName;
//--- откроем файл
ResetLastError();
int file_handle=FileOpen(path,FILE_READ|FILE_BIN);
if(file_handle!=INVALID_HANDLE)
{
//--- прочитаем все данные из файла в массив
FileReadArray(file_handle,arr);
//--- получим размер массива
int size=ArraySize(arr);
//--- распечатаем данные из массива
Print(" = ",arr[0][0]," = ",arr[1][1]," = ",arr[2][2]);
Print("Total data = ",size);
//--- закрываем файл
FileClose(file_handle);
}
else
Print("File open failed, error ",GetLastError());
2017.01.09 17:20:40.609 TorFid_v02 (EURUSD,H1) Total data = 1020100
Я понимаю что не хватает, обратного преобразования в двумерный массив, но я не понимаю как
Если конечно я сохранил правильно
{
for(int q=1; q<ARRAY_SIZE_X-1; q++) // Перебор по периоду, колонка X
{
arr[q][z]=NormalizeDouble(sm.d[q+1].m[nBar-z],5); // M(I) SMA
}
}
WriteData(1000);
//| Запись n элементов массива в файл |
//+------------------------------------------------------------------+
void WriteData(const int n)
{
//--- откроем файл
ResetLastError();
int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
if(handle!=INVALID_HANDLE)
{
//--- запишем данные массива в конец файла
FileSeek(handle,0,SEEK_END);
FileWriteArray(handle,arr,0,n);
//--- закрываем файл
FileClose(handle);
}
else
Print("Failed to open the file, error ",GetLastError());
}