Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > выбрать из текста в файле только целые числа


Автор: Rezzonans 14.7.2010, 09:21
Код

Задание:

Написать скрипт на языке php со следующим функционалом:

1. считать из файла file.txt только уникальные целые числа в массив и
сохранить в базу данных
2. вывести "красиво" из базы данных массив и сумму всех
элементов
3. создать два массива чётных и нечетных чисел из уже
имеющихся данных и сохранить в базу данных
4. прочитать из базы данных массив нечетных чисел отсортировав по
возрастанию, а четных в массив с сортировкой по убыванию
5. вывести "красиво" два массива и сумму всех элементов двух
массивов

Файл file.txt:

hello
4
lala-blabla ! =))
:(
457 -1.000001
32
98
2 +3.14 12637 9812 89123789
1
O O1 01
1O
1OO
zero!
df1000 ggg...
-5
105
-2006
wassauupp!!

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



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

Код

preg_match( "/[+-]?[0-9]+[^A-Za-z\!\:\(\)\=]*/", $str, $matches );


Но это не вариант, ибо в результате проскакивает число +3.14. К слову сказать, плюс тож убрать не получается. Не бейте ногами, подскажите пожалуйста регулярку, я в них не силен :(

Автор: ksnk 14.7.2010, 09:56
Rezzonans, разбить файл по пробельным символам и все preg_split('/\s+/', ...). Все элементы должны быть числами.

для проверки, что это целое число - используй ctype_digit.

для остального можно floatval использовать. Если не число - будет 0. на сумму не влияет. Проверить правильно получилось или нет - тоже довольно просто floatval($s)==$s - если истина, значит чисто конкретно число...

регулярка здоровая получится, чтобы корректно проверить на число. Числа бывают с + - , с точкой, мантисой и отрицательной-положительной мантисой. Но можно предложить грязненькую-простенькую
/^[0-9Е\.+-]+$/
 для фильтра значений в этом файле достаточно. А floatval покажет что там неправильно на самом деле.

Уникальные значения делаются array_unique

остальные задачи пока не решал?  smile 

Автор: Rezzonans 16.7.2010, 12:29
Ну вот, вообщем, криво-косо, но сделал. Может кому пригодиться.



ksnk, Вам спасибо за помощь, array_unique очень пригодилась.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)