homeresumeabout
A Ruby readline-like method for AS3
08.06.26
I've missed the readline method from Ruby, so here's a stab at a readline that returns an array of all the lines you might want from a given file.
These examples of using this method assume some var f in scope that might look like:
var f : File = File.applicationDirectory.resolvePath("temp.txt");

You'd call this method in one of several ways. The simplest would return an array of all the lines in a file.
var lines : Array = readLines( f );

The rest of the examples assume some var r in scope that might look like:
var r : RegExp = new RegExp(/enabled/);

A slightly more complex way would use the filter property to select specific lines out of the file. In this case, lines that returned true for the regex /enabled/.
var lines : Array = readLines( f, r );

You could also flip the filter_accepts parameter to false, and get an array of all the lines that don't match the regex.
var lines : Array = readLines( f, r, false );

Finally, you could find the first line, after skipping the first two lines, that didn't match the regex.
var lines : Array = readLines( f, r, false, 1, 2 );

So, after all those wonderfully fun samples, here's the code:
/**
 * @param ... If you supply one extra param it'll be the number of lines possible.
 *				If you supply two extra params the first'll be the same and the second'll be an offset by lines.
 *				Anything past the first two params is ignored.
 */
private function readLines( f : File, line_filter : RegExp = null, filter_accepts : Boolean = true, ... params ) : Array {
	var line_offset : Number;
	var lines_possible : Number;
	switch( params.length ){
		case 0: 	lines_possible = Number.MAX_VALUE;	line_offset = 0;			break;
		case 1: 	lines_possible = params[0]; 		line_offset = 0;			break;
		default: 	lines_possible = params[0]; 		line_offset = params[1];
	}
	var total_lines_to_be_seen : Number = line_offset + lines_possible;
	var lines : Array = [];
	if( f.size > 0 ){
		var fileStream : FileStream = new FileStream();
		fileStream.open( f, FileMode.READ );
		var char : String;
		var line : String;
		var lines_seen : Number = 0;
		// Read either to the EOF or until we have enough lines
		while( fileStream.bytesAvailable > 0 && lines_seen < total_lines_to_be_seen ){
			line = "";
			char = fileStream.readUTFBytes(1);
			// Keep adding to the line until an EOL
			while( !(char == File.lineEnding) ){
				line += char;
				char = fileStream.readUTFBytes(1);
			}
			// If we've hit an EOL and we're past the offset, then see if it passes the filter.
			if( lines_seen >= line_offset ){
				if( line_filter == null ){
					lines.push(line);
				}else{
					if( line_filter.test(line) == filter_accepts ){
						lines.push(line);
					}else{
						lines_seen -= 1;
					}
				}
			}
			lines_seen += 1;
		}
		fileStream.close();
	}
	return lines;
}