Witam
Jak przejść do następnej linii po przeczytaniu wszystkich rekordów z pierwszej?
Wczytuje przykładowo 300 wartości z pierwszej linii i FileIsLIneEnding cały czas zwraca dalej true podczas gdy mam w kolejnej pętli do przeczytania następne wartości.
FileIsLIneEnding
Nie rozumiem.
Masz plik , podzielony na rekordy , w każdej linii ileś tam danych , po wczytaniu kompletnej linii funkcja nie zwraca true .Tak ?
A może kawałek kodu .
Logicznie - jak przeczytasz całą linię to funkcja zwróci true i tak zostanie ,dopóki nie wczytasz kolejnych danych i wskaźnik pliku nie przejdzie do początku następnej linii , wtedy powinna zwrócić false itd.
Nie używałem tej funkcji ale tak by to chyba wyglądało .
Masz plik , podzielony na rekordy , w każdej linii ileś tam danych , po wczytaniu kompletnej linii funkcja nie zwraca true .Tak ?
A może kawałek kodu .
Logicznie - jak przeczytasz całą linię to funkcja zwróci true i tak zostanie ,dopóki nie wczytasz kolejnych danych i wskaźnik pliku nie przejdzie do początku następnej linii , wtedy powinna zwrócić false itd.
Nie używałem tej funkcji ale tak by to chyba wyglądało .
Nie spiesz się , zawsze zdążysz stracić .
Kod: Zaznacz cały
int handle = FileOpen("pos.csv",FILE_CSV|FILE_READ,",");
int records=0;
while(!FileIsLineEnding(handle))
{
string tmp=FileReadString(handle);
records++;
}
FileClose(handle);
ArrayResize(Long,records);
ArrayResize(Short,records);
ArrayResize(Price,records);
////////////////////////////////////////////////////////////////////
handle = FileOpen("pos.csv",FILE_CSV|FILE_READ,",");
int i=0;
while(!FileIsLineEnding(handle) || FileIsEnding(handle))
{
tmp=FileReadString(handle);
if(tmp==""){break;}
Alert("Long:"+i+":",tmp);
Long[i]=StrToDouble(tmp);
i++;
}
i=0;
tmp=FileReadString(handle);
while(!FileIsLineEnding(handle) || FileIsEnding(handle))
{
Alert("Price:"+i+":",tmp);
Price[i]=StrToDouble(tmp);
i++;
tmp=FileReadString(handle);
}
i=0;
tmp=FileReadString(handle);
while(!FileIsLineEnding(handle) || FileIsEnding(handle))
{
Alert("Short:"+i+":",tmp);
Short[i]=StrToDouble(tmp);
tmp=FileReadString(handle);
i++;
}
FileClose(handle);
Pierwsza tablice wczytuje Ok. Na drugich program wpada w nieskończoną pętlę lub jeśli nie dam wczytywania przed pętla nie wchodzi wcale.
- Pierz Andrzej
- Przyjaciel Forum
- Posty: 1200
- Rejestracja: 02 lip 2006, 14:17
bool FileIsEnding( int handle)
Returns logical true if file pointer is at the end of the file, otherwise returns false.
Po przeczytaniu jednej linijki ,musisz dać wczytanie przed kolejną pętlą , aby przesunąć wskaźnik pliku który zostaje ustawiony na koniec linii inaczej funkcja FileIsLineEnding(handle) ponownie zwróci true - zanegowane czyli false i nie wejdziesz w kolejną pętlę .
Brak chyba w MQL :
Returns logical true if file pointer is at the end of the file, otherwise returns false.
Po przeczytaniu jednej linijki ,musisz dać wczytanie przed kolejną pętlą , aby przesunąć wskaźnik pliku który zostaje ustawiony na koniec linii inaczej funkcja FileIsLineEnding(handle) ponownie zwróci true - zanegowane czyli false i nie wejdziesz w kolejną pętlę .
Brak chyba w MQL :
Kod: Zaznacz cały
do{
}while(warunek);
Nie spiesz się , zawsze zdążysz stracić .
Dałem break i zmienilem warunek w pętli z || na && i dodałem negacje przez FileisEnding.Pierz Andrzej pisze: nie wglebiam sie w sens kodu ale dlaczego nie dasz jak w pierszej petli break??
Tak dzięki.dulf pisze: Po przeczytaniu jednej linijki ,musisz dać wczytanie przed kolejną pętlą , aby przesunąć wskaźnik pliku który zostaje ustawiony na koniec linii inaczej funkcja FileIsLineEnding(handle) ponownie zwróci true - zanegowane czyli false i nie wejdziesz w kolejną pętlę .