чтение файла

SE

Guest
чтение файла

Имеется файл, в котором построчно находятся данные
надобно считать данные, находящиеся [скобках] и вывести их в массив.

Пример файла БД
544654
[564]
53454
454
4
[45454]
5454
454
[45]
 

Demiurg

Guest
1. читем все в массив
2. отбрасываем те элементы, которые либо не начинаются с '[' либо не заканчиваются ']'
РВ сдесь не нужны
 

ForJest

- свежая кровь
1. читаем построчно. в строку $str
2. if (strlen($str) == strlen($val = trim($str, '[]'))-2)
{
$arr[] = $val;
}
что-то типа такого.
 

sergadm

Новичок
PHP:
<?php
$str="544654  [564] 53454 454 4 [45454] 5454 454 [45]";
$sh="/\[(\d+)\]/is";
preg_match_all($sh,$str,$mas);
print_r($mas[1]);
?>
 

Demiurg

Guest
ForJest
sergadm
ну вы блин даете, зачем придумывать ихвращенные методы, когда проверить начинается ли строка на обределенный символ и кончается ли она на обределенном очень просто?
 

sergadm

Новичок
ну не я preg_match_all придумал:). хотя без проверки неизвестно что быстрее будет работать, может и твой способ . не проверял
 

Фанат

oncle terrible
Команда форума
Demiurg, забей.
а то тебе тони прочтет с большим пафосом своб лекцию по аб.
он у нас большой мастер.
 

ecto

Новичок
PHP:
<?php
$f=fopen('file.dat','r');
$r=array();
while($t=fgets($f))
 if($t[0]=='[')
 {
  $l=strlen($t);
  if($t[$l]==']')$r[]=substr($t,1,$l-2);
 }
fclose($f);
?>
регуляры работают недленее
т кому же экономнее расходуется память(критично если файл очень большой)
 

SE

Guest
>$str="544654 [564] 53454 454 4 [45454] 5454 454 [45]";
>$sh="/\[(\d+)\]/is";

я в паттернах не силен, но кажется что если в [будет] не число а символы то несработает...
 

гоша

Guest
~\[(.*?)\]~

но шаблоны в данном случае НЕ нужны, как и было сказано.
 

SE

Guest
Так спасибо
вот выбрал он что мне надо в массив...
Array (
[0] => qwer
[1] => q1w2e3r
[2] => 123
)
Есть у меня переменная $abc
так вот мне надо сравнить эту переменную со всеми словами в массиве $mas если есть совпадение то че нить написать ;)
 

гоша

Guest
хотел написать "тебе надо -- ты и сравнивай"
но боюсь показаться грубым

поэтому напишу так:

что вы пробовали и что не получается.
 

SE

Guest
if (strtolower($abc)===strtolower($mas))
{ print "совпадение"; }
и все ето загнать в цикл for

неполучилось - как узнать сколько в массиве переменных? :)
 

valyala

Новичок
так вот мне надо сравнить эту переменную со всеми словами в массиве $mas если есть совпадение то че нить написать
PHP:
if (in_array($abc, $mas)) echo('В массиве [mas] присутствует элемент [' . htmlspecialchars($abc) . ']');
else echo('Элемент [' . htmlspecialchars($abc) . '] отсутствует в массиве [mas]');
Почитай документацию про функцию in_array()
 

ecto

Новичок
PHP:
<?php
$f=fopen('file.dat','r');
$r=array();
while($t=fgets($f))
if($t[0]=='[')
{
  $l=strlen($t)-3;
  if($t[$l]==']')$r[]=substr($t,1,$l-1);
  //а вот сюда можно вставить сравнение
  //с вашей переменной
  //причем вывод будет столько раз сколько вхождений
  //если нужен один раз то - in_array()
}
fclose($f);
var_dump($r);
?>
проверил - точно работает.
сделанно для виндового конца строки
изменить на юниксовый просто.

(Предыдущий мой код действительно не работает-
забыл учесть конец строки)
 

гоша

Guest
ecto

почитайте, пожалуйста, [m]substr[/m], особенно второй пример
 
Сверху