Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выгрузить данные web и сохранить в txt
 
 автор: FDmitry   (13.08.2014 в 07:01)   письмо автору
 
 

Добрый день! Прошу помощи у спецов, у меня такая задача. Надо из любого сайта прогноз погоду вытащить 3 значения: температура (знак+цифра), влажность (цифра+%) и давление (цифра), формат примерно такой
"----+5--65%-720" (вместо "-" пробелы, хотя можно и их)
далее все это сохранить в файл UniCode .тхт
Буду очень благодарен за помощь!

Для обработки можно вот эти значения брать
http://pogodnik.com/xml/informer/ru/vertical/01/zs3PyMk%3D

  Ответить  
 
 автор: confirm   (13.08.2014 в 09:07)   письмо автору
 
   для: FDmitry   (13.08.2014 в 07:01)
 

Нужно описывать все возможные написания исходного текста, а также выходного формата. Например, +5, это скорее температура в градусах, но тогда что минусовой температуры быть не может, и не может быть более 9 градусов? И как должна выглядеть каждая запись выходного файла?

<?
$txt 
"----+5--65%-720
fhgjfkd dhfjskd 35
12  --14  62% 680
dhfjsdkfdshf fskdfls"
;
//получить массив строк содержащих требуемое, с учетом - или + и десятков градусов
preg_match_all('/([\+|\-]{1}\d{1}).+(\d{2}%).+(\d{3})/'$txt$m);
//забираем массивы результатов
$m array_slice($m1);
//группируем из них массив данных - каждый элемент: температура, влажность, давление
$m array_map(null$m[0], $m[1], $m[2]);
//формируем текст для записи - каждое значение будет сохранено через запятую
$txt implode("\r\n"array_map(function($v) {
    return 
implode(', '$v);
}, 
$m));
//запись в файл
file_put_contents('UniCode .txt'$txt);
//вот только не понятно при чем тут UniCode, ибо хранимые данные вполне вмещаются в ASCII
//да и храня под именами с начертаниями в верхнем и нижнем регистрах на Unix, 
//учитывайте это и unicode файлы разные, стоит ли так делать?
//расширения  .тхт быть не может

//результат:
?>
+5, 65%, 720
-14, 62%, 680

  Ответить  
 
 автор: FDmitry   (13.08.2014 в 09:25)   письмо автору
 
   для: confirm   (13.08.2014 в 09:07)
 

Спасибо за быстрый ответ! Я немного еще более подробно вам расскажу
Вот ссылка на банер погоды http://pogodnik.com/xml/informer/ru/vertical/01/zs3PyMk%3D
Это конечно не понаце, как говорится, можно из любого другого источника получать данные, главное чтоб они были онлайн, из всех данных нам интересны 3 значения: температура (знак+цифра), влажность (цифра+%) и давление (цифра), формат на выходе в кодировке UniCode (программа специализированная только такую понимает без кривизны), а файл надо чтоб получился .txt
Внутри него данные должны быть записаны в виде ----+5--65%-720 (вместо "-" надо пробелы, чтоб красиво все на свои места встало)

  Ответить  
 
 автор: confirm   (13.08.2014 в 09:49)   письмо автору
 
   для: FDmitry   (13.08.2014 в 09:25)
 

Прочитайте о кодировках,и запомните, что строка

1 + - % текст


в unicode будет выглядеть так:

1 + - % \u0442\u0435\u043a\u0441\u0442


Теперь понятно, что глупо именно в unicod хранить ваш текст? Поэтому не порите чепухи, в какой бы кодировке вы не работали, ваши данные будут сохранены как один байт на каждый символ, без всякой конвертации в unocode, даже если вы это сделаете.

Что касается пробелов - я о чем писал? Сохраняйте как надо, место где нужно заменить на пробел ведь тоже описано:

<?
//заменить строку
return implode(', '$v);
//на
return implode(' '$v);
//и будут сохраняться через пробелы, каждые три значения, с новой строки


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

  Ответить  
 
 автор: FDmitry   (13.08.2014 в 10:01)   письмо автору
 
   для: confirm   (13.08.2014 в 09:49)
 

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

  Ответить  
 
 автор: confirm   (13.08.2014 в 10:11)   письмо автору
 
   для: FDmitry   (13.08.2014 в 10:01)
 

Зрасьте, приехали. Сначала вы показываете пример записи, которую надо парсить, потом не довольны тем, что ничего не получается откуда-то.
Ваша ссылка, это html-код, а не ---+5 ... Вопрос нужно описывать подробно и четко, а то не понять что к чему.

По ссылке, сперва температура, а потом давление, а не влажность, поэтому:

<?
$txt 
str_replace("\r\n"''strip_tags(file_get_contents('http://pogodnik.com/xml/informer/ru/vertical/01/zs3PyMk%3D')));
preg_match('/([\+|\-]{1}\d{1,2}).+(\d{3}).+(\d{2}%)/'$txt$m);
file_put_contents('file_name.txt'implode(' 'array_slice($m1)));


PS. Кстати, я не синоптик, поэтому не знаю может ли быть влажность 5 или 100? Если да, то шаблон должен быть таким:

'/([\+|\-]{1}\d{1,2}).+(\d{3}).+(\d{1,3}%)/'

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования