Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбивка строки, при вхождении третей табуляции 
V
    Опции темы
kr3v3tkus
Дата 28.10.2008, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 8.3.2008

Репутация: нет
Всего: 1



Строка $content содержит курсы валют, каждый элемент разделён табуляцией, как оттуда вытащить элементы при каждой 3ей табуляции? Чтобы был вывод например так
USD 2008-12-12 25.24
чтобы потом вгрузить в $ticker $date $price
или подскажите как это легче сделать? мб функция есть замены какаято?

Код

<?php

function get_content($url)
{
    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_HEADER, 0);
    ob_start();
    curl_exec ($ch);
    curl_close ($ch);
    $string = ob_get_contents();
    ob_end_clean();
    return $string;
}

$ticker = array();
$date = array();
$price = array();
$n = 0;

$content = get_content (
    'http://export.rbc.ru/free/cb.0/free.fcgi?period=DAILY&tickers=NULL&'.
    'd1='.date('d',time()).'&m1='.date('m',time()).'&y1='.date('Y',time()).
    '&d2='.date('d',time()).'&m2='.date('m',time()).'&y2='.date('Y',time()).
    '&lastdays=0&separator=TAB&data_format=BROWSER', "r"
    );

  for ($i=0; $i<5; $i++) {
   $buffer = explode("    ", $content[i], 4096);
   $ticker[$n] = $buffer[0];
   $date[$n] = $buffer[1];
   $price[$n] = $buffer[5];
   $n++;
}

PM MAIL   Вверх
HackMan
Дата 28.10.2008, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Юзверь-программист
**


Профиль
Группа: Участник
Сообщений: 391
Регистрация: 18.6.2005
Где: .ua

Репутация: 8
Всего: 9



может explode?


--------------------

Завтра - это самый загруженный день недели smile

user posted image

user posted image
PM MAIL ICQ   Вверх
kr3v3tkus
Дата 28.10.2008, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 8.3.2008

Репутация: нет
Всего: 1



Цитата

 $buffer = explode("    ", $content[i], 4096);

дык эксплод кушает всю строку, а как в этой строке именно по третьему табу разбить?
т.е. при выводе у меня получается
AUD    2008-10-28    16.6183
AUD    2008-10-28    16.6183
AUD    2008-10-28    16.6183
AUD    2008-10-28    16.6183
тк он только первые 3 параметра от строки берёт
PM MAIL   Вверх
bars80080
Дата 28.10.2008, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



попробуй так

Код

$buffer = explode("\t", $content[i]);

var_dump($buffer[3]);

PM MAIL WWW   Вверх
kr3v3tkus
Дата 28.10.2008, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 8.3.2008

Репутация: нет
Всего: 1



