Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Почитай интервью участников Automated Trading Championship
ALIAKSANDR TSYRULNIK
534
ALIAKSANDR TSYRULNIK 2014.04.09 20:47 

Помогите пожалуйста разобраться, как прочитать данные из CSV файла:


Alpari Limited 6932895 5000 0 0 0 0

Данные одной строкой. Тип по порядку: string / integer / double / double / double / double / double /

Начал так: int handle=FileOpen("Acc2.csv",FILE_READ|FILE_CSV); а далее......?

Благодарю заранее!

Dmitry Fedoseev
41209
Dmitry Fedoseev 2014.04.10 04:59  

В csv нет стрингов, даблов, интов. В csv есть строки и поля через разделитель.

При открытии файла указывать разделитель, похоже в этом файле разделитель "\t". Дальше читать поля функцией FileReadString(). Еще пригодятся функции FileIsEnding(), FileIsLineEnding(), чтобы знать когда будет прочитат весь файл и отдельная строка.

ALIAKSANDR TSYRULNIK
534
ALIAKSANDR TSYRULNIK 2014.04.10 07:32  
Integer:

В csv нет стрингов, даблов, интов. В csv есть строки и поля через разделитель.

При открытии файла указывать разделитель, похоже в этом файле разделитель "\t". Дальше читать поля функцией FileReadString(). Еще пригодятся функции FileIsEnding(), FileIsLineEnding(), чтобы знать когда будет прочитат весь файл и отдельная строка.


спасибо Дмитрий за подсказку!

Начал так:

int handle=FileOpen("Acc"+DY+".csv",FILE_READ|FILE_CSV); string STR;

while(!FileIsEnding(handle) ){

STR=FileReadString(handle);

}FileClose(handle);Print(STR);

Печатает последнее значение строки, но на экран почему-то не выводит. (может нужно тип значения изменить на другой??)

Дмитрий, помогите плиз в семь различных переменных залить значения из одной строки CSV файла, состоящей из 7-ми полей. (и какого типа должны быть переменные?)

Заранее благодарю!

Dmitry Fedoseev
41209
Dmitry Fedoseev 2014.04.10 08:05  
   int h=FileOpen("1.txt",FILE_CSV|FILE_READ,"\t");
   
   string Data[10][10];
   
   int Field=0;
   int Line=0;
   
   while(!FileIsEnding(h) && !IsStopped()){
      Data[Line][Field]=FileReadString(h);
      Field++;
         if(FileIsLineEnding(h)){
            Field=0;
            Line++;
         }
      
   }
   
   Alert(Data[0][0]," ",Data[0][1]," ",Data[0][2]);
   Alert(Data[1][0]," ",Data[1][1]," ",Data[1][2]);
   Alert(Data[2][0]," ",Data[2][1]," ",Data[2][2]);
   
   FileClose(h);
В приложении файл.
Файлы:
1.txt 1 kb
ALIAKSANDR TSYRULNIK
534
ALIAKSANDR TSYRULNIK 2014.04.10 11:04  

Спасибо Дмитрий огромное!!

Все выводит алертом и печатает с пом. Print, НО .... Data[0][0] содержит всю первую строку со всеми полями!!! а не одно первое поле CSV файла. А как вывести значение одной строки отдельно по полям?

Подскажите излечение беды)

Благодарю заранее!!

Dmitry Fedoseev
41209
Dmitry Fedoseev 2014.04.10 11:11  
Остальные строки как? По полям или так же вся строка в одном элементе массива?

Покажите файлик. Весь не надо. От начала несколько строк.
ALIAKSANDR TSYRULNIK
534
ALIAKSANDR TSYRULNIK 2014.04.10 12:42  

Спасибо! РАЗОБРАЛСЯ!!

int h=FileOpen("1.txt",FILE_CSV|FILE_READ,";"); вместо "\t" нужно ";"

Заработало)

fletch_er
4
fletch_er 2014.04.14 18:47  

Всем доброго времени суток!

Дмитрий, вопрос к вам наверно))...Скрипт, который вы написали, рабочий (использую ваш же файл для тестирования и проверки: 1.txt)...но у меня не выводит значения по Alert() или по Print(). Выдает пустые значения (равно нолю) !

До этого проверял множество других скриптов...и сам писал кое-что...результат один и тот же...выводит на печать в журнал пустые значения(ноль или 0.00000, если используется DoubleToStr(...,5))

В чем может быть проблема? Может в терминале/эдиторе (что очень сомнительно)? Билд метаэдитора 914, терминала 625 (Alpari) .

Буду очень благодарен за ответ! Спасибо!

Dmitry Fedoseev
41209
Dmitry Fedoseev 2014.04.15 03:45  
fletch:

Всем доброго времени суток!

Дмитрий, вопрос к вам наверно))...Скрипт, который вы написали, рабочий (использую ваш же файл для тестирования и проверки: 1.txt)...но у меня не выводит значения по Alert() или по Print(). Выдает пустые значения (равно нолю) !

До этого проверял множество других скриптов...и сам писал кое-что...результат один и тот же...выводит на печать в журнал пустые значения(ноль или 0.00000, если используется DoubleToStr(...,5))

В чем может быть проблема? Может в терминале/эдиторе (что очень сомнительно)? Билд метаэдитора 914, терминала 625 (Alpari) .

Буду очень благодарен за ответ! Спасибо!


Может файл на там.

После первой строчки:

int h=FileOpen("1.txt",FILE_CSV|FILE_READ,"\t");

можно посмотреть чему равно h.

Alert("h="+h);
или
Print("h="+h);
Если -1, значит файл не там, где надо.
fletch_er
4
fletch_er 2014.04.15 11:31  

Print("h="+h); выдает предупреждение implicit conversion...но Print("h=",h); действительно, возвращает -1.

Всё значит еще выходит банальней))) Терминал в марте обновился. Теперь все файлы хранятся видимо в \MQL4\Files\ а не в \experts\files\

Мда...внимательней мне стоит быть, чудес-то как всегда не бывает. Убил кучу времени с проверкой кода)))

Спасибо за помощь!

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий