Errores, fallos, preguntas - página 326

 
Urain:

En el primer post estás haciendo operaciones de asignación, la asignación múltiple en cascada es aceptable. Aquí se trata de hacer una comparación múltiple.


Sé cómo comparar, pero si(a<b<c) funciona y se ve más bonito aunque la ayuda no dice nada al respecto. ¿cómo funciona más rápido?
 
sergey1294:
Sé cómo comparar, pero if(a<b<c) funciona y se ve más bonito, aunque la ayuda no dice nada al respecto. ¿Pero cómo funciona más rápido?

Su expresión es igual a esta

if(a<(b<c))
comparas b y c, el resultado de esta comparación será 0 o 1 y luego comparas este resultado con a.
 
sergey1294:
Sé cómo comparar, pero si(a<b<c) funciona y se ve más bonito, aunque la ayuda no dice nada al respecto ¿Cómo funciona más rápido?

Así es como funciona.

if(a&&b&&c==3)Alert("a=b=c=3");
if(a<b&&b<c)Alert("a<b<c");
  if(a==b)Alert("a=b");

y esto no.

 if(a<b<c)Alert("a<b<c");
 if(a=b=c=3)Alert("a=b=c=3");
 if(a==b==c==3)Alert("a=b=c=3");
 if(a==b==c)Alert("a=b=c"); //Вот нежелание работать этого примера для меня странно (хотя может так и задумано)
Urain:

Su expresión equivale a esto

se comparan b y c, el resultado de esta comparación será 0 o 1 después se compara este resultado con a.
Con esta lógica todo se aclara, pero por alguna razón creo que a y b se compararán primero (puede que me equivoque por supuesto)...
 
Urain:

Su expresión es la misma que ésta.

se comparan b y c, el resultado de esta comparación es 0 o 1 y luego se compara este resultado con a.

Ya veo, pero aquí está el truco con esta expresión, pero no funciona

void OnStart()
  {
//---
   int a=1;
   int b=2;
   int c=3;
   int d=3;
//---   
   if(a!=b<c==d)Alert("");
   else Alert("Условие не верно");
//---
  }
 
Interesting:
... Sólo que de alguna manera pienso que a y b se compararán primero (puedo estar equivocado, por supuesto)...
Sí, me equivoco mecánicamente, primero hay una comparación a la izquierda y luego a la derecha.
 
sergey1294:

Ya veo, pero aquí está el truco con esta expresión, pero no funciona

No, es que hay que tener en cuenta las prioridades de las operaciones y el comentario de Urain.

Esta expresión tampoco tiene problemas, pero falla mucho.

if(a<b<c)Alert("a<b<c");

Esta cuestión se describe en detalle en la edición, sección "Prioridades y orden de las operaciones". (Hay que tener en cuenta la prioridad y el orden de las operaciones).

Así que, si he entendido bien, la comparación según el compilador queda así (teniendo en cuenta los comentarios de Nikolai)

if((a!=(b<c))==d)Alert("")
 
Interesting:
¿Cuál es el tamaño aproximado de la lista? Tal vez haya un límite en el tamaño de la lista...
Exactamente 100 líneas.
 
-Alexey-:
Exactamente 100 líneas.

He experimentado con una de mis bibliotecas (110 funciones), mostrando del 100 al 106 en la lista (y un número diferente todo el tiempo, pero no el 110).

 

Al leer el archivo .csv, surgieron varios problemas a la vez. Para tratar de averiguar las razones del mal funcionamiento, escribí un sencillo script. El script lee los datos del archivo "test.csv". En cuanto llega al final del archivo, imprime en el registro el número de iteración del bucle "for", el tamaño del archivo y la posición del puntero del archivo. Pero aquí ocurren cosas incomprensibles, a saber: el archivo "test.csv" tiene sólo 15 líneas, por lo que el número de iteraciones del bucle "for" debe ser 14, pero el diario genera 0. El tamaño del archivo se imprime correctamente, pero la posición del puntero final del archivo tiene un tamaño mayor que el propio archivo por alguna razón. Código de la secuencia de comandos:

void OnStart()
  {
   int handle;
   ulong i, size;
   double _Ask, _Bid;
   string str;
      
   handle = FileOpen("test.csv",FILE_CSV|FILE_READ,',');
   
   if (handle != INVALID_HANDLE)
     {
      size = FileSize(handle);
      
      for (i = 0; i < size; i++)
        {
         str = FileReadString(handle);
         _Ask = FileReadNumber(handle);
         _Bid = FileReadNumber(handle);
        
         if (FileIsEnding(handle))
           {
            Print(i," ",size," ",FileTell(handle));
            break;
           }
        }
     }   
      
   FileClose(handle);

   return;
  }

Se adjunta el archivo "test.csv" y el registro. ¿Quién tiene alguna idea sobre esta cuestión?

P.D. Lo más interesante es que en MT4 este script funciona sin errores.

Archivos adjuntos:
test.zip  1 kb
 
DenisR:

Al leer el archivo .csv, surgieron varios problemas a la vez. Para tratar de averiguar las razones del mal funcionamiento, escribí un sencillo script. El script lee los datos del archivo "test.csv". En cuanto llega al final del archivo, imprime en el registro el número de iteración del bucle "for", el tamaño del archivo y la posición del puntero del archivo. Pero aquí ocurren cosas incomprensibles, a saber: el archivo "test.csv" tiene sólo 15 líneas, por lo que el número de iteraciones del bucle "for" debe ser 14, pero el diario genera 0. El tamaño del archivo se imprime correctamente, pero la posición del puntero final del archivo tiene un tamaño mayor que el propio archivo por alguna razón. Código de la secuencia de comandos:

Se adjunta el archivo "test.csv" y el registro. ¿Quién tiene alguna idea sobre esta cuestión?

P.D. Lo más interesante es que en MT4 este script funciona sin errores.

A simple vista, todo el archivo se escribe en str...
Añade la bandera FILE_ANSI, ya que por defecto lee unicode:)
Además, serán 15, ya que hay una línea en blanco al final.
Razón de la queja: