Variáveis String PQ SUPORTA TÃO POUCO TEXTO? (Quantos caracteres suporta no máximo?)

 

Pessoal, procurei na documentação e não encontrei nenhuma referência, portanto estou perguntando aqui:

alguém sabe quantos caracteres de texto a variável string suporta?

O problema que estou enfrentando é o seguinte, para facilidade do usuário inserir várias cadeias de valores de uma única vez

coloquei um input do tipo string para que a pessoa simplesmente cole seus valores ali e depois internamente uma função trabalha esse 

texto extraindo dele os valores fornecidos. 

Tem função para todos esses passos e desenvolvi o script colando três valores de uma única vez e funcionou perfeitamente.

Mas toda vez que colava 12 valores (cerca de 250 caracteres) dava erro. Daí fui revisando todo o código mas não tinha erro nenhum nas funções.

Levei dois dias para descobrir que o problema era que você cola o texto e na hora o terminal mostra que aceitou o texto, mas quando 

o script executa suas funções internamente só tem uma parte do texto...

Até descobrir que o problema é a variável tipo string já tinha queimado metade dos meus neurônios.

Tive que modificar a entrada de uma única (que seria o ideal) para 16! Ou seja, ao invés da pessoa simplesmente colar tudo de uma única vez, tem que colar sequência por sequência...

Veja como era antes: 

input string varTxt="";//Cole as 16 sequências

Veja como ficou: 

input string   InputR12="";//12º Hist
input string   InputR11="";//11º Hist
input string   InputR10="";//10º Hist
input string   InputR09="";//9º Hist
input string   InputR08="";//8º Hist
input string   InputR07="";//7º Hist
input string   InputR06="";//6º Hist
input string   InputR05="";//5º Hist
input string   InputR04="";//4º Hist
input string   InputR03="";//3º Hist
input string   InputR02="";//2º Hist
input string   InputR01="";//1º Hist
input string   InputC01="";//1º Conferidor
input string   InputC02="";//2º Conferidor
input string   InputC03="";//3º Conferidor
input string   InputC04="";//4º Conferidor

Alguém já passou por um problema semelhante e conseguiu resolver? Gostaria de saber qual o limite de caracteres suportado pelo tipo string.

 

Olá, veja Variáveis de Entrada - Variáveis - Elementos Básicos da Linguagem - Referência MQL5 - Referência sobre algorítimo/automatização de negociação na linguagem para MetaTrader 5:    

O comprimento máximo de um nome de variável input é 63 caracteres. Além disso, para um parâmetro de entrada do tipo string o comprimento do valor máximo (comprimento da string) pode variar de 191 a 253 caracteres (veja a Observação)...

 

Olá Vinicius, muito boa a resposta. Não consigo entender o pq da limitação, vc sabe? 

Quando estava aqui tentando entender o problema, fiz testes inserindo texto em variáveis de tipo compatível em outra linguagem e suportam mais de mil caracteres (tem linguagem q vc pode colocar um livro inteiro). Será que nessa era de IA não está na hora do mql5 rever essa limitação? Simplesmente não faz nenhum sentido...

No caso desse script específico, se toda hora que for rodar ele o usuário tiver que colocar todas essas 16 listas de parâmetros ele se torna inviável (porque é para testar tabelas).

Mas em termos práticos, vc tem alguma noção de como contornar essa deficiência do mql5?

 
Porque vc não permite ao usuário escrever o texto em txt e importar?
 
Cesar Afif rezende Oaquim #Porque vc não permite ao usuário escrever o texto em txt e importar?

Exato... Apenas exemplificando a sugestão do Cesar:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {

// Nome do arquivo a ser lido
   string filename = "input.txt";

// Abre o arquivo para leitura
   int handle = FileOpen(filename, FILE_READ|FILE_WRITE|FILE_TXT);

// Verifica se o arquivo foi aberto com sucesso
   if(handle != INVALID_HANDLE)
     {
      // Lê o conteúdo do arquivo
      string content = FileReadString(handle, (int)FileSize(handle));

      // Fecha o arquivo
      FileClose(handle);

      // Processa o conteúdo lido
      Print("Conteúdo do arquivo: ", content);

      // Aqui você pode adicionar a lógica para analisar e processar o conteúdo
     }
   else
     {
      Print("Erro ao abrir o arquivo ", filename);
     }
  }
 
