function node_export_dsv_dsv_to_array in Node export 7.3
Same name and namespace in other branches
- 6.3 modules/node_export_dsv/node_export_dsv.module \node_export_dsv_dsv_to_array()
Decode DSV.
1 call to node_export_dsv_dsv_to_array()
- node_export_dsv_decode in formats/
dsv.inc - Interpret a DSV string.
File
- formats/
dsv.inc, line 264 - The Node export DSV format handler.
Code
function node_export_dsv_dsv_to_array($string, $delimiter, $enclosure, $separator) {
$lines = array();
$out_item = array();
$count = strlen($string);
$escape = FALSE;
$double_escape = FALSE;
$position = 0;
$i = 0;
$separators = str_split($separator);
while ($i < $count) {
$c = $string[$i];
// Determine whether this is an EOL.
$is_eol = TRUE;
for ($j = 0; $j < count($separators); $j++) {
if (!isset($string[$i + $j]) || $string[$i + $j] != $separators[$j]) {
$is_eol = FALSE;
break;
}
}
if ($is_eol) {
if ($escape) {
$out_item[$position] .= $c;
}
else {
$i += count($separators);
$lines[] = $out_item;
$out_item = array();
$position = 0;
continue;
}
}
elseif ($c == $delimiter) {
if ($escape) {
$out_item[$position] .= $c;
}
else {
if ($string[$i - 1] == $delimiter) {
$out_item[$position] .= '';
}
$position++;
$escape = FALSE;
$double_escape = FALSE;
}
}
elseif ($c == $enclosure) {
if ($double_escape) {
$out_item[$position] .= $enclosure;
$double_escape = FALSE;
}
if ($escape) {
$escape = FALSE;
$double_escape = TRUE;
}
else {
$escape = TRUE;
$double_escape = FALSE;
}
}
else {
if ($double_escape) {
$out_item[$position] .= $enclosure;
$double_escape = FALSE;
}
$out_item[$position] .= $c;
}
$i++;
}
if (!empty($out_item)) {
$lines[] = $out_item;
}
return $lines;
}