Skip to content

Instantly share code, notes, and snippets.

@lizhi525
Created April 21, 2012 06:23
Show Gist options
  • Save lizhi525/2434729 to your computer and use it in GitHub Desktop.
Save lizhi525/2434729 to your computer and use it in GitHub Desktop.
CSVParser
package utils
{
/**
* ...
* @author lizhi
*/
public class CSVParser
{
public var data:Array = [];
public var keyData:Array = [];
public function CSVParser(str:String,tab:String=",",enter:String="\r\n")
{
var temp:Array = str.split(enter);
var headers:Array = (temp[0] as String).split(tab);
var pkey:RegExp =/\(key\)/;
var types:Array = [[/\(int\)/,int],[/\(string\)/,String]];
var vheaders:Array = [];
for each(var hstr:String in headers) {
var header:Header = new Header;
for each(var type:Array in types) {
var p:RegExp = type[0];
var tclass:Class = type[1];
var obj:Object = p.exec(hstr);
if (obj) {
hstr = hstr.replace(p, "");
header.type = tclass;
break;
}
}
if (header.type == null) header.type = String;
obj = pkey.exec(hstr);
if (obj) {
hstr = hstr.replace(pkey, "");
header.iskey = true;
}
header.name = hstr;
vheaders.push(header);
}
for (var i:int = 1; i < temp.length; i++ ) {
if (temp[i] == "") continue;
var datas:Array = (temp[i] as String).split(tab);
var vdataArr:Array = [];
data.push(vdataArr);
for (var j:int = 0; j < vheaders.length;j++ ) {
header = vheaders[j];
var datastr:String = datas[j];
var vdata:* = header.type(datastr);
vdataArr[header.name] = vdata;
if (header.iskey) keyData[vdata] = vdataArr;
}
}
}
public function getDataLine(id:*):Array {
return keyData[id];
}
public function getData(id:*, name:String):*{
if(getDataLine(id))
return getDataLine(id)[name];
}
public function searchDataLine(key:String,value:*):Array {
for each(var arr:Array in data) {
if (arr[key] == value) return arr;
}
return null;
}
public function searchData(key:String,value:*,retKey:String):* {
var arr:Array = searchDataLine(key, value);
if (arr) return arr[retKey];
return null;
}
}
}
class Header {
public var type:Class;
public var name:String;
public var iskey:Boolean;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment