새 줄에 파일 쓰기 - 페이지 3

 
Alexey Viktorov :

그리고 이 개념은 표면상 당신만을 위한 것입니다.

나는 "스스로 실험하자"는 제안(개념)이 목소리를 요구하지 않는다는 것을 의미했습니다. 이것은 이미 분명합니다. 나는 Igor를 아주 잘 이해했고 이 옵션에 대해 스스로 생각했습니다. 왜냐하면 그것이 가장 간단하기 때문입니다. 그러나 위에서 설명한 상황에 따라 IMHO는 저에게 잘 어울리지 않습니다.

 
EfremovSergey :

여기 캐치: 프로그램이 있습니다 - 파일에 쓰는 10개 조각과 파일에서 읽는 다른 10개가 있습니다. 각 읽기 프로그램이 매번 전체 누적 데이터 배열을 처리하는 것을 원하지 않습니다.

이 경우 일반적으로 파일을 포기 하고 SQLite 데이터베이스 로 작업하는 것이 좋습니다. 이것은 파일 작업과 매우 유사하며 공유 폴더에서도 생성할 수 있지만 라인 처리, 검색 및 삭제가 훨씬 쉽습니다.

 

Sergey, 이 파일을 눈으로 볼 필요가 없다면 데이터 배열을 한 번에 작성하십시오.

 int eHandle= FileOpen (eFileName, FILE_BIN | FILE_WRITE );
if (eHandle!= INVALID_HANDLE )
   {
   //сначала записываем размер массива
   FileWriteInteger (eHandle, ArraySize (eArray), INT_VALUE );
   //выгружаем данные из массива в файл
   FileWriteArray (eHandle,eArray, 0 , WHOLE_ARRAY );
   FileClose (eHandle);
   }

그런 다음 언제든지 파일에서 배열을 추출하십시오.

 if ( FileIsExist (eFileName))
   {
   eHandle= FileOpen (eFileName, FILE_BIN | FILE_READ );
   if (eHandle!= INVALID_HANDLE )
      {
       //сначала читаем и устанавливаем размер массива
       ArrayResize (eArray, FileReadInteger (eHandle, INT_VALUE ));
       //затем выгружаем данные из файла в массив
       FileReadArray (eHandle,eArray, 0 , WHOLE_ARRAY );
       FileClose (eHandle);
      }
   }

원하는대로 배열을 사용하십시오. 마지막 요소를 삭제하고 추가합니다.

 
Alexey Viktorov :

그리고 이 경우 일반적으로 파일을 포기하고 SQLite 데이터베이스로 작업하는 것이 좋습니다. 이것은 파일 작업과 매우 유사하며 공유 폴더에서도 생성할 수 있지만 라인 처리, 검색 및 삭제가 훨씬 쉽습니다.

MQL4 는 SQLite 작업을 지원합니까? TXT 및 CSV 형식만 있습니까?

심볼릭 링크를 통해 파일에 액세스합니다. 파일 자체가 어디에 있는지, 어떤 폴더에 있는지는 중요하지 않습니다.

 
Aleksei Stepanenko :

Sergey, 이 파일을 눈으로 볼 필요가 없다면 데이터 배열을 한 번에 작성하십시오.

그런 다음 언제든지 파일에서 배열을 추출하십시오.

그리고 원하는 대로 어레이로 작업하십시오. 마지막 요소를 삭제하고 추가합니다.

그렇다면 차이점은 무엇입니까? 어쨌든 배열은 파일에 한 줄씩 기록됩니다. 아니면 이 경우 최소한 마지막 또는 첫 번째 요소인 array=line을 삭제할 수 있습니까?

 

질문을 잘 이해하지 못했습니다. 모든 조작을 쉽게 수행할 수 있는 데이터 배열이 있습니다. 그리고 4줄의 코드로 파일에서 간단하게 쓰고 읽을 수 있습니다. 이것이 장점입니다. 파일에 쓰는 배열 이 정리되어 있어서 무엇을 반영할까요?

배열에 필요한 변경을 하고 수정된 배열을 파일에 업로드하면 끝입니다.

 
Aleksei Stepanenko :

질문을 잘 이해하지 못했습니다. 모든 조작을 쉽게 수행할 수 있는 데이터 배열이 있습니다. 그리고 4줄의 코드로 파일에서 간단하게 쓰고 읽을 수 있습니다. 이것이 장점입니다. 파일에 쓰는 배열 이 정리되어 있어서 무엇을 반영할까요?

배열에 필요한 변경을 하고 수정된 배열을 파일에 업로드하면 끝입니다.

여기서 어려움은 20개의 응용 프로그램이 동일한 어레이에서 동시에 작동해야 하고 주어진 시간에 어떤 편집된 어레이 버전이 관련이 있는지 결정할 수 없다는 사실에 있습니다.

첫 번째 조언자가 어레이를 편집하여 게시하고 다른 조언자의 다른 버전이 즉시 그 위에 작성되지만 이전 버전의 개정을 고려하지 않고 그게 다야... 혼란...

예를 들어 각 어드바이저가 읽은 후 관련 행을 삭제할 수 있으면 모든 것이 합산됩니다. 아무도 간섭하지 않고 파일에 불필요한 데이터가 과부하되지 않으며 편집된 배열이 레이스에서 작성될 때마다, 그렇다면 20명의 어드바이저에서 각각의 데이터 관련성을 동기화하는 방법이 명확하지 않습니다.

 

동일한 파일에 대한 여러 EA의 액세스를 관리하는 것은 고려해야 할 사항입니다.

다음은 생각해 볼 사항입니다.

1. 두 명의 Expert Advisors가 같은 파일을 동시에 작업하는 것을 방지하려면 다른 플래그 파일을 만드십시오. 이 파일이 존재하지 않는 경우 EA는 플래그 파일을 생성하기 전에 데이터 파일을 열 수 있는 권한이 있으며 다른 사람들에게 현재 사용 중임을 보여줍니다. 읽기/쓰기 후 EA 는 플래그 파일을 삭제합니다 . 이제 다른 Expert Advisor가 작업할 수 있도록 데이터를 무료로 사용할 수 있습니다.

2. 이 배열의 데이터를 사용한 모든 Expert Advisors에 대한 정보를 수집하기 위해 변수를 생성할 수 있습니다. 이러한 변수를 동일한 파일에 씁니다.

3. 일반 배열 대신 다양한 데이터 유형 을 포함하고 매우 설명적인 구조의 배열을 만듭니다.

 struct MyData
   {
   int EANumber;
   datetime writeTime;
   double mydata1;
   double mydata2;
   } mydata[];
 
Aleksei Stepanenko :

동일한 파일에 대한 여러 EA의 액세스를 관리하는 것은 고려해야 할 사항입니다.


여러 Expert Advisors가 한 세트의 데이터를 쓰기+추가+선택+읽어야 하는 경우 데이터베이스가 기꺼이 관여합니다.

어떻게든 " 전역 변수 "와 플래그 파일을 통해 문제를 해결할 수 있지만 젠장, 왜?

DBMS의 경로입니다. 기타, 관계형, NoSQL 등이 있지만 이것이 전부입니다. 그리고 거기에서 그들의 역학에서 모든 것이 몇 년 또는 수십 년 동안 디버깅되었습니다. 모든 잠금-플래그-세마포-뮤텍스.
이것을 복제하려는 것은 엄청난 시간 낭비입니다.

 
정확히!
사유: