Похоже, вы могли бы использовать класс Tokenizer или какой-то уже существующий парсер.
Когда я выполняю вашу функцию как:
var result:String = CSVtoArray("\"this is a string, yeah\"");
Работает как положено - получаю строку с пробелами.
Ваша логика работает только для строк в кавычках:
//if we are not inside quotes...
if(!inQuotes && c != "\"") {
// ...
//if this is not leading or trailing white space, add the character
} else if(c != " " && c != "\t" && c != "\r") {
field += c;
Если вы не в кавычках, и символ не является пробелом, он добавляется.
Итак, когда вы не в кавычках и не видите пробела, он не добавляется в строку.
На самом деле, это может быть достигнуто с помощью 1 строки RegEx.
Расширение на однострочный CSV-анализатор Taytay , вот пример реализации:
CsvParser.as
package
{
import flash.display.Sprite;
public class CsvParser extends Sprite
{
public function CsvParser()
{
var set1:Array = CSVtoArray("\"this is a string, yeah\"\n");
var set2:Array = CSVtoArray("this is a string, yeah\n");
}
public function CSVtoArray(csv:String):Array
{
// split csv in to rows
var rows:Array = csv.split("\n");
// for every row...
for (var x:uint = 0; x < rows.length; x++)
{
var columns:Array = csv.split(/,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/g);
for (var y:uint = 0; y < columns.length; y++)
{
// trim leading / trailing whitespace
columns[y] = columns[y].replace(/^\s+|\s+$/g, '');
}
rows[x] = columns;
}
return (rows);
}
}
}