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


Автор: Serebrus 16.12.2010, 16:40
Доброе время дня всем.
Имеется текстовый файл. Внутри его все записи расположены как в таблице (т.е. структура данных как в таблице). Надо создать массив с помощью регуларной выражении, точнее, элементы этого массива должны удовлетворять условие регулярной выражении.
Пробую функцию preg_match_all():
Код

preg_match_all('/\d{20}/', $cont, $mas, PREG_SET_ORDER);

но в результате, количество элементов массива больше чем количеств строк файла (напоминаю что содержимое файла имеет табличную форму, и в нем только один столбец хранит 20 значные цифры).

Спасибо заранее.

Автор: enoff 16.12.2010, 17:57
Что за таблица? Пример можно?

Автор: Serebrus 17.12.2010, 07:17
Просто текст в виде таблицы, вот пример:
_______________________________________________
№ |       Ф.И.О    | Дата регист |                    Код                |
_______________________________________________
1. | Иванов И.И.    | 12.11.2010  | 12345678998765432101
2. | Петров П.П.    | 12.09.2010  | 12345678998765432102
3. | Гупкин Г.Г.      | 25.04.2010  | 12345678998765432103
4. | Алексеев И.И. | 11.10.2010  | 12345678998765432104
5. | Лисунов И.И.   | 02.02.2010  | 12345678998765432105
..................

мне надо составить массив из последнего столбца

Автор: patap 17.12.2010, 12:50
что именно в массиве лишнее? по идее все должно работать

Автор: Serebrus 17.12.2010, 12:56
В самом файле всего 245 строк, а в результате 490 (в массив 490 элементов). Видимо элементы повторяются, но как? Это мне и секрет.

Автор: patap 17.12.2010, 13:17
наверно приведи полный код, где это реализуется, от и до без урезаний. Может быть там что-то не то

Автор: Serebrus 17.12.2010, 13:24
Код

<?php
Error_Reporting(E_ALL & ~E_NOTICE);
if(!is_null($_FILES['filname']['name']))
{
 $file_path='uploads/'.$_FILES["filname"]["name"];
 $tmpname=$_FILES['filname']['tmp_name'];
 move_uploaded_file($tmpname,$file_path);
 $cont=file_get_contents($file_path);
 preg_match_all('/\d{'.$_POST['dc'].'}/', $cont, $mas, PREG_SET_ORDER);
 for($i=1; $i<=count($mas); $i++)
 {
  echo $mas[$i-1][0]."</br>";
 }
}
?>

Автор: patap 17.12.2010, 13:32
может в $_POST['dc'] передается не 20, а число как минимум меньше 20 в два раза?



или в массиве находятся правильные ид, состоящие из 20 символов, только дублируются?

Автор: Serebrus 17.12.2010, 13:37
Я в $_POST['dc'] точно передаю 20, а так скрипт же правильный верно?

Автор: patap 17.12.2010, 13:55
да вроде все верно... в регулярке проблем точно нет.
ты в сруктуре файла уверен? он действительно выглядит так как ты показал?

является результат правильным, но продублированным?

Автор: Serebrus 17.12.2010, 14:39
Я извиняюсь, не обратил внимание, в низу еще одного столбца файла, оказывается хронятся 20 значные цифры.
Всем спасибо.

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