Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] разбиение на подстроки / 13 сообщений из 13, страница 1 из 1
06.02.2006, 22:58
    #33527201
Damnedest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] разбиение на подстроки
Есть строка, которую надо разбить на подстроки, но вот я только не знаю как правильнее реализовать данную задачу...

Код: plaintext
$string = "Блок1 Блок2 Блок3 'Блок4 с пробелом' Блок5";

Как правильно разбить данную строку на подстроки, чтобы строки заключенные в кавычки не разбивались.

Также желательно сделать, чтобы \' работала нармально и ее можно было употреблять в этом блоке...

Подскажите, какие есть методы?
...
Рейтинг: 0 / 0
06.02.2006, 23:24
    #33527220
PantiL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] разбиение на подстроки
Если блоки отделены друг от друга одинаковым разделителем юзайте функцию explode()
...
Рейтинг: 0 / 0
06.02.2006, 23:28
    #33527224
DocAl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] разбиение на подстроки
explode не пойдёт, прочитайте про дополнительное требование.
Думаю, можно написать подходящий шаблон для preg_split.
...
Рейтинг: 0 / 0
07.02.2006, 00:10
    #33527249
Damnedest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] разбиение на подстроки
Пробовал, но у меня не получилось...
Ведь надо чтобы по пробелу не разделялось, если он находится внутри одинарных кавычек...
...
Рейтинг: 0 / 0
07.02.2006, 00:24
    #33527259
Olympico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] разбиение на подстроки
DamnedestЕсть строка, которую надо разбить на подстроки, но вот я только не знаю как правильнее реализовать данную задачу...

Код: plaintext
$string = "Блок1 Блок2 Блок3 'Блок4 с пробелом' Блок5";

Как правильно разбить данную строку на подстроки, чтобы строки заключенные в кавычки не разбивались.

Также желательно сделать, чтобы \' работала нармально и ее можно было употреблять в этом блоке...

Подскажите, какие есть методы?


А если поробовать такой алгоритм:
1 - Подсчитать на каких позициях находится > пробел + ' <
2 - Удалить из исходной строки то, что в одинарных кавычках, записывая в массив.
3 - Разбить новую строку на состовляющие в другой массив.
4 - А потом пересчетом все это вывести эхолотом.

На мой взгляд вывод будет состоять из классических вложенных двух циклов, ну может трех, но не больше...
...
Рейтинг: 0 / 0
07.02.2006, 00:44
    #33527274
Damnedest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] разбиение на подстроки
OlympicoА если поробовать такой алгоритм:
1 - Подсчитать на каких позициях находится > пробел + ' <
2 - Удалить из исходной строки то, что в одинарных кавычках, записывая в массив.
3 - Разбить новую строку на состовляющие в другой массив.
4 - А потом пересчетом все это вывести эхолотом.

На мой взгляд вывод будет состоять из классических вложенных двух циклов, ну может трех, но не больше...

Хм, а как определять кавычки? Как разбираться с вот такими вот комбинациями ('123 Блок \\')?
...
Рейтинг: 0 / 0
07.02.2006, 01:03
    #33527285
*
*
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] разбиение на подстроки
...
Рейтинг: 0 / 0
07.02.2006, 01:56
    #33527306
Olympico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] разбиение на подстроки
Damnedest OlympicoА если поробовать такой алгоритм:
1 - Подсчитать на каких позициях находится > пробел + ' <
2 - Удалить из исходной строки то, что в одинарных кавычках, записывая в массив.
3 - Разбить новую строку на состовляющие в другой массив.
4 - А потом пересчетом все это вывести эхолотом.

На мой взгляд вывод будет состоять из классических вложенных двух циклов, ну может трех, но не больше...

Хм, а как определять кавычки? Как разбираться с вот такими вот комбинациями ('123 Блок \\')?


У тебя открытием условия должны быть пробел+кавычка, а дальше проверяешь момент закрытия...Все, что я могу тебе предложить это алгоритмы, а не саи функции, я их сам не знаю...когда что-то нужно ищу в мануале согласно выробатоному алгоритму...сначала напиши алгоритм работы твоего обработчика...
...
Рейтинг: 0 / 0
07.02.2006, 02:01
    #33527307
Olympico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] разбиение на подстроки
Напиши приблезительную строку-пример, а потом поставь курсор в ее начало и стрелкой управления в право, на клавиатуре, в ручном режиме перемещай курсор и продумывай за него все действия, это и будет твой алгоритм.


"Прояви же красивое терпение"
(Сура Ступени, аят 5)
...
Рейтинг: 0 / 0
07.02.2006, 10:14
    #33527687
AlexTheRaven
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] разбиение на подстроки
Olympico[quot Damnedest]
А если поробовать такой алгоритм<...>

Согласен, задачка - из курса информатики. По моему, укрупнённый алгоритм таков.

Ползёшь по строчке, пока не кончится. Посимвольно аккумулируешь.

При каждом нахождении пробела - пишешь аккумулятор в следующий элемент массива и сбрасываешь его.

При нахождении апострофа, но не закомментированного апострофа - перестаёшь сбрасывать аккумулятор в элемент при нахождении пробела.

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

Написать шаблон для preg_split, конечно, можно, но по-моему это намного сложнее... Хотя "изящнее".
...
Рейтинг: 0 / 0
07.02.2006, 12:02
    #33528159
Damnedest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] разбиение на подстроки
Всем большое спасибо за помощь... просто думал, что можно реализовать данную функцию при помощи регулярных выражений.
...
Рейтинг: 0 / 0
07.02.2006, 12:53
    #33528381
VERS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] разбиение на подстроки
* php.net/fgetcsv
И все таки почитайте эту ссылку ... уж больно напоминает структуру csv...
...
Рейтинг: 0 / 0
07.02.2006, 14:29
    #33528752
Damnedest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] разбиение на подстроки
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
function parse($str,$f_delim = ' ',$r_delim = "\n",$qual = "'")
{
   $output = array();
   $row = array();
   $word = '';

   $len = strlen($str);
   $inside = false;

   $skipchars = array($qual,'\\');

   for ($i = 0; $i < $len; ++$i) {
       $c = $str[$i];
       if (!$inside && $c == $f_delim) {
           $row[] = $word;
           $word = '';
       } elseif (!$inside && $c == $r_delim) {
           $row[] = $word;
           $word = '';
           $output[] = $row;
           $row = array();
       } else if ($inside && in_array($c,$skipchars) && ($i+ 1  < $len && $str[$i+ 1 ] == $qual)) {
           $word .= $qual;
           ++$i;
       } else if ($c == $qual) {
           $inside = !$inside;
       } else {
           $word .= $c;
       }
   }

   $row[] = $word;
   $output[] = $row;

   return $output;
}

Спасибо большое. Вот что я нашел...
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] разбиение на подстроки / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]