Консультация № 174879
05.12.2009, 01:31
0.00 руб.
0 11 1
Здраствуйте уважаемые эксперты!
У меня есть файл 2009_11_roul.txt с такими записями
2095038 09-11-01 00:00 - 1
2095039 09-11-01 00:10 - 21
2095040 09-11-01 00:20 - 15
2095041 09-11-01 00:30 - 29
2095042 09-11-01 00:40 - 21
2095043 09-11-01 00:50 - 2
2095044 09-11-01 01:00 - 2
2095045 09-11-01 01:10 - 19
2095046 09-11-01 01:20 - 00
2095047 09-11-01 01:30 - 23
2095048 09-11-01 01:40 - 32
2095049 09-11-01 01:50 - 22
и т.д.
Мне необходимо автоматически подсчитать какая цифра сколько раз встречается. Важны только последние(выделенные) цифры. Следует учесть, что встречается цифра 00.
Файл лежит на сервере, поэтому его не следует никуда загружать.

Обсуждение

Неизвестный
05.12.2009, 02:17
общий
kostja12:
Какие наработки у Вас есть по данному вопросу и что не получается (не работает)?
Неизвестный
05.12.2009, 10:35
общий
Палян Александр Михайлович:
Наработок нет Я не знаю с чего начать, как работать с этими строками. Как опознать последние две цифры.
Неизвестный
05.12.2009, 12:28
общий
это ответ
Здравствуйте, kostja12.
поехали.
<?php
$log=file('имя_лога');
foreach ($log AS $value) {
list ($trash, $value) = explode (" - ", $value, 2);
$counter["$value"]++;
}
print_r $counter;
?>
как-то так, навскидку
5
Мега спасибо!!!
Неизвестный
05.12.2009, 12:38
общий
пардон, 2 поправки: print_r ($counter) - забыл скобки и
после строки list ($trash, $value) = explode (" - ", $value, 2); лучше добавить $value = trim($value); , а то в $value остаётся перевод строки в конце - на работоспособность не влияет, но неудобно пользоваться )))

вот работающий пример: URL >>
Неизвестный
05.12.2009, 12:58
общий
kostja12:
Рекомендую с помощью регэксп
например
$matches = array();
preg_match('/^\d+\s\d{2}-\d{2}-\d{2}\s\d{2}:\d{2}\s-\s(\d+)/',$content_of_your_file, $matches);

В итоге в matches будут ваши цифры. Но это в принципе не ответ а направление движения. Поэтому в минифоруме )
Неизвестный
05.12.2009, 13:27
общий
Волков Алексей aka Lupo:
Я шокирован что так быстро ответили, думал что всё плохо и сложно:)
Не могли бы вы в кратце расписать что как происходит. А то мне на уроке это обьяснять:)
Обход массива я понял(ещё бы сортировочку элементов массива прикрутить, по возрастанию)
Неизвестный
05.12.2009, 13:28
общий
Модераторы:
Пожалуй, мой ответ должен выглядеть в рассылке так, просьба к модераторам: если не сложно, замените, пожалуйста, текст моего ответа на нижеприведённый. Заранее спасибо.

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

Код:

<?php

highlight_string (file_get_contents("answer.php")); // вывод кода, исключительно для наглядности примера, на исполнение кода никак не влияет, эту строку можно удалить

echo "<plaintext>";

include "log"; // вывод файла для разбора, тоже для наглядности, на исполнение кода никак не влияет, эту строку можно удалить

$log = file('log'); // считываем файл построчно в массив

foreach ($log AS $value) { // для каждой строки файла

list ($trash, $value) = explode (" - ", $value, 2); // разбиваем строку на 2 части, используя в качестве разделителя подстроку " - "

$value=trim($value); // удаляем перевод строки в конце

$counter["$value"]++; // инкрементируем значение элемента массива $counter с индексом "$value" - кавычки нужны для преобразования значения $value в строковое (для разделения 0 и 00)

};

print_r ($counter); // выводим массив $counter, имеющий формат $counter["подсчитываемая_цифра"] => количество_вхождений

?>


этот код в действии: URL >>

=============
Неизвестный
05.12.2009, 13:33
общий
Палян Александр Михайлович:
Цитата: 303858
[/q]
регэкспы ещё разработчиками РНР не рекомендуются для разбора простых строк, так как дольше работают и сильнее нагружают сервер [q=]Tip Do not use preg_match() if you only want to check if one string is contained in another string. Use strpos() or strstr() instead as they will be faster.
URL >>
Неизвестный
05.12.2009, 13:41
общий
kostja12:
допишите asort ($counter); // обычная сортировка по возрастанию c сохранением ключей(индексов);
перед выводом массива
Неизвестный
05.12.2009, 14:04
общий
to Волков Алексей aka Lupo

По ссылке
http://grosseto-eurofood.com/adm/answer.php
виден код php

так задумано или сервер не настроен?
Неизвестный
06.12.2009, 18:10
общий
Прим Палвер:
Спасибо за бдительность ))) код вывел специально, для наглядности примера, командой

highlight_string (file_get_contents("answer.php")); // вывод кода, исключительно для наглядности примера, на исполнение кода никак не влияет, эту строку можно удалить
Форма ответа