Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 1116

 
Top2n :

İyi seyirler, bitmiş .csv dosyasına 1. satıra geçişle yeni bir satır nasıl eklenir - mümkünse? Peki ya da bir şekilde farklı, ancak mevcut verilerin yeniden hesaplanması / numaralandırılması olmadan. Sütun ve satır adlarını güncellemek mümkün mü?

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

FILE_CSV'yi kaldırın, bunun yerine "\n\t" biçimini vb. kullanıyorsanız FILE_ANSI kullanın .

 
alexsis78 :

FILE_CSV'yi kaldırın, bunun yerine "\n\t" biçimini vb. kullanıyorsanız FILE_ANSI kullanın .

Ve yeni bir çubukla yeni bir satır eklemek için FileReadArray'e ihtiyacım var
 
Top2n :
İyi zaman, görev iki boyutlu bir diziyi BIN biçiminde yeniden yazmak, işlev iki boyutlu bir diziyi girdi olarak tanıyor mu?

FileWriteArray

Yoksa satır satır yazmak mı?
Kesinlikle iki boyutlu olarak okuyacaktır. Kusura bakmayın, kusura bakmayın ama 2x2 elemanlı bir test dizisini yazmak, okumak ve görüntülemek daha kolay olmaz mıydı?
 
Alexey Viktorov :
Kesinlikle iki boyutlu olarak okuyacaktır. Kusura bakmayın, kusura bakmayın ama 2x2 elemanlı bir test dizisini yazmak, okumak ve görüntülemek daha kolay olmaz mıydı?

Dosyaya boş NULL değerler yazılır. diziZ iki boyutlu

//+------------------------------------------------------------------+
//| Запись 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 ());
  }
Tek boyutlu kaydetmeye başlarsam, bölmede hiyeroglifler belirir, iki boyutlu NULL olarak tanır tek boyutlu bir şey yazdı
 
Top2n :

Dosyaya boş NULL değerler yazılır. diziZ iki boyutlu

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

Bugün bana bir şey tembel ve zaman yok ... Belgelerde, bu işlevi nereden kopardığınızı bile, bir dizi yapıyı bile yazıyorlar. Ve belgelerde verilen örneğin tamamı değiştirilmezse çalışır mı? Kendiniz kontrol edin, çalışmazsa SD'ye yazmanız gerekir.

 
FileWriteArray ve FileReadArray gibi kalemtraşları tasarlanmadıkları amaçlar için kullanmayın.
Bunlar serileştirme işlevleridir. Bir dosyayı okunabilir metin biçiminde açmak istiyorsanız, dosyaya dizeler yazın.
string s = StringFormat("ilk satır: %s\n", ilk);
s += StringFormat("ikinci dize: %s\n", saniye);
s += StringFormat("üçüncü satır: %s\n", üçüncü);
FileWrite(lar);
ve saire ve saire.
FileRead okumak ve her satırı ayrıştırmak için (oynamanız gerekir, ancak okunabilirlik istiyorsanız nereye gidebilirsiniz).
Çocuklar gibi, Tanrı tarafından. İşlevden bir Noel mucizesi bekleyin, her şeyi güzelce yapacak, fırlatıp biçimlendirecek)))
Genel olarak, Mutlu Noeller, tüm karlar)))
 
alexsis78 :
FileWriteArray ve FileReadArray gibi kalemtraşları tasarlanmadıkları amaçlar için kullanmayın.
Bunlar serileştirme işlevleridir. Bir dosyayı okunabilir metin biçiminde açmak istiyorsanız, dosyaya dizeler yazın.
string s = StringFormat("ilk satır: %s\n", ilk);
s += StringFormat("ikinci satır: %s\n", saniye);
s += StringFormat("üçüncü satır: %s\n", üçüncü);
FileWrite(lar);
ve saire ve saire.
FileRead okumak ve her satırı ayrıştırmak için (oynamanız gerekir, ancak okunabilirlik istiyorsanız nereye gidebilirsiniz).
Çocuklar gibi, Tanrı tarafından. İşlevden bir Noel mucizesi bekleyin, her şeyi güzelce yapacak, fırlatıp biçimlendirecek)))
Genel olarak, Mutlu Noeller, tüm karlar)))
Serileştirme iyi, dizi çok büyük. Ve okunabilir format, doldurmanın doğruluğunu kontrol etmek için hala başlangıçta.
 

