Чтение и перенос строки в csv

AntiBuger

Новичок
Привет коллеги!

Помогите решить проблему, битый час уже голову ломаю. Задача в следующем, считать csv файл который импортируетя из битрикса.

=========Пример (открыт через блокнот)==============
206;Чехол для TeXet TN-505 Time;;/upload/iblock/989/9ea521291d62c9c0ec02c42b80e6687a.jpg;770
207;Чехол для GPS навигатора 4.3 Case Logic GPS-1;Чехол Case Logic GPS-1 для навигаторо.;/upload/iblock/458/c10e8bc17a38b6bc0e8c4cc83361d9ca.jpg;680
212;Transcend TS*SDHC6;Тип карты памяти Secure Digital HC
Объем памяти 4-32 Гб
Класс скорости Class 6;/upload/iblock/27f/cba13289a303f411ae5d5adfaf9ce911.jpg;1750

214;Silicon Power SDHC Card Class 10;Тип карты памяти Secure Digital HC
Объем памяти 4-32 Гб
Класс скорости Class 10;/upload/iblock/963/6f705f0efaf2e81c1a1fafb6cccb870e.jpg;1700

217;Kingston SD4;Тип карты памяти Secure Digital HC
Объем памяти 4-32 Гб
Класс скорости Class 4;/upload/iblock/7fa/41c825e450bb983af2c07b02dd088d22.jpg;1300

===========================================================================


Посмотрите на строку которая начинается с "212", после слова "Digital HC" стоит перенос на другую строку, как его убрать? Перепробовал уже всё что знал. Перед тем как считать файл как csv я его изменяю как обычный текстовый файл, убираю с него всё лишнее. А вот долбаный перенос на другую строку не могу убрать. Кто знает, как его убрать?

Использовал алгоритм:
$contents = htmlspecialchars($contents, ENT_QUOTES);
$contents = preg_replace("|[\r\n]+|", "\r\n", $contents);
$contents = preg_replace("|[\n]+|", "\n", $contents);
$contents = str_replace('<br>', "", $contents);
$contents = str_replace('<br/>', "", $contents);
$contents = str_replace('<br />', "", $contents)

 

riff

Новичок
Тогда оригинальный кусок файла присоедини к вопросу.
 

riff

Новичок
А прочитать информацию перед загрузкой файла в окне диалога?
 

riff

Новичок
Код:
$txt = file_get_contents('12.csv');
$txt = str_replace("\n", '', $txt);
//echo '<pre>'.$txt.'</pre>';
file_put_contents('13.txt', $txt);
а перед "207;" "212;" стоят \r\n
 
Последнее редактирование:

riff

Новичок
Сдаюсь. Если у меня в 12.csv переносы удаляет, а у тебя нет, то не знаю.
 

WMix

герр M:)ller
Партнер клуба
битый файл, или ручками или чтото в этом роде если не ошибся ))
PHP:
$txt = file_get_contents('12.csv');
$arr = explode(';', $txt);
$c=4; $i=-1; $r=0;
foreach($arr as $val){
  if( ++$i%$c == 0  && $i>0 ){
    $tmp = explode("\n", $val);
    $out[$r++][] = $tmp[0];
    $out[$r][] = $tmp[1];
  }
  else{
    $out[$r][] = $val;
  }
}
print_r($out);
 

Breeze

goshogun
Команда форума
Партнер клуба
у тебя два варианта:

-- пинать тех, кто тебе экспортирует этот файл, чтобы убирали паразиные переносы
-- фиксить самому, например по такому алгоритму:

1. содаешь 12.fixed.csv
2. делаешь буфер
3. читаешь файл 12.csv построчно
4. если в начале строки есть 1234; то сбрасываешь предыдущий буфер, добавляя ему \r\n в конец, в 12.fixed.csv, очищаешь буфер, делаешь строке trim и запоминаешь в буфер
5. если нет такой конструкции, то убираешь \r\n и конкатенируешь к буферу
6. делаешь п.5 пока не сработает п.4

дальше работаешь с 12.fixed.csv
 

WMix

герр M:)ller
Партнер клуба
Breeze, переносы разрешены вроде если значение в кавычках
 

AntiBuger

Новичок
у тебя два варианта:

-- пинать тех, кто тебе экспортирует этот файл, чтобы убирали паразиные переносы
-- фиксить самому, например по такому алгоритму:

1. содаешь 12.fixed.csv
2. делаешь буфер
3. читаешь файл 12.csv построчно
4. если в начале строки есть 1234; то сбрасываешь предыдущий буфер, добавляя ему \r\n в конец, в 12.fixed.csv, очищаешь буфер, делаешь строке trim и запоминаешь в буфер
5. если нет такой конструкции, то убираешь \r\n и конкатенируешь к буферу
6. делаешь п.5 пока не сработает п.4

дальше работаешь с 12.fixed.csv

1) Отпинал бы их с радостью, весь битрикс отпинал, как там вообще ума у программистов хватает делать такое ПО, в файле csv еще и запитые вставляются в яцейки, а это бред, потому как csv-файл с задлетели-запятые.

2) Спасибо, скорее всего так и придется делать.

Но странно почему не убирается перенос в файле, ведь он просто как текстовый файл открыт
 

WMix

герр M:)ller
Партнер клуба
когда файл битый лучше это допущение убрать и сделать максимально жестко, при этом не съедая 146% памяти
а куда их (переносы) выкинуть? это часть данных! чтоб не жрать 146% памяти, пользуемся str_getcsv,
просто в задаче не CSV - можно было и построчно читать, я предположил что памяти хватит и написал простенький алгоритмик
 

Breeze

goshogun
Команда форума
Партнер клуба
а куда их (переносы) выкинуть? это часть данных!
все туда же, запоминать, где были и как были
или нужно прям весь алгоритм расписывать на все случаи жизни?

что касается части данных, иногда гораздо лучше, когда утром говорят, что у нас переносы не отображаются, чем когда звонят в 3 ночи с фразой "них*ра не работает"
 
Сверху