Ir para conteúdo

POWERED BY:

Arquivado

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

André Sieiro

[Resolvido] Gerar arquivo pelo As3

Recommended Posts

Ola gente, tenho seguinte codigo que será usado para um sorteio de nomes, eu digito o nome e ele joga em campos de texto para ser mostrados na tela..

a questão é o sorteio, pq isso acredito que eu consiga fazer, a questão é q eu quero gravar o resultado do sorteio ou seja os campos de textos q foram criados com os nomes e na ordem que eles foram inseridos, em qualquer tipo de arquivo serve, txt, xml. Não faz diferença pois oq eu preciso é guardar o resultado do sorteio.

 

para exemplificar vou passar o codigo:

 

var arNomes:Array = new Array();
var contador:int;

btnTeste.buttonMode = true;
btnTeste.addEventListener(MouseEvent.CLICK, inserir)

  function inserir (e:MouseEvent) {      
    arNomes.push(txtInput)        
    var txt:TextField = new TextField();  
    txt.x = 100               
    txt.y =  contador * 10               
    addChild(txt)                
    txt.text = arNomes[contador].text         
    contador = contador+1             
   }

agora por exemplo criei 8 textField com 8 nomes, é possivel gerar um arquivo com estes 8 nomes pelo As3? obs:Qualquer formato serve

 

vlw gente

Compartilhar este post


Link para o post
Compartilhar em outros sites

Diretamente pelo flash não dá... isso é uma limitação/restrição de segurança, já pensou sair navegando por sites e os swf dos sites começarem a gravar arquivos no seu computador?! (potencialmente perigoso)

 

Se você rodar localmente por Adobe Air (vai gravar no diretório onde está a aplicação adobe air) o código abaixo pode ajudar:

 

var arquivo = air.File.applicationStorageDirectory.resolvePath("resultadoSorteio.txt"); 
 
file.addEventListener(air.Event.COMPLETE, gravar); 

file.save(txt.text);
 
