No primeiro posto que estiver a fazer operações de atribuição, a atribuição múltipla em cascata é aceitável. Aqui está a tentar fazer uma comparação múltipla.
Eu sei como comparar, mas se(a<b<c) funciona e parece mais bonito embora a ajuda não diga nada sobre isso. como é que funciona mais rápido?
sergey1294: Sei como comparar, mas se(a<b<c) funciona e parece mais bonito, embora a ajuda não diga nada sobre isso. Mas como é que funciona mais depressa?
A sua expressão é igual a esta
if(a<(b<c))
se comparar b e c, o resultado desta comparação será 0 ou 1 e depois comparar este resultado com a.
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:
A sua expressão é igual a isto
se comparar b e c, o resultado desta comparação será 0 ou 1 após o qual se compara este resultado com a.
Com esta lógica tudo se torna claro, mas por alguma razão penso que a e b serão comparados primeiro (pode ser que eu esteja errado, claro)...
Ao ler o ficheiro .csv, vários problemas surgiram ao mesmo tempo. A fim de tentar descobrir as razões do mau funcionamento, escrevi um guião simples. O guião lê dados do ficheiro "test.csv". Assim que chega ao fim do ficheiro, imprime o número de iteração do laço "para", o tamanho do ficheiro e a posição do ponteiro do ficheiro no registo. Mas aqui acontecem coisas incompreensíveis, nomeadamente: O ficheiro "test.csv" tem apenas 15 linhas, pelo que o número de iteração do laço "para" deve ser 14, mas a revista gera 0. O tamanho do ficheiro é impresso correctamente, mas a posição do ponteiro final do ficheiro tem um tamanho maior do que o próprio ficheiro por alguma razão. Código do guião:
voidOnStart()
{
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;
}
ficheiro "test.csv" e log em anexo. Quem tem alguma ideia sobre esta questão?
P.S. O mais interessante é que em MT4 este guião funciona sem erros.
Ao ler o ficheiro .csv, vários problemas surgiram ao mesmo tempo. A fim de tentar descobrir as razões do mau funcionamento, escrevi um guião simples. O guião lê dados do ficheiro "test.csv". Assim que chega ao fim do ficheiro, imprime o número de iteração do laço "para", o tamanho do ficheiro e a posição do ponteiro do ficheiro no registo. Mas aqui acontecem coisas incompreensíveis, nomeadamente: O ficheiro "test.csv" tem apenas 15 linhas, pelo que o número de iteração do laço "para" deve ser 14, mas a revista gera 0. O tamanho do ficheiro é impresso correctamente, mas a posição do ponteiro final do ficheiro tem um tamanho maior do que o próprio ficheiro por alguma razão. Código do guião:
ficheiro "test.csv" e log em anexo. Quem tem alguma ideia sobre esta questão?
P.S. O mais interessante é que em MT4 este guião funciona sem erros.
Num relance, todo o ficheiro é escrito para str... Adicionar a bandeira FILE_ANSI, uma vez que lê unicode por defeito:) Além disso, terei 15 anos, uma vez que há uma linha em branco no final.
No primeiro posto que estiver a fazer operações de atribuição, a atribuição múltipla em cascata é aceitável. Aqui está a tentar fazer uma comparação múltipla.
Sei como comparar, mas se(a<b<c) funciona e parece mais bonito, embora a ajuda não diga nada sobre isso. Mas como é que funciona mais depressa?
A sua expressão é igual a esta
if(a<(b<c))se comparar b e c, o resultado desta comparação será 0 ou 1 e depois comparar este resultado com a.Sei como comparar, mas se(a<b<c) funciona e parece mais bonito, mesmo que a ajuda não diga nada sobre isso. Como funciona mais rápido?
É assim que funciona.
e isto não acontece.
A sua expressão é igual a isto
se comparar b e c, o resultado desta comparação será 0 ou 1 após o qual se compara este resultado com a.A sua expressão é a mesma que esta.
se comparar b e c, o resultado desta comparação é 0 ou 1 e depois compara-se este resultado com a.Estou a ver, mas aqui está o truque com esta expressão, mas não funciona
... Só eu penso de alguma forma que a e b serão comparados primeiro (posso estar errado, claro)...
Estou a ver, mas aqui está o truque com esta expressão, mas não funciona
Não, é só que é preciso ter em conta as prioridades das operações e o comentário de Urain.
Também não há qualquer problema com esta expressão, mas ela falha muito mal.
Esta edição é descrita em pormenor na secção "Prioridades e ordem de operações ". (A prioridade e a ordem das operações devem ser tidas em conta).
Assim, se bem entendi, a comparação de acordo com o compilador parece-se com isto (tendo em conta os comentários de Nikolai)
Qual é o tamanho aproximado da lista? Talvez haja um limite para o tamanho da lista...
Exactamente 100 linhas.
Experimentei com uma das minhas bibliotecas (110 funções), exibia 100 a 106 na lista (e um número diferente a toda a hora, mas não 110).
Ao ler o ficheiro .csv, vários problemas surgiram ao mesmo tempo. A fim de tentar descobrir as razões do mau funcionamento, escrevi um guião simples. O guião lê dados do ficheiro "test.csv". Assim que chega ao fim do ficheiro, imprime o número de iteração do laço "para", o tamanho do ficheiro e a posição do ponteiro do ficheiro no registo. Mas aqui acontecem coisas incompreensíveis, nomeadamente: O ficheiro "test.csv" tem apenas 15 linhas, pelo que o número de iteração do laço "para" deve ser 14, mas a revista gera 0. O tamanho do ficheiro é impresso correctamente, mas a posição do ponteiro final do ficheiro tem um tamanho maior do que o próprio ficheiro por alguma razão. Código do guião:
ficheiro "test.csv" e log em anexo. Quem tem alguma ideia sobre esta questão?
P.S. O mais interessante é que em MT4 este guião funciona sem erros.
Ao ler o ficheiro .csv, vários problemas surgiram ao mesmo tempo. A fim de tentar descobrir as razões do mau funcionamento, escrevi um guião simples. O guião lê dados do ficheiro "test.csv". Assim que chega ao fim do ficheiro, imprime o número de iteração do laço "para", o tamanho do ficheiro e a posição do ponteiro do ficheiro no registo. Mas aqui acontecem coisas incompreensíveis, nomeadamente: O ficheiro "test.csv" tem apenas 15 linhas, pelo que o número de iteração do laço "para" deve ser 14, mas a revista gera 0. O tamanho do ficheiro é impresso correctamente, mas a posição do ponteiro final do ficheiro tem um tamanho maior do que o próprio ficheiro por alguma razão. Código do guião:
ficheiro "test.csv" e log em anexo. Quem tem alguma ideia sobre esta questão?
P.S. O mais interessante é que em MT4 este guião funciona sem erros.
Adicionar a bandeira FILE_ANSI, uma vez que lê unicode por defeito:)
Além disso, terei 15 anos, uma vez que há uma linha em branco no final.