2012-07-30 4 views
0

외부 txt 파일의 변수를 플래시로 가져 오려고합니다. 텍스트 파일은 다음과 같습니다플래시 : 외부 txt 파일에서 줄 바꿈 해석하기

[Settings] 
AllowSetConflicts=1 

[Hotkeys] 
Music=F2 
Sound=F6 
PTT= 
ChatAllies=Tab 

등 내가 플래시가 줄 바꿈을 인식하고 [설정]과 같은 텍스트를 필터링 얻을 수있는 방법이 있나요?

답변

0

. 실제로 얼마나 많은 응용 프로그램이 설정을 저장하고 있는지 (xml 형식으로)입니다.

하지만 파일을 변경할 기회가 없다면 다음과 같이하십시오.

package { 

    import flash.display.Sprite; 
    import flash.net.URLRequest; 
    import flash.net.URLLoader; 
    import flash.events.Event; 
    import flash.events.IOErrorEvent; 


    public class Main extends Sprite { 

     private var urlL:URLLoader; 
     private var props:Object = {}; 
     // props will be assigned all the data from the txt file 
     private var file:String = 'file.txt'; 

     public function Main() { 
      urlL = new URLLoader(new URLRequest(file)); 
      urlL.addEventListener(Event.COMPLETE,processFile); 
     } 

     private function fileNotLoaded(e:IOErrorEvent):void { 
      trace(file, 'could not be loaded'); 
     } 

     private function processFile(e:Event):void { 
      var str:String = urlL.data.toString(); 
      var ref:Object, prop:String, val:*; 
      var lines:Array = str.split(/\r\n?|\n/g); 
      for (var i:int = 0; i < lines.length; i++) { 
       // if it's an empty line... 
       if (/^\s*$/.test(lines[i])) continue; 
       // if it's a category line... 
       if (/^\[.+?\]$/.test(lines[i])) { 
        ref = props[lines[i].replace(/^.(.+?).$/,'$1')] = {}; 
       // if it's a variable-value pair line... 
       } else if (/^[^\r\n]+=[^\r\n]*$/.test(lines[i])) { 
        prop = lines[i].split('=')[0]; 
        val = detectType(lines[i].substr(prop.length+1)); 
        ref[prop] = val; 
       } 
      } 
     } 

     private function detectType(s:String):* { 
     // this is an optional function to convert strings 
     // with basic data types into appropriate class instances 
      if (s == 'null') return null; 
      if (/^(\d+|(\d+)?\.\d+)$/.test(s)) return Number(s); 
      if (/^true$/.test(s)) return true; 
      if (/^false$/.test(s)) return false; 
      return s; 
     } 

    } 

} 
0

가능하면 XML 형식이나 JSON 형식을 사용하는 것이 좋습니다. 더 안전하고 파서를 작성할 필요가 없기 때문입니다.

ActionSctipt :

import flash.net.URLLoader; 
import flash.net.URLRequest; 
import flash.events.Event; 

var textLoader:URLLoader = new URLLoader(); 
textLoader.addEventListener(Event.COMPLETE, textHandler); 
textLoader.load(new URLRequest('txt.txt')); 

function textHandler(e:Event):void{ 
    var s:String = e.target.data; 
    var params:Array = s.split('\r'); 
    trace(params[0].replace('\n','')); 
    trace(params[1].replace('\n','')); 
} 

var xmlLoader:URLLoader = new URLLoader(); 
xmlLoader.addEventListener(Event.COMPLETE, xmlHandler); 
xmlLoader.load(new URLRequest('xml.txt')); 

function xmlHandler(e:Event):void{ 
    var xml:XML = new XML(e.target.data); 
    trace(xml.settings.AllowSetConflicts); 
} 

txt.txt :

[Settings] 
AllowSetConflicts=1 

[Hotkeys] 
Music=F2 
Sound=F6 

xml.txt : 나는 양말 폭스에 동의

<root> 
    <settings> 
     <AllowSetConflicts> 
      1 
     </AllowSetConflicts> 
    </settings> 
</root>