bars80080
а это один раз перед циклом сделать? Я уж куда ни пихаю - никак неполучается(

мб меня не понял никто - я оч плохо обясняю smile а то просто не пойму зачем content[i] - строка то одна, а ниже где explode - это я ошибся там нечайно [i] поставил... ща ... вот есть строка
Цитата

AUD 2008-10-28 16.6183 BYR 2008-10-28 12.941 CAD 2008-10-28 21.2499 CHF 2008-10-28 23.3987 CNY 2008-10-28 39.9228 DKK 2008-10-28 45.5443 EUR 2008-10-28 34.0844 GBP 2008-10-28 42.1775 ISK 2008-10-28 22.5248 JPY 2008-10-28 29.5029 KZT 2008-10-28 22.8094 NOK 2008-10-28 38.6151 SEK 2008-10-28 33.8273 SGD 2008-10-28 18.0795 TRY 2008-10-28 15.9656 UAH 2008-10-28 45.9676 USD 2008-10-28 27.3507 XDR 2008-10-28 40.697

и из неё сделать 
Цитата

AUD 2008-10-28 16.6183
BYR 2008-10-28 12.941
CAD 2008-10-28 21.2499
CHF 2008-10-28 23.3987
CNY 2008-10-28 39.9228
...
XDR 2008-10-28 40.697


Это сообщение отредактировал(а) kr3v3tkus - 28.10.2008, 18:39
PM MAIL   Вверх
bars80080
Дата 28.10.2008, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



нет, заместо твоей строки $buffer = explode("    ", $content[i], 4096);
тыж драконишь строчку массива

после неё поставь скажем var_dump($buffer); посмотри что получится, ну и сюда скинь, если что не так
PM MAIL WWW   Вверх
HackMan
Дата 28.10.2008, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Юзверь-программист
**


Профиль
Группа: Участник
Сообщений: 391
Регистрация: 18.6.2005
Где: .ua

Репутация: 8
Всего: 9



попробуй регулярные выражения, с паттерном вроде этого: ([^\s]+[\s]){3}


--------------------

Завтра - это самый загруженный день недели smile

user posted image

user posted image
PM MAIL ICQ   Вверх
smartov
Дата 28.10.2008, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



kr3v3tkus
Код

$string = ' ... тут твоя строка разделённая табуляторами ... ';

preg_match_all('/([^\t]+\t[^\t]+\t[^\t]+)\t?/', $string, $matches);
print_r($matches[0]);

PM MAIL   Вверх
kr3v3tkus
Дата 28.10.2008, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 8.3.2008

Репутация: нет
Всего: 1



bars80080
Цитата

array(1) { [0]=> string(1) "A" } array(1) { [0]=> string(1) "A" } array(1) { [0]=> string(1) "A" } array(1) { [0]=> string(1) "A" } array(1) { [0]=> string(1) "A" }

только первую букву глотает :(


HackMan
для меня сложно :( я так и не выучил все эти флаги в выражениях :(
PM MAIL   Вверх
kr3v3tkus
Дата 28.10.2008, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 8.3.2008

Репутация: нет
Всего: 1



smartov
вот опять же - я немогу даже с этим разобраца :( подставил - вывело
Цитата

Array ( ) 

и усё :( 
PM MAIL   Вверх
smartov
Дата 28.10.2008, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



kr3v3tkus, значит строка была разбита не табуляторами

Добавлено через 3 минуты и 33 секунды
Давайте так. Вот вам наверняка рабочий пример. Строка разбита пробелами. Думаю дальше сами сможете.

Код

<?php

$string = '1 2 3 4 5 6 7 8 9';

preg_match_all('/([^\s]+\s{1}[^\s]+\s{1}[^\s]+)\s{0,1}/', $string, $matches);
print_r($matches[0]);

?>


У вас, я думаю, строка разбита четярьмя пробелами а не табулятором. Если это так, то заменить в регулярке единички на 4 особого туда не составит smile
PM MAIL   Вверх
kr3v3tkus
Дата 28.10.2008, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 8.3.2008

Репутация: нет
Всего: 1



ну вот не знаю как они так разбили... я просто отступ ихний копировал и у меня шло :(
http://export.rbc.ru/free/cb.0/free.fcgi?p..._format=BROWSER
PM MAIL   Вверх
smartov
Дата 28.10.2008, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



kr3v3tkus
тогда должно работать вот это

Код

$string = ' ... тут эта самая строка ... ';

preg_match_all('/([^\s]+\s+[^\s]+\s+[^\s]+)\s*/', $string, $matches);
print_r($matches[0]);


Добавлено через 2 минуты и 23 секунды
Хотя лично я и предпочситаю писать регулярки чётко под ожидаемую строку. Но зато эта должна работать почти на любых разделителях.

Добавлено через 2 минуты и 38 секунд
Имеется в виду на любых пробелах или табуляторах или и том и том
PM MAIL   Вверх
kr3v3tkus
Дата 28.10.2008, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 8.3.2008

Репутация: нет
Всего: 1



smartov, крута smile ток можна последний вапрос, а то ваще никак с регулярками не пойму( как написать наподобие этого
Код

  for ($i=0; $i<18; $i++) {
   $buffer = explode("\s", preg_match_all('/([^\s]+\s+[^\s]+\s+[^\s]+)\s*/', $content, $matches));
   $ticker[$n] = $buffer[0];
   $date[$n] = $buffer[1];
   $price[$n] = $buffer[2];
   $n++;
   }

чтобы все эти три разных элемента строки в 3 разных массива поместить? Как можно с помощью explode выдрать из этого preg_match_all?
PM MAIL   Вверх
smartov
Дата 28.10.2008, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Не. Дальше я пас это сильно просто. С такими вопросами в Центр помощи, а лучше на читать доку на php.net
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0893 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.