Csv'den iki boyutlu bir dizinin içe aktarılmasını atlamanın mümkün olup olmadığını söyleyebilir misiniz, Göstergeden Uzman Danışmana üç (veya iki) boyutlu bir dizi çıkararak?

FileReadDouble dosya işlemi iki boyutlu bir diziyi dikkate alıyor mu ve öyleyse nasıl?

Ve genel olarak, csv matrisini bir diziye aktarmak için hangi işlemle daha iyidir.

Örneğin nasıl örnek alındığını anlamıyorum

ArrayResize (time_buff,size);
       //--- прочитаем данные из файла
       for ( int i= 0 ;i<size;i++)
        {
         time_buff[i]=( datetime ) FileReadDouble (file_handle);
         ma_buff[i]= FileReadDouble (file_handle);
        }

nasılsa aynı verileri time_buff[i] ve ma_buff[i] dizisine yazıyoruz

https://www.mql5.com/ru/docs/files/filereaddouble adresinden örnek

Ve eğer iki boyutlu bir dizim varsa, onu nasıl düzenleyebilirim.

FileReadString kullanıyorsanız, o zaman orada dizenin uzunluğunu belirtmeniz gerekir, dizedeki hücre değil de basamak sayısını bilmesi gerekiyor mu?

Görünüşe göre FileReadNumber kullanmanız gerekiyor, ancak bu aynı zamanda bir tür kalay

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

Csv'den iki boyutlu bir dizinin içe aktarılmasını atlamanın mümkün olup olmadığını söyleyebilir misiniz, Göstergeden Uzman Danışmana üç (veya iki) boyutlu bir dizi çıkararak?

FileReadDouble dosya işlemi iki boyutlu bir diziyi dikkate alıyor mu ve öyleyse nasıl?

Ve genel olarak, csv matrisini bir diziye aktarmak için hangi işlemle daha iyidir.

Örneğin nasıl örnek alındığını anlamıyorum

ArrayResize (time_buff,size);
       //--- прочитаем данные из файла
       for ( int i= 0 ;i<size;i++)
        {
         time_buff[i]=( datetime ) FileReadDouble (file_handle);
         ma_buff[i]= FileReadDouble (file_handle);
        }

nasılsa aynı verileri time_buff[i] ve ma_buff[i] dizisine yazıyoruz

https://www.mql5.com/ru/docs/files/filereaddouble adresinden örnek

Ve eğer iki boyutlu bir dizim varsa, onu nasıl düzenleyebilirim.

FileReadString kullanıyorsanız, o zaman orada dizenin uzunluğunu belirtmeniz gerekir, dizedeki hücre değil de basamak sayısını bilmesi gerekiyor mu?

Görünüşe göre FileReadNumber kullanmanız gerekiyor, ancak bu aynı zamanda bir tür kalay

Ve lütfen söyleyin bana, FileWriteArray () dizisini yazmaktan bahsettiğimizde, yazılanları nasıl okumaya çalıştınız?
 
Alexey Viktorov :
Ve lütfen söyleyin bana, FileWriteArray () dizisini yazmaktan bahsettiğimizde, yazılanları nasıl okumaya çalıştınız?

//--- путь к файлу
   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

Neyin eksik olduğunu anlıyorum, iki boyutlu bir diziye ters dönüşüm, ama nasıl olduğunu anlamıyorum

Tabii doğru kaydettiysem

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 ());
  }