rendered paste body// Mortal, 2007-03-25// breaks down a whitespace-separated list into an array// needs a little tweaking to allow tabs to separate and maybe some other things, but it does C-style as well as C++-style comments just fine./*input =// Userlist.// Nick Reg date Access Mortal 1174816255 100 foobarbaz 1174842314 20output =array( array('Mortal', '1174816255', '100'), array('foobarbaz', '1174842314', '20'),)*/function quotedchar($c) { if ($c == 't') return "\t"; if ($c == 'n') return "\n"; if ($c == '0') return "\0"; return $c;}function xplode($s) { $i = 0; $n = strlen($s); $ret = array(); while ($i < $n and $s{$i} == ' ') $i++; if ($i >= $n) return $ret; $j = $n; while ($n and $s{$n-1} == ' ') $n--; $cur = ''; for ($i = $i; $i < $n; $i++) { if ($s{$i} === ' ') { if (!empty($cur)) $ret[] = $cur; $cur = ''; continue; } if ($s{$i} === '\\') { $cur .= quotedchar($s{++$i}); continue; } if ($s{$i} === '#' or ($i+1 < $n and ($s{$i}.$s{$i+1} === '//'))) break; if ($s{$i} === '"') { if (!empty($cur)) $ret[] = $cur; $cur = ''; while (++$i < $n and $s{$i} != '"') { if ($s{$i} == '\\') { $cur .= quotedchar($s{++$i}); continue; } else $cur .= $s{$i}; } $i++; $ret[] = $cur; $cur = ''; continue; } $cur .= $s{$i}; } if (!empty($cur)) $ret[] = $cur; $cur = ''; return $ret; }