function gravar(event) 
{ 
    air.trace("Pronto gravou o resultado."); 
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

arquivo = file neste seu codigo? ou nao..

 

irei rodar local mesmo, nao é via internet..

 

estou tendo um problema pq o flash da acesso indefinido a propriedade air

 

veja o codigo:

var arNomes:Array = new Array();
var contador:int;

btnTeste.buttonMode = true;
btnTeste.addEventListener(MouseEvent.CLICK, inserir)


function inserir (e:MouseEvent) {
	arNomes.push(txtInput)
		var txt:TextField = new TextField();
		txt.x = 100
		txt.y =  contador * 10
		addChild(txt)
		txt.text = arNomes[contador].text
		contador = contador+1

		
		var arquivo = air.File.applicationStorageDirectory.resolvePath("resultadoSorteio.txt");
		arquivo.addEventListener(air.Event.COMPLETE, gravar); 
		arquivo.save(arNomes[contador].text);
			
			if (contador == 8){
				btnTeste.visible = false
				}


}



	function gravar(event) {  
	air.trace("Pronto gravou o resultado.");
	}


nunca usei air...

 

nao sei se tem q declarar ou algo parecido

Compartilhar este post


Link para o post
Compartilhar em outros sites

arquivo = file neste seu codigo? ou nao..

 

irei rodar local mesmo, nao é via internet..

 

isso arquivo = file (eu traduzo para o português os códigos que tenho aqui e que não foram eu quem fiz, geralmente é tendência o pessoal escrever em inglês eu já faço em português, mas como foi rápida a tradução passou despercebido rsrs)

 

 

Ps.: Crie um novo projeto no flash do tipo Adobe Air

Compartilhar este post


Link para o post
Compartilhar em outros sites

vamos mudar a abordagem então (aqui no meu macbook o exemplo anterior funcionou sem erro, você está com o adobe air 1.5???)...

 

Essas são as constantes para as pastas

 

applicationStorageDirectory A place to store files needed by the application, such a settings or log files.

applicationResourceDirectory The application's installation directory.

desktopDirectory The "Desktop" directory underneath the user directory.

documentsDirectory Staring from user directory, this is the "My Documents" subdirectory on Windows, and the "Documents" subdirectory on Mac OS X.

userDirectory The user's home directory. This is typically C:\Documents and Settings\<username> on Windows and /Users/<username> on Mac OS X.

 

Vamos usar o Stream no lugar do air.File

 

os modos dele são:

 

FileMode.READ The file is opened for read-only. The file must already exist first.

FileMode.WRITE The file is opened for write-only. The file will be created if it does not already exist. If the file does already exist, it is overwritten.

FileMode.APPEND The file is opened for write-only. The file will be created if it does not exist. Written data will be placed the end of the file.

FileMode.UPDATE The file is opened for read-write. If the file doesn't exist, it will be created. Data can be written to or read from any location in the file.

 

 // vamos dizer onde gravar e o nome do que gravar
 var arquivo:File = File.applicationStorageDirectory.resolve( "resultadoSorteio.txt" );
                
 // vamos criar um stream de arquivo
 var stream:FileStream = new FileStream();
 stream.open( arquivo, FileMode.WRITE );
        
 // gravando no arquivo
 stream.writeUTFBytes(txt.text);
                
 // Fechando o stream para finalizar a gravação
 stream.close();

Compartilhar este post


Link para o post
Compartilhar em outros sites

assim não deu erro. porem o arquivo txt que ja existe na pasta nao recebe os dados...

 

vou te mostrar ou meu codigo:


var arNomes:Array = new Array();
var contador:int;

btnTeste.buttonMode = true;
btnTeste.addEventListener(MouseEvent.CLICK, inserir)


function inserir (e:MouseEvent) {
	arNomes.push(txtInput)
		var txt:TextField = new TextField();
		txt.x = 100
		txt.y =  contador * 10
		addChild(txt)
		txt.text = arNomes[contador].text
		contador = contador+1

		var arquivo:File = File.applicationStorageDirectory.resolvePath("resultadoSorteio.txt");
		var stream:FileStream = new FileStream();
		
		stream.open(arquivo, FileMode.WRITE)
		
		stream.writeUTFBytes(txt.text)
		
		stream.close()
		
			if (contador == 8){
				btnTeste.visible = false
				}


}



Compartilhar este post


Link para o post
Compartilhar em outros sites

pode ser alguma coisa quanto a formatação UTF.

 

tenta trocar

 

stream.writeUTFBytes(txt.text)

 

por

 

stream.writeByte(txt.text)

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma pergunta..

 

para funcionar o air..

 

qndo eu publicar, gera uma rquivo air, um exe, e swf.

 

pra eu realmente testar qual desses eu rodo? o air instala, o exe roda, e o swf tbm.. mas qual desses tem o poder pra criar o txt? qual desse tenho q rodar para testar...

 

ahco q ai está meu problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma pergunta..

 

para funcionar o air..

 

qndo eu publicar, gera uma rquivo air, um exe, e swf.

 

pra eu realmente testar qual desses eu rodo? o air instala, o exe roda, e o swf tbm.. mas qual desses tem o poder pra criar o txt? qual desse tenho q rodar para testar...

 

ahco q ai está meu problema.

 

Cada vez que você fizer uma alteração tem que gerar o arquivo .air (esse tem os outros empacotados), o que manda é o .exe mas sempre tem que clicar no .air para atualizar as alterações

Compartilhar este post


Link para o post
Compartilhar em outros sites

mesmo rodando o exe,

 

nao é gravado nada o txt..

 

.. estou achando estranho..

 

olhei e vi que o meu air nao 1.5, no publish marca como 1.1..

 

talvez agora apareça alguma outra solução...

 

Obs:

 

eu apaguei o arquivo txt, mas mesmo assim o exe nao cria um novo txt...

Compartilhar este post


Link para o post
Compartilhar em outros sites

OLHA UM GRANDE AVANÇO:

 

 

var arNomes:Array = new Array();
var contador:int;
var arquivo:File = File.desktopDirectory.resolvePath("sorteio/resultadoSorteio.txt");
var stream:FileStream ;

btnTeste.buttonMode = true;
btnTeste.addEventListener(MouseEvent.CLICK, inserir)


function inserir (e:MouseEvent) {
	arNomes.push(txtInput)
		var txt:TextField = new TextField();
		txt.x = 100
		txt.y =  contador * 10
		addChild(txt)
		txt.text = arNomes[contador].text
		contador = contador+1
			if (contador == 8){
				btnTeste.visible = false
			}


		
		
		for (var i:int = 0; i< arNomes.length; i++){
		stream = new FileStream();
		stream.open(arquivo,FileMode.APPEND)
		stream.writeUTFBytes("time"+i+"="+arNomes[i].text+"<br>");
		stream.close()
		}
		



}


a grande diferença foi usar desktopDirectory e depois informar o caminho q quero criar o arquivo.//

o aplicattion diretory leva a pasta de aplicativo do windows o arquivo, o documentsDiretory leva o arquivo pro meus documentos e assim por diante, como o desktopDiretory é possivel informar onde você quer gravar, claro que pensando no caminho a partir do desktop, pq se você nao informa´r é para la q o arquivo é criado =)

 

arquivo criado..

 

depois mudei para APPEND ao inves de Write o FileMode para ele nao apagar os dados escritos antes.

 

agora estou tentando fazer cada texto ficar em uma linah diferente no txt...

 

 

help me =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

RESOLVIDO:

 

Acrescentei o comando File.lineEnding, que faz encerrar a linha q esta sendo escrita no txr.

 

O Codigo final ficou assim:

 

var arNomes:Array = new Array();
var contador:int;
var arquivo:File = File.desktopDirectory.resolvePath("sorteio/resultadoSorteio.txt");
var stream:FileStream ;


btnTeste.buttonMode = true;
btnTeste.addEventListener(MouseEvent.CLICK, inserir)


function inserir (e:MouseEvent) {
	arNomes.push(txtInput)
		var txt:TextField = new TextField();
		txt.x = 100
		txt.y =  contador * 10
		addChild(txt)
		txt.text = arNomes[contador].text
		contador = contador+1
			if (contador == 8){
				btnTeste.visible = false
			}

		for (var i:int = 0; i< arNomes.length; i++){
		stream = new FileStream();
		stream.open(arquivo,FileMode.APPEND)
		stream.writeUTFBytes(arNomes[i].text+File.lineEnding);
		stream.close()
		}

}


Obrigado daniel por ajudar!

Compartilhar este post


Link para o post
Compartilhar em outros sites

puxe que legal que funcionou... é realmente eu não tinha considerado a questão das permissões do windows nessa questão de pastas!

 

Legal os outros comandos que você está usando como o File.lineEnding parabéns... é isso ai...

 

E precisando de alguma ajuda é só postar... se eu conseguir ajudo com o maior prazer.

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.