Как определить ";" в данных csv файла, где разделитель тоже ";"? Подкинте идею. Как узнать что ";" не разделитель, а часть данных?
им и пользуюсь, но все ";" он видит как разделитель, а есть данные где есть ";". Мне надо как-то определить, где ";" как разделитель, а где как часть данных.
Вот нашел в нете. Но не могу понять "идею" определения ";" PHP: <?php $file = $_POST['file']; $csv_lines = file("book1.csv"); if(is_array($csv_lines)) { //разбор csv $cnt = count($csv_lines); for($i = 0; $i < $cnt; $i++) { $line = $csv_lines[$i]; $line = trim($line); //указатель на то, что через цикл проходит первый символ столбца $first_char = true; //номер столбца $col_num = 0; $length = strlen($line); for($b = 0; $b < $length; $b++) { //переменная $skip_char определяет обрабатывать ли данный символ if($skip_char != true) { //определяет обрабатывать/не обрабатывать строку ///print $line[$b]; $process = true; //определяем маркер окончания столбца по первому символу if($first_char == true) { if($line[$b] == '"') { $terminator = '";'; $process = false; } else $terminator = ';'; $first_char = false; } //просматриваем парные кавычки, опредляем их природу if($line[$b] == '"') { $next_char = $line[$b + 1]; //удвоенные кавычки if($next_char == '"') $skip_char = true; //маркер конца столбца elseif($next_char == ';') { if($terminator == '";') { $first_char = true; $process = false; $skip_char = true; } } } //определяем природу точки с запятой if($process == true) { if($line[$b] == ';') { if($terminator == ';') { $first_char = true; $process = false; } } } if($process == true) $column .= $line[$b]; if($b == ($length - 1)) { $first_char = true; } if($first_char == true) { $values[$i][$col_num] = $column; $column = ''; $col_num++; } } else $skip_char = false; } } } var_dump($values); ?>
Данные в CSV должны быть в " ", следовательно тогда всякие спец символы всегда будут в данных игнорироватся, главное не забывать " бекслешить
данные в book1.csv который парсит скрипт приведеный више данные тоже не в кавычках. но скрипт работает коректно. обясните на основе чего в скрипте определяются ";", которые являются частью данных, а не разделителем?
взыть то можно, но мне файл на обработку прислали без кавычок. проставлять каждый раз кавычки будет проблематично и затратно.
если можешь менять csv замени все "ненужные" ; так PHP: $text=str_replace(";","&#".ord(';').";",$text); если не можешь то может быть: PHP: $str = "12345;te;xt;more_text;12214"; preg_match("#(\d+);(.+?);([^;]+);(\d+)#",$str,$arr); print_r($arr);