function _node_import_csv_get_row in Node import 5
Get one row from the CSV file and return it as an array of columns/fields.
1 string reference to '_node_import_csv_get_row'
File
- ./
node_import.module, line 797 - This modules provides a wizard at "administer >> content >> import" to import a CSV file with nodes.
Code
function _node_import_csv_get_row($filepath, $reset = FALSE) {
static $handle;
if ($filepath == '') {
unset($handle);
return FALSE;
}
if (!isset($handle) || $reset) {
if (isset($handle)) {
fclose($handle);
}
$handle = fopen($filepath, 'r');
}
// return fgetcsv($handle, $size, $separator);
//
// fgetcsv() is buggy with special chars at the beginning of fields,
// let's create our own fgetcsv().
// Main code taken from http://de.php.net/manual/en/function.fgetcsv.php#75332
$length = variable_get('node_import_csv_size', 10000);
$delimiter = variable_get('node_import_csv_separator', ',');
$qualifier = variable_get('node_import_csv_qualifier', '"');
$escape = variable_get('node_import_csv_escape', '\\');
$fields = array();
$str = '';
while ($str == '') {
// Skip empty lines
if (feof($handle)) {
return FALSE;
}
$str = trim(fgets($handle, $length));
}
$multiline = FALSE;
while (strlen($str) > 0) {
$str = ltrim($str);
if ($str[0] == $delimiter && !empty($fields)) {
$str = ltrim(substr($str, 1));
}
if ($str[0] == $qualifier) {
$inside = TRUE;
$value = '';
while ($inside) {
$newvalue = '';
for ($i = 1; $i < strlen($str); $i++) {
if ($str[$i] == $qualifier && $str[$i - 1] != $escape) {
$str = $multiline ? substr($str, strlen($newvalue) + 2) : substr($str, strlen($value) + 2);
$value = str_replace($escape . $qualifier, $qualifier, $value);
$inside = FALSE;
$multiline = FALSE;
break;
}
$value .= $str[$i];
if ($multiline) {
$newvalue .= $str[$i];
}
}
if ($inside) {
if (feof($handle)) {
$inside = FALSE;
// End of file reached.
}
else {
$str = "\n" . fgets($handle, $length);
// We need to read more data, multiline field.
$multiline = TRUE;
}
}
}
}
else {
if (strlen($str) > 0) {
$end = strpos($str, $delimiter);
$value = $end !== false ? substr($str, 0, $end) : $str;
$str = substr($str, strlen($value));
}
else {
break;
}
}
$fields[] = $value;
}
return $fields;
}