запись многомерных массивов в файл csv - страница 3

 
Dmitry Fedoseev:

А смотреть в файл глазами вы собираетесь? Может и не надо csv. Записать в бинарный, если смотреть в него не надо.

Смотреть надо

 
Evgeniy Malishevskiy:

Смотреть надо

А как данные должны быть размещены в файле? Есть план? 

Файл csv это по сути таблица, в нее естественным образом можно вместить только двухмерный массив. 

Как вы собираетесь смотреть в этот файл и что нужно видеть?

 
Dmitry Fedoseev:

Файл csv это по сути таблица, в нее естественным образом можно вместить только двухмерный массив. 

Как вы собираетесь смотреть в этот файл и что нужно видеть?

он сам не знает, поэтому и топик открыл

имхо, такие сводные таблицы для 3-х измерений выглядят так:

для 4-х мерной таблицы нужно группировать столбцы ABC в некий столбец Ё   ;)

 
Dmitry Fedoseev:

А как данные должны быть размещены в файле? Есть план? 

Файл csv это по сути таблица, в нее естественным образом можно вместить только двухмерный массив. 

Как вы собираетесь смотреть в этот файл и что нужно видеть?

конечно есть. Система показателей состоит из нескольких видов переменных Те переменные которые в четырёхмерном массиве это значения снятые отдельно с каждого бара за определённый промежуток времени. В экселе получается 36 столбцов разбитые на три в которых по 12 баров. Если понятно конечно. Сделано это для удобства работы в экселе. Всё же в экселе до определённого момента работать удобней каждый раз чтоб не гонять тестер. Работаю с математической статистикой.

До этого делал запись через двумерный массив, но я хочу избавиться от большого количества массивов. 
 
Igor Makanu:

он сам не знает, поэтому и топик открыл

имхо, такие сводные таблицы для 3-х измерений выглядят так:

для 4-х мерной таблицы нужно группировать столбцы ABC в некий столбец Ё   ;)

так понятно?

 
Evgeniy Malishevskiy:

так понятно?

не понятно, вот скрипт в несколько строк написал

#property copyright "Copyright 2019, IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
input string FileName="arr.csv";
#include <Files\FileTxt.mqh>
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   int arr[3][3][3][3];
   string s;
   CFileTxt *FOut=new CFileTxt();
   FOut.Open(FileName,FILE_WRITE|FILE_TXT);
   for(int i0=0; i0<3; i0++)
     {
      s="";
      for(int i1=0;i1<3; i1++)
        {
         for(int i2=0;i2<3; i2++)
           {
            for(int i3=0;i3<3; i3++)
              {
               s+=IntegerToString(arr[i0,i1,i2,i3])+";";
              }
           }
        }
      s+="\n";
      FOut.WriteString(s);
     }
   FOut.Close();
   delete FOut;
  }
//+------------------------------------------------------------------+

Вам нужно для Вашей задачи правильно строку s разделителем "\n" сформировать , я в первом измерении "разрывал" строки, Вам может быть еще как удобнее

 
int handle=FileOpen(pf+".csv", FILE_CSV|FILE_WRITE);
    double size=ArraySize(matrixPRO4);
      for(int i=0;i<size;i++)
      {
       FileWrite (handle,DoubleToStr(matrixPRO4[i][0][0][0]),DoubleToStr(matrixPRO4[i][0][0][1]),DoubleToStr(matrixPRO4[i][0][0][2]),DoubleToStr(matrixPRO4[i][0][0][3]),DoubleToStr(matrixPRO4[i][0][0][4]),DoubleToStr(matrixPRO4[i][0][0][5]),DoubleToStr(matrixPRO4[i][0][0][6]),DoubleToStr(matrixPRO4[i][0][0][7]),DoubleToStr(matrixPRO4[i][0][0][8]),DoubleToStr(matrixPRO4[i][0][0][9]),DoubleToStr(matrixPRO4[i][0][0][10]),DoubleToStr(matrixPRO4[i][0][0][11]),
                DoubleToStr(matrixPRO4[i][0][1][0]),DoubleToStr(matrixPRO4[i][0][1][1]),DoubleToStr(matrixPRO4[i][0][1][2]),DoubleToStr(matrixPRO4[i][0][1][3]),DoubleToStr(matrixPRO4[i][0][1][4]),DoubleToStr(matrixPRO4[i][0][1][5]),DoubleToStr(matrixPRO4[i][0][1][6]),DoubleToStr(matrixPRO4[i][0][1][7]),DoubleToStr(matrixPRO4[i][0][1][8]),DoubleToStr(matrixPRO4[i][0][1][9]),DoubleToStr(matrixPRO4[i][0][1][10]),DoubleToStr(matrixPRO4[i][0][1][11]),
                DoubleToStr(matrixPRO4[i][0][2][0]),DoubleToStr(matrixPRO4[i][0][2][1]),DoubleToStr(matrixPRO4[i][0][2][2]),DoubleToStr(matrixPRO4[i][0][2][3]),DoubleToStr(matrixPRO4[i][0][2][4]),DoubleToStr(matrixPRO4[i][0][2][5]),DoubleToStr(matrixPRO4[i][0][2][6]),DoubleToStr(matrixPRO4[i][0][2][7]),DoubleToStr(matrixPRO4[i][0][2][8]),DoubleToStr(matrixPRO4[i][0][2][9]),DoubleToStr(matrixPRO4[i][0][2][10]),DoubleToStr(matrixPRO4[i][0][2][11]));
      }
   FileClose(handle);

может и тупой способ, но в конце концов работает))) типа ура я придумал)))

 
Igor Makanu:

не понятно, вот скрипт в несколько строк написал

Вам нужно для Вашей задачи правильно строку s разделителем "\n" сформировать , я в первом измерении "разрывал" строки, Вам может быть еще как удобнее

Благодарен за помощь! Но  в ОП я пока не бумбум)

 
Теперь встала новая задача, вытащить из файла обратно в массив!!!
 
Evgeniy Malishevskiy:

Благодарен за помощь! Но  в ОП я пока не бумбум)

забудьте слово ООП и используйте готовые примеры, привыкнете к "." - тогда напишете свой первый класс в ООП

Ваш пример устраивает Вас - ну и ОК, Ваша задача через циклы решается - я выше написал пример: 4 вложенных цикла, и чтобы не запутаться в именах переменных, я использовал i0, i1, i2, i3 - что соответствует номерам измерений массива, затем в результирующую строку собираем свои данные, в конце первого цикла сбрасываем строку  в файл и добавляем перенос строки "\n"

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