A ideia era ser prático a entrada, a pessoa apenas pegaria a parte de dados da tabela que quisesse verificar e colaria no input do script e a maquina faria tudo sozinha... separar, classificar e analisar. Mas terei que partir para outra linguagem. O script em questão já consulta dados em .csv, ele tem um arquivo de log e outro de configurações (mas cria automaticamente ao rodar na máquina do usuário para memorizar dados de configuração), além de um arquivo de inclusão com 490.000 linhas de código onde realmente é feita a análise. Pra gente é simples, mas falar para o leigo mexer com arquivos realmente é pedir pra ter dor de cabeça e consultas o tempo todo (isso se não te queimam dizendo que o script é complexo demais pra mexer). Estou pensando em tentar fazer em outra linguagem ou outra alternativa... mas provavelmente alguém passou por problema parecido e encontrou alguma solução mais prática que o arquivo de texto.
 
protonixx #:
A ideia era ser prático a entrada, a pessoa apenas pegaria a parte de dados da tabela que quisesse verificar e colaria no input do script e a maquina faria tudo sozinha... separar, classificar e analisar. Mas terei que partir para outra linguagem. O script em questão já consulta dados em .csv, ele tem um arquivo de log e outro de configurações (mas cria automaticamente ao rodar na máquina do usuário para memorizar dados de configuração), além de um arquivo de inclusão com 490.000 linhas de código onde realmente é feita a análise. Pra gente é simples, mas falar para o leigo mexer com arquivos realmente é pedir pra ter dor de cabeça e consultas o tempo todo (isso se não te queimam dizendo que o script é complexo demais pra mexer). Estou pensando em tentar fazer em outra linguagem ou outra alternativa... mas provavelmente alguém passou por problema parecido e encontrou alguma solução mais prática que o arquivo de texto.
Então qual é o problema? Se é algo prático ninguem vai escrever mais de 64 caracteres. O que eu tenho feito como a saída é em csv, se quero revisar os dados coletados jogo no python ou até spark, se for muito lento o python.
 
Ricardo Rodrigues Lucca #:
Então qual é o problema? Se é algo prático ninguem vai escrever mais de 64 caracteres. O que eu tenho feito como a saída é em csv, se quero revisar os dados coletados jogo no python ou até spark, se for muito lento o python.

Leia o enunciado outra vez... acho que vc não entendeu.

É um script de ANÁLISE DE DADOS!

Ninguém vai ESCREVER nada nele; o usuário simplesmente COPIA dados de uma tabela e COLA no input do script para que o mesmo faça a análise.

O PROBLEMA é que quando você COLA (Ctrl+v) os dados o TERMINAL mostra como se tivesse aceito os dados, mas INTERNAMENTE só está a metade dos dados por conta de uma limitação da variável tipo 'string' quando usada como 'input'. Busco uma solução para que não precise colar (ctrl+v) em vários inputs pois isso torna o script pouco prático.

 
protonixx #:

Leia o enunciado outra vez... acho que vc não entendeu.

É um script de ANÁLISE DE DADOS!

Ninguém vai ESCREVER nada nele; o usuário simplesmente COPIA dados de uma tabela e COLA no input do script para que o mesmo faça a análise.

O PROBLEMA é que quando você COLA (Ctrl+v) os dados o TERMINAL mostra como se tivesse aceito os dados, mas INTERNAMENTE só está a metade dos dados por conta de uma limitação da variável tipo 'string' quando usada como 'input'. Busco uma solução para que não precise colar (ctrl+v) em vários inputs pois isso torna o script pouco prático.

sim, eu li antes de postar. Se é dado de uma tabela, faz outra tabela com um DE-PARA e seja feliz.
 
Ricardo Rodrigues Lucca #:
sim, eu li antes de postar. Se é dado de uma tabela, faz outra tabela com um DE-PARA e seja feliz.

Se fosse possível usar tabela não precisaria de script, pois o uso do script existe exatamente para economizar processamento.

Mas se o colega não passou por situação semelhante e nem pode contribuir com o tópico, gostaria que se abstivesse de comentários desnecessários.

A intenção é procurar no fórum alguém que possa ter passado por situação semelhante e encontrou uma solução prática para o problema da limitação da quantidade de caracteres no input tipo string.

 
protonixx #:

Se fosse possível usar tabela não precisaria de script, pois o uso do script existe exatamente para economizar processamento.

Mas se o colega não passou por situação semelhante e nem pode contribuir com o tópico, gostaria que se abstivesse de comentários desnecessários.

A intenção é procurar no fórum alguém que possa ter passado por situação semelhante e encontrou uma solução prática para o problema da limitação da quantidade de caracteres no input tipo string.

Não acho que entendeu o que eu disse, mas já que esta na defensiva vou me abster sim. Muito bom dia.