Adjunto una muestra del archivo csv strenght, para que se pueda ver el formato. Gracias.
Yo no termino de entender al 100% el Excel, pero lo poco que entiendo se puede hacer sin un archivo, no sé realmente la necesidad de hacerlo así. Yo no te puedo ayudar en este caso, disculpa.
Es o muy difícil para mi, o muy diferente a los que yo estoy acostumbrado a hacer.
int handle=FileOpen(archivo,FILE_CSV|FILE_READ|FILE_ANSI);
void OnStart() { //--- int cont=0; string archivo="ejemplo.csv"; int handle=FileOpen(archivo,FILE_CSV|FILE_READ|FILE_ANSI); if(handle<0) Alert("ERROR HANDLE ",archivo); while(!FileIsEnding(handle)) { string x=FileReadString(handle); if(FileIsLineEnding(handle)) { cont++; //cont va contando el número de filas Alert("cont= ",cont, " x= ",x); //el resultado de alert es el siguiente //cont=1 x=A;B;C;D;E; //cont=2 x=F;G;H;I;J; //cont=3 x=K;L;M;N;O; } } FileClose(handle); }
Miguel Antonio gracias por contestarme. Efectivamente he añadido FILE_ANSI y ahora sí lee los datos, pero de otra manera: después de x=FileReadString(handle); en mql4, x daba un valor por cada celda de la csv, en cambio en mql5, añadiendo FILE_ANSI, x da un valor igual a las celdas de toda la fila separadas por punto y coma.
Añadiendo if(FileIsLineEnding(handle) estoy viendo cada valor de x.
El ejemplo sería:
valor de x después de leer la primera fila: x=A;B;C;D;E; //el número de columnas es 5, y es un dato fijo que conozco
valor de x después de leer la segunda fila: x=F;G;H;I;J;
valor de x después de leer la tercera fila; x=K;L;M;N;O;
usando un contador cont++ puedo saber que son 3 filas a pasar al array. Por tanto tengo tres valores de x para formar un array[3][5].
¿Cómo puedo hacerlo?. Gracias.
- www.mql5.com
Miguel Antonio gracias por contestarme. Efectivamente he añadido FILE_ANSI y ahora sí lee los datos, pero de otra manera: después de x=FileReadString(handle); en mql4, x daba un valor por cada celda de la csv, en cambio en mql5, añadiendo FILE_ANSI, x da un valor igual a las celdas de toda la fila separadas por punto y coma.
Añadiendo if(FileIsLineEnding(handle) estoy viendo cada valor de x.
El ejemplo sería:
valor de x después de leer la primera fila: x=A;B;C;D;E; //el número de columnas es 5, y es un dato fijo que conozco
valor de x después de leer la segunda fila: x=F;G;H;I;J;
valor de x después de leer la tercera fila; x=K;L;M;N;O;
usando un contador cont++ puedo saber que son 3 filas a pasar al array. Por tanto tengo tres valores de x para formar un array[3][5].
¿Cómo puedo hacerlo?. Gracias.
Debes entonces, "cortar" o "separar" los valores, entiendo que tienes como separador el ";". y con esos valores separados, ponerlos donde debes, para ello te puede ayudar la funcion "StringSplit()"
La informacion que obtienes es diferente,(Pero al menos ya la tienes), así que debes reajustarla para ponerla en los arrays bidimensionales.
Espero puedas avanzar, saludos!!!
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Esta función es parte de mi EA, y pasa los datos de dos archivos csv a arrays. En mql4 funciona bien, pero en mql5 no va. FileOpen funciona bien, porque el handle es correcto. Pero a partir de While(!FileIsEnding) ya no busca el texto por toda la csv. En las hojas csv la primera columna tiene en cada fila el texto que coincide con el nombre y ya en las siguientes columnas otros datos, luego después de While(!FileIsEnding) el contador cont debería contar todas las filas con datos, pero este contador cont se queda igual a 1. Por favor si alguien me ayuda lo agradecería, en mql4 me manejo bien pero estoy empezando en mql5.
Supongo que la razón de que no funcione en mql5 debe ser por el uso de FileIsEnding o FileReadString(handle), que no es exactamente igual en mql5, pero no logro averiguar que he de cambiar.
Gracias