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

Форум PHP

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

 

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

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

тема: Поиск строки в файле
 
 автор: Footer   (28.07.2006 в 11:31)   письмо автору
 
 

Так в чём здесь дело? Люди, Хелп!!!!! Ни одного письма не отправить - ни с mail ни с yandex!

Такой вопрос: нужно осуществить поиск строки в файле. Я его сначала читаю функцией file, но потом ничего не получается. В файле данные хранятся следующим образом:
текст1|текст2|текст3
Мне нужно найти в массиве строк сначала строку, которая начинается с текст1. То есть строка должна искаться по первому записанному слову, то есть до символа |. Перепробовал все функции которые знал, чо-то не получается. Помогите, плз.

   
 
 автор: Axxil   (28.07.2006 в 11:46)   письмо автору
 
   для: Footer   (28.07.2006 в 11:31)
 


<?
$arr 
file('text.txt');
$needword 'Слово1'//Искомое слово
foreach($arr as $key=>$string){
  
$wordarr explode("|",$string); // Разбиваем каждую строку файла
  
if($needword == trim(array_shift($wordarr))) echo "Слово ".$needword." найдено в строке ".$key;
}
?>

   
 
 автор: Footer   (28.07.2006 в 12:57)   письмо автору
 
   для: Axxil   (28.07.2006 в 11:46)
 

Ага, спасибо, попробовал - работает. Но ещё такая проблема: мне нужно найти строку где есть Текст1. Это нашлось. Теперь мне нужно вывести на экран последний элемент этой самой строки, то есть Текст3. Как это сделать?

   
 
 автор: Axxil   (28.07.2006 в 13:39)   письмо автору
 
   для: Footer   (28.07.2006 в 12:57)
 

Аналогично :)

