Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Парсинг строки из Excel, как определить конец строки?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: В ячейках excel встречаются символы переноса строки...
kisil-mike
Отправлено: 31 Мая, 2018 - 22:52:51
Post Id



Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Окт. 2012  
Откуда: Москва


Помог: 0 раз(а)




Необходимо сделать на странице сайта <textarea>, в которую можно было бы вставить скопированные из excel(через выделение + ctrl+c) данные и получить из этого в PHP данные в виде массива [строка1[ячейка1,ячейка2,..], строка2[ячейка1,..]]

Столкнулся с проблемой: в некоторых excel ячейках встречаются символы переноса строки. В таких случаях excel ячейку обрамляет кавычками. Как мне определить где кончается строка 1 и начинается строка 2 в таком случае?

Сами ячейки разделены между собой табуляцией, строки - символами \r\n, соответственно в обычном случае массив я создавал путем деления на строки через explode("\r\n"), а затем делением строки на ячейки через explode("\t"). А вот как быть когда внутри ячейки встречается те же \r\n... нужно как-то учитывать кавычки.

Т.е. собственно вот пример строки которую я получаю в textarea(для наглядности вставил спецсиволы \t и \r\n, на самом деле они невидимы)
ячейка1 \t ячейка2 \t "ячейка3 \r\n ячейка3 часть2" \r\n
ячейка1 \t ячейка2 \t "ячейка3" \r\n

Как мне спарсить первую строку? Возможно str_getcsv() поможет?
Скачать файл: Книга1.xlsx
Скачан раз: 42

(Отредактировано автором: 31 Мая, 2018 - 23:53:39)



-----
Дарите радость людям!
 
 Top
Строитель Модератор
Отправлено: 31 Мая, 2018 - 23:35:07
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




kisil-mike пишет:
Возможно str_getcsv() поможет?
Попробуйте. А если не поможет, то можно попробовать вместо explode() решение с preg_split():
PHP:
скопировать код в буфер обмена
  1. $str = 'ячейка1 \t ячейка2 \t "ячейка3 \r\n ячейка3 часть2" \r\n
  2. ячейка1 \t ячейка2 \t "ячейка3" \r\n';
  3.  
  4. $arr = preg_split('~\r\n~', $str);
  5.  
  6. var_dump($arr);
В результирующем массиве вы получите две строки:
CODE (html):
скопировать код в буфер обмена
  1. array (size=2)
  2.   0 => string 'ячейка1 \t ячейка2 \t "ячейка3 \r\n ячейка3 часть2" \r\n' (length=85)
  3.   1 => string 'ячейка1 \t ячейка2 \t "ячейка3" \r\n' (length=54)
 
 Top
kisil-mike
Отправлено: 31 Мая, 2018 - 23:53:12
Post Id



Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Окт. 2012  
Откуда: Москва


Помог: 0 раз(а)




В общем, сам PHP с помощью fgetcsv() отлично парсит скопированное из excel, только ему нужно скармливать файл, поэтому решение такое - создаем временный файл, записываем в него данные и парсим как CSV

CODE (htmlphp):
скопировать код в буфер обмена
  1. <form method="post">
  2.     <textarea name="data"></textarea>
  3.     <input type="submit">
  4. </form>
  5. <pre>
  6. <?php
  7. if(!empty($_POST['data'])) {
  8.    $temp = tmpfile();
  9.    fwrite($temp, $_POST['data']);
  10.    fseek($temp, 0);
  11.  
  12.    while (($data = fgetcsv($temp, 1000, "\t")) !== FALSE) {
  13.        print_r($data);
  14.    }
  15. }

(Отредактировано автором: 01 Июня, 2018 - 01:05:36)



-----
Дарите радость людям!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB