2015-10-14 1 views
1

У меня есть код в Metatrader, который записывает некоторые цитаты в CSV, но при этом же в C# советнике считывает значения другой способ .... Этот код в MetaEditor записывает файл CSV:разница между Metatrader CSV и C# StreamWriter CSV. Как его решить?

li_40 = FileOpen(ls_32, FILE_CSV|FILE_WRITE|FILE_SHARE_READ, ";"); 
     if (li_40 > 0) { 
     FileWrite(li_40, ls_16); 
     FileClose(li_40); 

Это Записывает в C#:

  List<string> listB = new List<string>(); 
      using (StreamReader reader = new StreamReader(File.OpenRead(oFile))) 
      { 
       while (!reader.EndOfStream) 
       { 
        var line = reader.ReadLine(); 
        listB.Add(reader.ReadLine()); 
       } 
       reader.Close(); 
      } 
      using (StreamWriter swOut = new StreamWriter(oFile)) 
      { 

       foreach (var item in listB) 
       { 
        swOut.Write(item); 
        swOut.Write(Environment.NewLine); 
       } 
       for (int i = 0; i <= gridIn.Columns.Count - 1; i++) 
       { 
        if (i > 0) 
        { 
         swOut.Write(", "); 
        } 

        value = dr.Cells[i].Value.ToString(); 
        string vals = dr.Cells[2].Value.ToString(); 
              int priceDecimalPlaces = vals.Split('.').Count() > 1 
            ? vals.Split('.').ToList().ElementAt(1).Length 
            : 0; 
              string nell = "0"; 
              if (priceDecimalPlaces == 3) 
              { 
               nell = "0.001"; 
              } 
              if (priceDecimalPlaces == 5) 
              { 
               nell = "0.00001"; 
              } 
              if (priceDecimalPlaces == 4) 
              { 
               nell = "0.0001"; 
              } 

        //replace comma's with spaces 
        value = value.Replace(',', ' '); 
        //replace embedded newlines with spaces 
        value = value.Replace(Environment.NewLine, ""); 

Если разница между C# double и текущей double значение метаТрейдера является 0.12098-0.12096=2, то Metatrader не увидит значение как 2, но что-то гораздо выше, как 18,17 и так on, но записывая эту же ценность от кода МетаТрейдера дает правильное значение ...

Я прочитал CSV, используя _lread:

 uchar chBuff[1024]; 
    int res = _lread(hFile, chBuff, 1); 
    // 
    //CreateFileA(
    res = _lread(hFile, chBuff, 350); 
    ls_308 = CharArrayToString(chBuff, 0, res, CP_UTF8); 
    //Alert(Ls_84); 
    ls_308=StringSubstr(ls_308,0,StringFind(ls_308,"\r\n",0)); 

    if (_lclose(hFile)<0) Print("Error closing"); 

Я думаю, что есть какая-то разница между C# удваивается на Metatrader и нормальный Metatrader удваивает

ответ

0

Обнаружена ошибка вызванные языка кодирования системы, которая была отличается от UTF-8, который был указан в коде Metatrader

ls_308 = CharArrayToString(chBuff, 0, res, CP_UTF8); 

Итак, я изменил кодировку UTF для всех Код страницы, присвоенный системой, делая это

ls_308 = CharArrayToString(chBuff, 0, res, CP_ACP); 

Надежда кого-то найти этот полезный ..