<? 
$arr 
file('text.txt'); 
$needword 'Слово1'//Искомое слово 
foreach($arr as $key=>$string){ 
  
$wordarr explode("|",$string); // Разбиваем каждую строку файла 
  
if($needword == trim(array_shift($wordarr))) echo array_pop($wordarr); 

?> 

   
 
 автор: Footer   (28.07.2006 в 13:53)   письмо автору
 
   для: Axxil   (28.07.2006 в 13:39)
 

Уфф, всё работает! Axxil, спасибо огромнейшее!

   
 
 автор: Footer   (29.07.2006 в 12:13)   письмо автору
 
   для: Axxil   (28.07.2006 в 13:39)
 

И опять насчёт строк. Нужно сделать нечто похожее на предыдущй вопрос, то есть нужно найти строку, начинающуюся с Текст1. Но теперь мне её нужно всю полностью удалить. Как это сделать?

   
 
 автор: Giga   (23.08.2006 в 12:08)   письмо автору
 
   для: Axxil   (28.07.2006 в 13:39)
 

Похожая ситуация.. Что бы не заводить дублирующей темы не подскажите? Есть готовый базовый файл с записью содержимого вида
ключевое слово 1
описание ключевого слова 1
ключевое слово 2
описание ключевого слова 2

и так далее всего около 3 тыс строк на каждое слово по две строки, 0 -слово, 1 -описание, 2 -слово, 3 -описание. С поиском в массиве я разобрался с помощью strpos(), но при этом мне выдает результат поиска на всех строчках. Как отсортировать массив для поиска на строчках с ключевыми словами 0, 2, 4, ... Или как другим путем изобразить сам поиск на этих строчках. Понимаю что решение простое, оно крутиться где то рядом но эксперименты пока ни к чему не привели..

   
 
 автор: Giga   (23.08.2006 в 17:27)   письмо автору
 
   для: Giga   (23.08.2006 в 12:08)
 

Спасибо, справился сам через пень-колоду, главное работает. Может тогда хотя бы скажете как ввести в этот цикл поиска отрицательные результа? Моя попытка через else{ echo "слово не найдено"; } привела к тому что "слово не найдено" продублировало в количестве = количеству строк где не найдено. Вывести из цикла это тоже не получилось, ведь результат поиска получаем именно в нем..

   
 
 автор: cheops   (24.08.2006 в 02:11)   письмо автору
 
   для: Giga   (23.08.2006 в 17:27)
 

Обычно поступают следующим образом
<?php
  $result 
false;
  for(...)
  {
    if(
что-то найдено)
    {
      
// ....
      
$result true;
      
// ....
    
}
  }
  if(!
$result) exit("Ничего не найдено");
?>

   
 
 автор: Footer   (28.07.2006 в 13:41)   письмо автору
 
   для: Axxil   (28.07.2006 в 11:46)
 

Оказалось всё просто! Ещё раз спасибо!

   
 
 автор: Footer   (29.07.2006 в 12:13)   письмо автору
 
   для: Footer   (28.07.2006 в 13:41)
 

И опять насчёт строк. Нужно сделать нечто похожее на предыдущй вопрос, то есть нужно найти строку, начинающуюся с Текст1. Но теперь мне её нужно всю полностью удалить. Как это сделать?

   
 
 автор: Axxil   (29.07.2006 в 12:34)   письмо автору
 
   для: Footer   (29.07.2006 в 12:13)
 

Можно так:

<?  
$arr 
file('text.txt');  
$needword 'Слово1'//Искомое слово  
$handler fopen('text.txt','w+');
foreach(
$arr as $key=>$string){  
  
$wordarr explode("|",$string); // Разбиваем каждую строку файла  
  
if($needword == trim(array_shift($wordarr))) continue;
  
fwrite($handler,$string);  
}  
fclose($handler);
?>  

   
 
 автор: Footer   (30.07.2006 в 12:17)   письмо автору
 
   для: Axxil   (29.07.2006 в 12:34)
 

Axxil, ещё раз спасибо! Теперь всё заработало как часы!

   
 
 автор: Webmaster-X   (20.08.2006 в 01:17)   письмо автору
 
   для: Footer   (30.07.2006 в 12:17)
 

подскажите пожалуйста как проверить или есть в текстовом документе (тоесть в базе) IP посетителя и узнать строчку, если есть такова с учётом того что первое значение записывается как щётчик этого посетителя (тоесть может меняться)
пример текстового документа (тоесть базы)

1::215.92.127.23::
87::215.72.127.23::
5::125.72.127.23::
566:135.72.127.23::
5::104.72.203.23::

   
 
 автор: Webmaster-X   (20.08.2006 в 01:24)   письмо автору
 
   для: Footer   (30.07.2006 в 12:17)
 

если не затруднит подскажте ещё как можна перезаписать эту строчку

   
 
 автор: Webmaster-X   (20.08.2006 в 14:23)   письмо автору
 
   для: Webmaster-X   (20.08.2006 в 01:24)
 

что ничем нельзя помочь?

   
 
 автор: Webmaster-X   (20.08.2006 в 23:42)   письмо автору
 
   для: Webmaster-X   (20.08.2006 в 14:23)
 

Мучился масился и намучал.
написал код щётчика, прошу проверить, так как писал примитивно возможно ктото подправит или наставит на путь истиный.

<?
         
if (!file_exists("./base/counter/user.dat"))
          {
                         
touch("./base/counter/user.dat");
                         
chmod("./base/counter/user.dat",0660);
                         
$l fopen("./base/counter/user.dat","w");
                         
$t "";
                         
fputs($l,$t);
                         
fclose($l);
          }

           
$f=file("./base/counter/user.dat");
           
$faq_file count $f );
           
$new_ip $_SERVER['REMOTE_ADDR'];
           
$needword $new_ip;

           foreach ( 
$f as $key => $string )
           {
                        
$wordarr explode("\n",$string); // Разбиваем каждую строку файла
                        
$array trim(array_shift($wordarr));

                        
$exit explode("::",$array); //Розбиваем строку на значения
                        
$counter $exit[0];
                        
$ip $exit[1];

                        if ( 
$needword == $ip )
                        {
                                   
$ip_yes yes;
                                   
$key+=1;
                                   
$NumLines $key;
                               
//    echo "Слово ".$needword." найдено в строке ".$key."<br>";
                        
}
           }
           if ( 
$ip_yes == "yes" )
           {
                          
$NumLines--;
                          
$File=@file("./base/counter/user.dat");
                          list(
$rcount,$rip)=split("::",$File[$NumLines]);

                          
$rcount+= "1";

                          
$File[$NumLines]="$rcount::$rip::";
                          
$file="";
                          foreach(
$File as $val$file.=trim($val)."\r\n";
                          
$_file=fopen("./base/counter/user.dat""w+");
                          
fwrite($_file"$file");
                          
fclose($_file);
          }

          
$string=file_get_contents("./base/counter/user.dat");
          if (!
eregi $new_ip,$string ) )
          {
                          
$fp = @fopen("./base/counter/user.dat","a");
                          
$count 1;
                          
$info $count."::".$new_ip."::\r\n";
                          
fputs($fp,$info);
                          
fclose($fp);
          }
?>

если можна написать более компактней подскажите как

   
Rambler's Top100
вверх

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