Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Moises de Oliveira

[Resolvido] Importar variáveis de um .txt

Recommended Posts

Muito bom dia.

 

Estou na seguinte situação: Preciso desenvolver uma espécie de RSS/Feed no Flash.

Funcionamento: O Flash deve ler um arquivo .txt e imprimir na tela 4 notícias que estão neste arquivo .txt.

O problema é o seguinte: Quando o arquivo .txt possuir mais de 4 notícias, o flash deve permanecer mostrando apenas 4 por vez. Digamos que eu tenha 6 notícias no .txt, o Flash deve mostrar 4 delas, e depois de um certo tempo mostrar mais 4, no caso as 2 últimas e as 2 primeiras notícias do arquivo.

 

Já tentei de tudo, inclusive For In, porém, sem sucesso.

Obrigado pela ajuda. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

-------------------------------------

Um pequeno edit.

 

O trabalho pronto deve ou pode ficar semelhante a este: http://www.absolutecross.com/tutorials/flash/scrolling/

Apenas estes poréns: O Scroll deve rolar automáticamente.

Além disso tem um rpoblema que ainda não sei resolver: Se eu definir um tamanho específico para o campo text, quando tiver notícias o suficiente para ultrapassar este valor, as últimas notícias não serão exibidas. Além disso, se eu colocar o tamanho do campo text absurdamente alto para que não ocorra corte nas notícias, quando as últimas notícias forem exibidas, ficará mostrando o espaço em branco do campo text, até que acabe o scroll e comece tudo denovo.

 

Enfim, explicar meu problema é tão complicado quanto resolve-lo.

PS: Não, não posso puxar as informações das notícias de um XML.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom para você fazer isso você teria que criar um tipo de for que pegue os dados e transforme-os em uma array...

 

Vou dar um exemplo:

System.useCodepage = true;
var carrega:LoadVars = new LoadVars();
var valor:Array = new Array()
carrega.load("rss.txt");
var i = 1;

carrega.onLoad = function(ok){
	if(ok){
		while(carrega['rss'+i]!=undefined){
			valor[i] = carrega['rss'+i];
			trace(valor[i]);
			i++;
		}
	}else {
		trace("deu erro ao carregar");
	}
}

No txt deve ficar assim:

&rss1=Essas são informações sigilosas que só devem passar por rss1&rss2=Essas são informações sigilosas que só devem passar por rss2&rss3=Essas são informações sigilosas que só devem passar por rss3&rss4=Essas são informações sigilosas que só devem passar por rss4&rss5=Essas são informações sigilosas que só devem passar por rss5&

Lembrando só o fato que não é recomendado o uso de enteres para ou espaço entre um & e outro para ficar mais bunitinho o txt

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela resposta. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Seguinte, deu 3 erros de compilação com esse seu código.

 

1046: Type was not found or was not a compile-time constant: LoadVars.
1119: Access of possibly undefined property useCodepage through a reference with static type Class.
1180: Call to a possibly undefined method LoadVars.

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela resposta. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Seguinte, deu 3 erros de compilação com esse seu código.

 

1046: Type was not found or was not a compile-time constant: LoadVars.
1119: Access of possibly undefined property useCodepage through a reference with static type Class.
1180: Call to a possibly undefined method LoadVars.

Abraço.

O código que berseck passou é para ActionScript 2 e não 3.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por isso então :)

Mas seguinte, quando eu substituo o trace pelo lista.text ele só me retorna o último valor.

PS: "lista" é o nome do campo de texto dinâmico que eu criei no palco.

 

System.useCodepage = true;
var carrega:LoadVars = new LoadVars();
var valor:Array = new Array()
carrega.load("noticias.txt");
var i = 1;

