/////////////////////////////////////////////////////// // // SaherElm IT Center MQL5 Class Library // ---------------------------------------------- // Name: XSCDataCollector // Description: provides Data Collection Requirements ... // // // Maintainer: // ------------ // Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) // ////////////////////////////////////////////////////// // // Global Properties ... #property library #property copyright "Copyright 2023, SaherElm IT Center" #property link "https://www.saherelm.ir" #property version "1.00" #property strict // // Imports ... #include "../Classes/x-saherelm.base.class.mq5" // template class XSCDataCollector : public XSCBase { // // Public ... public: // // Props ... // // Constructors ... void XSCDataCollector( string path = NULL, // Base Folder for Data Store string fileName = NULL // File Name for Data Store ) { // if (!IsValid(path)) { path = GetType(); } // if (!IsValid(fileName)) { fileName = GetType() + ".txt"; } // Path(path); FileName(fileName); } // // Deconstructor ... void ~XSCDataCollector() {} // // Properties ... // bool Path(string value) { // bool result = false; // result = IsValid(value); if (!result) { return result; } // result = value != mPath; if (!result) { return result; } // mPath = value; // return result; } // string Path() { return mPath; } // bool FileName(string value) { // bool result = false; // result = IsValid(value); if (!result) { return result; } // result = value != mFileName; if (!result) { return result; } // mFileName = value; // return result; } // string FileName() { return mFileName; } // // Tools ... // // Clear Exists Collected Data ... void Clear() { // ResetLastError(); // string dataStorePath = GetStorePath(); // // Check Data Store Exists or not ... bool isExists = FileIsExist(dataStorePath); if (!isExists) { return; } // FileDelete(dataStorePath); } // // Collect All Stored Items ... int Collect( T &items[] // Hold Result ) { // int result = 0; // Clean(items); // // Reading Store Whole Content ... // string storePath = GetStorePath(); int mFileHandler = FileOpen( storePath, FILE_READ | FILE_TXT); result = mFileHandler != INVALID_HANDLE; if (!result) { return result; } // // Parse Store Content and Read Data ... while (!FileIsEnding(mFileHandler)) { // // Each Line Represent One Model ... string content = FileReadString(mFileHandler); // T iItem; bool isValid = iItem.ParseModel(content); if (isValid) { // AddRef( iItem, items // ); } } // // Close File ... FileClose(mFileHandler); // result = ArraySize(items); // return result; } // // Add Item ... bool Add( T &item // Item to Store ) { // bool result = false; // result = item.IsModelValid(); if (!result) { return result; } // string content = item.ToModelString(); result = IsValid(content); if (!result) { return result; } // string storePath = GetStorePath(); int mFileHandler = FileOpen( storePath, FILE_READ | FILE_WRITE | FILE_TXT); result = mFileHandler != INVALID_HANDLE; if (!result) { return result; } // FileSeek(mFileHandler, 0, SEEK_END); FileWrite(mFileHandler, content); FileFlush(mFileHandler); FileClose(mFileHandler); // return result; } // // Add Item ... bool Add( string content // Content ) { // bool result = false; // result = IsValid(content); if (!result) { return result; } // string storePath = GetStorePath(); int mFileHandler = FileOpen( storePath, FILE_READ | FILE_WRITE | FILE_TXT); result = mFileHandler != INVALID_HANDLE; if (!result) { return result; } // FileSeek(mFileHandler, 0, SEEK_END); FileWrite(mFileHandler, content); FileFlush(mFileHandler); FileClose(mFileHandler); // return result; } // // Add Items ... int Add( T &items[] // Items to Add ... ) { // int result = 0; // int itemsCount = ArraySize(items); if (itemsCount <= 0) { return result; } // for (int i = 0; i < itemsCount; i++) { // T iItem = items[i]; // if (!iItem.IsModelValid()) { continue; } // bool isAdded = Add(iItem); if (isAdded) { result++; } } // return result; } // // Remove Item ... bool Remove( T &item // Item to Remove ) { // bool result = false; // result = item.IsModelValid(); if (!result) { return result; } // T items[]; int itemsCount = Collect(items); if (itemsCount <= 0) { return result; } // int itemIndex = item.FindIndex(items); result = ArrayRemove( items, itemIndex, 1); if (!result) { return result; } // Clear(); // int itemsAdded = Add(items); // result = itemsAdded == ArraySize(items); // return result; } // // Protected ... protected: // // Tools ... // // Retrieve Type of Class as String ... string GetType() { // string mType = (string) typename(T); // string result = mType; // string parts[]; int partsCount = SplitContent( parts, result, " " // ); if (partsCount <= 0) { // result = mType; return result; } // bool hasLastPart = GetLastItem( result, parts // ); if (!hasLastPart) { // result = mType; return result; } // return result; } // // Pricate ... private: // // Props ... // string mPath; // Path string mFileName; // Data Store File Name // // Tools ... // // Generate Full File Path ... string GetFilePath(string fileName) { // string result = ""; // result = // Path() + "\\" + fileName // ; // return result; } // // Retrieve Data Store File Address ... string GetStorePath() { // string result = NULL; // result = GetFilePath(mFileName); // return result; } }; //