포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 1116

 
Top2n :

좋은 시간입니다. 완성된 .csv 파일에 새 줄을 추가하는 방법과 첫 번째 줄로 이동하는 방법 - 가능하다면? 글쎄, 또는 어떻게 든 다르게, 그러나 기존 데이터의 재계산 / 열거가 없습니다. 열과 행의 이름을 업데이트할 수 있습니까?

int GenerateCsv( string fileName)
  {
   int handle= FileOpen (fileName, FILE_CSV | FILE_WRITE , " " ),x= 0 ,y= 0 ; 

"\n\t" 형식을 사용하는 경우 FILE_CSV를 제거하고 대신 FILE_ANSI 를 사용하십시오 .

 
alexsis78 :

"\n\t" 형식을 사용하는 경우 FILE_CSV를 제거하고 대신 FILE_ANSI 를 사용하십시오 .

그리고 FileReadArray를 통해 새 막대가 있는 새 줄을 추가 해야 합니다.
 
Top2n :
좋은 시간입니다. 작업은 2차원 배열을 BIN 형식으로 다시 작성하는 것입니다. 함수가 2차원 배열을 입력으로 인식합니까?

파일쓰기 배열

아니면 그냥 한 줄씩 쓰세요?
확실히 2차원으로 읽을 것입니다. 죄송합니다. 실례가 되지 않습니다... 하지만 2x2 요소의 테스트 배열을 작성하고 읽고 보고 보는 것이 더 쉽지 않을까요?
 
Alexey Viktorov :
확실히 2차원으로 읽을 것입니다. 죄송합니다. 실례가 되지 않습니다... 하지만 2x2 요소의 테스트 배열을 작성하고 읽고 보고 보는 것이 더 쉽지 않을까요?

NULL 값이 파일에 기록됩니다. arrayZ 2차원

//+------------------------------------------------------------------+
//| Запись 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 ());
  }
1차원 기록을 시작하면 bin에 상형 문자가 나타나고 2차원은 1차원이 무언가를 쓴 것으로 인식합니다.
 
Top2n :

빈 NULL 값이 파일에 기록됩니다. arrayZ 2차원

//+------------------------------------------------------------------+
//| Запись 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 ());
  }

오늘 나에게 게으른 것이 있고 시간이 없습니다 ... 문서에서이 기능을 찢은 곳에서 구조 배열을 적어 둡니다. 그리고 문서에 제공된 전체 예제가 변경되지 않으면 작동합니까? 직접 확인하시고, 안되면 SD에 쓰셔야 합니다.

 
의도하지 않은 목적으로 FileWriteArray 및 FileReadArray와 같은 샤프너를 사용하지 마십시오.
직렬화 함수입니다. 읽을 수 있는 텍스트 형식으로 파일을 열려면 파일 에 문자열을 씁니다.
string s = StringFormat("첫 번째 줄: %s\n", 첫 번째);
s += StringFormat("두 번째 줄: %s\n", 두 번째);
s += StringFormat("세 번째 줄: %s\n", 세 번째);
파일쓰기;
등등.
FileRead를 읽고 각 줄을 구문 분석하려면(재생해야 하지만 가독성을 원하면 어디로 갈 수 있습니까?)
아이들처럼, 신에 의해. 기능에서 크리스마스 기적을 기대하십시오. 예를 들어 모든 것을 아름답게 처리하고 던지고 형식을 지정하십시오)))
일반적으로 메리 크리스마스, 모든 이익))))
 
alexsis78 :
의도하지 않은 목적으로 FileWriteArray 및 FileReadArray와 같은 샤프너를 사용하지 마십시오.
직렬화 함수입니다. 읽을 수 있는 텍스트 형식으로 파일을 열려면 파일 에 문자열을 씁니다.
string s = StringFormat("첫 번째 문자열: %s\n", 첫 번째);
s += StringFormat("두 번째 문자열: %s\n", 두 번째);
s += StringFormat("세 번째 줄: %s\n", 세 번째);
파일쓰기;
등등.
FileRead를 읽고 각 줄을 구문 분석하려면(재생해야 하지만 가독성을 원하면 어디로 갈 수 있습니까?)
아이들처럼, 신에 의해. 기능에서 크리스마스 기적을 기대하십시오. 예를 들어 모든 것을 아름답게 처리하고 던지고 형식을 지정하십시오)))
일반적으로 메리 크리스마스, 모든 이익))))
직렬화는 괜찮고 배열은 거대합니다. 그리고 채우기의 정확성을 확인하기 위해 읽을 수 있는 형식은 여전히 처음에 있습니다.
 

표시기에서 Expert Advisor로 3차원(또는 2차원) 배열을 추출하여 csv에서 2차원 배열 가져오기를 건너뛸 수 있는지 알려주실 수 있습니까?

FileReadDouble 파일 작업은 2차원 배열을 고려합니까? 그렇다면 어떻게 합니까?

그리고 일반적으로 어떤 연산을 통해 csv 행렬을 배열로 옮기는 것이 더 낫습니다.

예를 들어 어떻게 하는지 이해가 안 돼요

ArrayResize (time_buff,size);
       //--- прочитаем данные из файла
       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의 예

2차원 배열이 있다면 어떻게 정렬할 수 있습니까?

FileReadString 을 사용하는 경우 거기 에 문자열의 길이 를 지정해야 합니다. 문자열의 자릿수를 셀이 아니라 자릿수로 알아야 합니까?

분명히 FileReadNumber 를 사용해야 하지만 이것은 일종의 주석이기도 합니다.

Документация по MQL5: Файловые операции / FileReadDouble
Документация по MQL5: Файловые операции / FileReadDouble
  • www.mql5.com
Файловые операции / FileReadDouble - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Top2n :

표시기에서 Expert Advisor로 3차원(또는 2차원) 배열을 추출하여 csv에서 2차원 배열 가져오기를 건너뛸 수 있는지 알려주실 수 있습니까?

FileReadDouble 파일 작업은 2차원 배열을 고려합니까? 그렇다면 어떻게 합니까?

그리고 일반적으로 어떤 연산을 통해 csv 행렬을 배열로 옮기는 것이 더 낫습니다.

예를 들어 어떻게 하는지 이해가 안 돼요

ArrayResize (time_buff,size);
       //--- прочитаем данные из файла
       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의 예

2차원 배열이 있다면 어떻게 정렬할 수 있습니까?

FileReadString 을 사용하는 경우 거기 에 문자열의 길이 를 지정해야 합니다. 문자열의 자릿수를 셀이 아니라 자릿수로 알아야 합니까?

분명히 FileReadNumber 를 사용해야 하지만 이것은 일종의 주석이기도 합니다.

그리고 우리가 FileWriteArray () 배열을 작성하는 것에 대해 이야기할 때 작성된 내용을 읽으려고 시도한 방법을 알려주세요.
 
Alexey Viktorov :
그리고 우리가 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)  = 0.0   = 0.0   = 0.0
2017.01 . 09 17 : 20 : 40.609 TorFid_v02 (EURUSD,H1)  Total data = 1020100

누락된 것, 2차원 배열로의 역변환을 이해하지만 어떻게

물론 내가 저장했다면

for ( int  z= 1 ; z<=ARRAY_SIZE_Y; z++)  // Перебор по барам, колонка Y
        {
          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 ());
  }