carrega.onLoad = function(ok){
	if(ok){
		while(carrega['rss'+i]!=undefined){
			valor[i] = carrega['rss'+i];
			lista.text =(valor[i]);
			i++;
		}
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois não é assim que se adiciona novas informações a um campo de texto

 

Eu apenas lhe dei um exemplo como fazer não o código pronto...

 

System.useCodepage = true;
var carrega:LoadVars = new LoadVars();
var valor:Array = new Array()
carrega.load("noticias.txt");
var i = 1;

carrega.onLoad = function(ok){
	if(ok){
		while(carrega['rss'+i]!=undefined){
			valor[i] = carrega['rss'+i];
			lista.text +=valor[i] + newline;
			i++;
		}
	}
}

Agora deve dar certo

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, obrigado pelas respostas...

Seguinte, eu já andei meio caminho.

O Flash já importa ordenadamente as notícias do Bloco de Notas, porém ainda falta uma coisa.

Digamos que meu palco possui o tamanho de 300x300. Quando tiver notícias o suficiente para ultrapassar os 300px de altura, estas não vão ser exibidas.

Então eu fiz o seguinte, o Flash mostra as notícias que cabem no palco, no caso 5. Depois de 3 segundos ele substitui estas notícias por outro texto.

A questão é a seguinte, este outro texto deve ser as notícias #6 até a #11, já que ele já mostrou as notícias #1 até a #5...

Por enquanto meu código tá assim...

 

System.useCodepage = true;
var carrega:LoadVars = new LoadVars();
var valor:Array = new Array()
carrega.load("noticias.txt");
var i = 1;

carrega.onLoad = function(ok){
	//If para entrar na função	
	if(ok){
		var arr:Array = new Array();
		while(carrega['rss'+i]!=undefined){
			valor[i] = carrega['rss'+i];
			arr.push(valor[i]);
			i++;
		}
	}
	for (i = 0; i < arr.length; i++) {
		lista.text = lista.text + arr[i] + "\n\n";
	}
	//Contador para colocar um intervalo entre a troca das notícias
	var seg = 0;
	var cronometro = setInterval(tempo,1000);
	function tempo() {
		seg++
		if (seg >= 3){
			lista.text ="Aqui deve vir as notícias #6 até #11"
		}
	}
}

E no bloco de notas está assim...

 

&rss1=Noticia1&rss2=Noticia2&rss3=Noticia3&rss4=Noticia4&rss5=Noticia5&rss6=Noticia6&

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Além disso poderia funcionar de outra forma, se ficar mais fácil.

A lógica seria mais ou menos assim...

Pra cada notícia no bloco de notas, o tamanho do campo text que está no palco aumenta...

No caso, se tiver 5 notícias, o tamanho do campo text é de 300px, se tiver 6 notícias, o tamanho do campo text é de 360px.

Daí a animação seria outra. As notícias não seria trocadas, mas ficariam subindo com uma animação. Aí vem outra questão, a animação precisa começar em um ponto, neste caso, no começo do campo text e terminaria em outro, no fim do campo text.

 

Argh, tá complicado aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, muito obrigado pelas respostas.

O Código final ficou assim...

 

System.useCodepage = true;
var carrega:LoadVars = new LoadVars();
var valor:Array = new Array()
carrega.load("noticias.txt");
var i = 1;

carrega.onLoad = function(ok){
	//If para entrar na função	
	if(ok){
		var arr:Array = new Array();
		while(carrega['rss'+i]!=undefined){
			valor[i] = carrega['rss'+i];
			arr.push(valor[i]);
			i++;
		}
	}
	var tamanhoTotal = i;
	var inicial = 0;
	var fim = 6;
	//Contador para colocar um intervalo entre a troca das notícias
	var seg = 4;
	var cronometro = setInterval(tempo,1000);
		function tempo() {
		seg++
		if (seg >= 3){
			if (fim >= tamanhoTotal){
				fim=tamanhoTotal-1;	
			}
			lista.text = "";
			for (i = inicial; i < fim; i++) {
				lista.text = lista.text + arr[i] + "\n\n";
				lista._height = 230;
			}	
			seg = 0;
			if (fim >= tamanhoTotal -1){
			  inicial = 0;
			  fim = 6;
			} else {
			  inicial=inicial+6;
			  fim=fim+6;
			}
		}
	}
}

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.