Чтение из CSV файла !!

 

Помогите пожалуйста разобраться, как прочитать данные из 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); а далее......?

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

 

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

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

 
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-ми полей. (и какого типа должны быть переменные?)

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

 
   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
 

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

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

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

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

 
Остальные строки как? По полям или так же вся строка в одном элементе массива?

Покажите файлик. Весь не надо. От начала несколько строк.
 

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

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

Заработало)

 

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

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

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

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

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

 
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, значит файл не там, где надо.
 

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

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

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

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