Je suis en train de faire ce qui suit dans AIR:Parsing fichiers texte volumineux avec Adobe AIR
- navigation dans un fichier texte
- lire le fichier texte et de le stocker dans une chaîne (en fin de compte dans un tableau)
- diviser la chaîne par le delimiter \ n et mettre les chaînes résultantes dans un tableau
- manipuler ces données avant de l'envoyer à un site Web (base de données MySQL)
Les fichiers de texte que je traite auront entre 100 et 500mb. Jusqu'à présent, j'ai pu pour compléter les étapes 1 et 2, voici mon code:
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import flash.filesystem.*;
import flash.events.*;
import mx.controls.*;
private var fileOpened:File = File.desktopDirectory;
private var fileContents:String;
private var stream:FileStream;
private function selectFile(root:File):void {
var filter:FileFilter = new FileFilter("Text", "*.txt");
root.browseForOpen("Open", [filter]);
root.addEventListener(Event.SELECT, fileSelected);
}
private function fileSelected(e:Event):void {
var path:String = fileOpened.nativePath;
filePath.text = path;
stream = new FileStream();
stream.addEventListener(ProgressEvent.PROGRESS, fileProgress);
stream.addEventListener(Event.COMPLETE, fileComplete);
stream.openAsync(fileOpened, FileMode.READ);
}
private function fileProgress(p_evt:ProgressEvent):void {
fileContents += stream.readMultiByte(stream.bytesAvailable, File.systemCharset);
readProgress.text = ((p_evt.bytesLoaded/1048576).toFixed(2)) + "MB out of " + ((p_evt.bytesTotal/1048576).toFixed(2)) + "MB read";
}
private function fileComplete(p_evt:Event):void {
stream.close();
//fileText.text = fileContents;
}
private function process(c:String):void {
if(!c.length > 0) {
Alert.show("File contents empty!", "Error");
}
//var array:Array = c.split(/\n/);
}
]]>
</mx:Script>
Voici le MXML
<mx:Text x="10" y="10" id="filePath" text="Select a file..." width="678" height="22" color="#FFFFFF" fontWeight="bold"/>
<mx:Button x="10" y="40" label="Browse" click="selectFile(fileOpened)" color="#FFFFFF" fontWeight="bold" fillAlphas="[1.0, 1.0]" fillColors="[#E2E2E2, #484848]"/>
<mx:Button x="86" y="40" label="Process" click="process(fileContents)" color="#FFFFFF" fontWeight="bold" fillAlphas="[1.0, 1.0]" fillColors="[#E2E2E2, #484848]"/>
<mx:TextArea x="10" y="70" id="fileText" width="678" height="333" editable="false"/>
<mx:Label x="10" y="411" id="readProgress" text="" width="678" height="19" color="#FFFFFF"/>
étape 3 est là où j'ai quelques ennuis. Il y a 2 lignes dans mon code commentées, les deux lignes provoquent le gel du programme.
fileText.text = fileContents; tente de placer le contenu de la chaîne dans une zone de texte
var array: Array = c.split (/ \ n /); tente de diviser la chaîne par délimiteur newline
Pourrait utiliser une entrée à ce stade ... Est-ce que je vais même dans ce sens? Les fichiers flex/air peuvent-ils être aussi grands? (Je suppose donc) Ceci est ma première tentative de faire tout type de travail flex, si vous voyez d'autres choses que j'ai fait mal ou pourrait être mieux fait, j'apprécierais les heads-up!
Merci!
vous remercie beaucoup pour la perspicacité. Par curiosité, je me suis toujours demandé comment les autres apprenaient flex/as3. cela vous dérangerait-il de partager un peu de votre expérience? – marauder
je suis parti de flex en une semaine http://www.adobe.com/devnet/flex/videotraining/ puis flex 3 en action http://www.amazon.com/Flex-3-Action-Tariq-Ahmed/ dp/1933988746 puis Flex Exemples http://blog.flexexamples.com/ –