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

Форум PHP

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

 

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

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

тема: Открыть файл прочитать его и отредактировать
 
 автор: pautina   (04.03.2012 в 13:07)   письмо автору
88.3 Кб
 
 

Здравствуйте мне нужно открыть текстовый файл, прочитать его и отредакрировать некоторые его строки по определённому условию.
Сам файл который нужно отредактировать представляет из себя запрос, он в прикреплённом файле.
Для файла использую такой код

<?php 
 
// Открываем файл для чтения
 
$fd=fopen("file.txt","r");
 
// Записываем файл
 
fwrite($fd,"Hello Word!");
 
// Закрываем файл
 
fclose($fd);
?>

В этом текстовом файле (файл это запрос) создается таблица, в эту таблицу вставляются строки
нужно по определённому условию удалить лишний html код
лишний html код начинается с $findme_one и заканчивается на $findme_dva (между $findme_one и $findme_dva - нужно всё удалить, удаление в файле делается для каждой вставляемой строки)
Для удаления использую этот участок кода

for ($i=0; $i<=10; $i++);
        {    
            $newstr_one=array(); 
            $findme_one='<P>Данный урок подготовлен для Вас командой сайта <A href=\"http://www.photoshop-master.ru\">http://www.photoshop-master.ru</A></P>';    
            $pos_findme_one=strpos($str, $findme_one);   
            $newstr_one[$i] = substr($str, 0, $pos_findme_one); // часть строки от 0 символа до позиции $findme_one   
            
            for ($n=0; $n<=10; $n++);
            {
                if ($i=$n)
                {
                $newstr_dva=array(); 
                $findme_dva="'),('$n'";   
                $pos_findme_dva=strpos($str, $findme_dva);   
                $newstr_dva[$i] = substr($str, $pos_findme_dva); // часть строки от символа                 $findme_dva до конца строки  
                
                $itog_str=$newstr_one[$i].$newstr_dva[$i];
                }
            }
        }

Подскажите как правильно объединить 2 участка кода, чтоб на выходе текстовый файл запроса был уже с удалёнными участками кода.

  Ответить  
 
 автор: cheops   (04.03.2012 в 14:18)   письмо автору
 
   для: pautina   (04.03.2012 в 13:07)
 

Сразу очень много вопросов в одной теме. Для того, чтобы открыть файл и прочитать его содержимое в переменную удобнее всего воспользоваться функцией file_get_contents(), потом можно снова записать содержимое переменной в файл при помощи функции file_put_contents().

  Ответить  
 
 автор: pautina   (04.03.2012 в 14:43)   письмо автору
 
   для: cheops   (04.03.2012 в 14:18)
 

Хотя здесь лучше этот участок кода использовать, применяют к автоматическому редактированию текстовых файлов

<?php
 
// Имя файла
 
$filename "file.txt";
 
// Открываем файл
 
$fd fopen($filename,"r");
 
// Читаем его содержимое в буфер
 
$buffer fread($fdfilesize($filename));
 
// Закрываем файл
 
fclose($fd);
 
// Редактируем содержимое переменной 
 // $buffer
 // ...
 // Записываем в файл новое содержимое
 
$fd fopen($filename,"w");
 
// Записываем содержимое строки $buffer
 
fwrite($fd$buffer);
 
// Закрываем файл
 
fclose($fd); 
?>

а как изменить код для функций
file_get_contents() чтобы открыть файл и прочитать его содержимое в переменную
и file_put_contents() чтобы записать содержимое переменной в файл

  Ответить  
 
 автор: pautina   (05.03.2012 в 06:18)   письмо автору
 
   для: pautina   (04.03.2012 в 14:43)
 

вот этот код подойдёт

<?php 
 
 header
('Content-type: text/plain; charset=utf-8'); 
  
 
$file 'file.txt'
 
// Open the file to get existing content 
 
$data file_get_contents($file); 
 
// Append a new person to the file 
 
$data.= ' dobavlenie koda\n'
 
// Write the contents back to the file 
 
file_put_contents($file$data); 
 
?>

Сам код рабочий позволяет добавить dobavlenie koda\n к концу текста в файле
Как мне этот код связать с этим участком

for ($i=0; $i<=10; $i++); 
        {     
            $newstr_one=array();  
            $findme_one='<P>Данный урок подготовлен для Вас командой сайта <A href=\"http://www.photoshop-master.ru\">http://www.photoshop-master.ru</A></P>';     
            $pos_findme_one=strpos($str, $findme_one);    
            $newstr_one[$i] = substr($str, 0, $pos_findme_one); // часть строки от 0 символа до позиции $findme_one    
             
            for ($n=0; $n<=10; $n++); 
            { 
                if ($i=$n) 
                { 
                $newstr_dva=array();  
                $findme_dva="'),('$n'";    
                $pos_findme_dva=strpos($str, $findme_dva);    
                $newstr_dva[$i] = substr($str, $pos_findme_dva); // часть строки от символа                 $findme_dva до конца строки   
                 
                $itog_str=$newstr_one[$i].$newstr_dva[$i]; 
                } 
            } 
        }

Тут изменения в текстовом запросе делаются

  Ответить  
 
 автор: Lotanaen   (05.03.2012 в 11:37)   письмо автору
 
   для: pautina   (05.03.2012 в 06:18)
 

А второй код у Вас рабочий? делает то что Вам нужно? внутренний цикл у Вас там лишний вроде бы

  Ответить  
 
 автор: pautina   (05.03.2012 в 11:42)   письмо автору
 
   для: Lotanaen   (05.03.2012 в 11:37)
 

Второй код должен работать ошибок в синтаксисе нет,
к сожалению не могу проверить его в строке из-за ошибок записи строки в двойные и одинарные кавычки,
поэтому 2-ой участок нужно сразу к файлу запроса применять,
как его вставить?

  Ответить  
 
 автор: Lotanaen   (05.03.2012 в 11:44)   письмо автору
 
   для: pautina   (05.03.2012 в 11:42)
 

вот здесь for ($i=0; $i<=10; $i++); точка с запятой не ставится
примерно так должен быть:

for ($i=0; $i<=10; $i++)
        {     
            $newstr_one=array();  
            $findme_one='<P>Данный урок подготовлен для Вас командой сайта <A href=\"http://www.photoshop-master.ru\">http://www.photoshop-master.ru</A></P>';     
            $pos_findme_one=strpos($str, $findme_one);    
            $newstr_one[$i] = substr($str, 0, $pos_findme_one); // часть строки от 0 символа до позиции $findme_one    
             
             
                $newstr_dva=array();  
                $findme_dva="'),('$n'";    
                $pos_findme_dva=strpos($str, $findme_dva);    
                $newstr_dva[$i] = substr($str, $pos_findme_dva); // часть строки от символа                 $findme_dva до конца строки   
                 
                $itog_str[$i]=$newstr_one[$i].$newstr_dva[$i]; 
                
        } 

  Ответить  
 
 автор: pautina   (05.03.2012 в 11:50)   письмо автору
 
   для: Lotanaen   (05.03.2012 в 11:44)
 

хорошо а вот эта строка
$findme_dva="'),('$n'"; правильно описана переменная? (Это конец текущей строки и вставка каждой новой строки)
и как этот участок к файлу применить?

  Ответить  
 
 автор: Lotanaen   (05.03.2012 в 11:54)   письмо автору
 
   для: pautina   (05.03.2012 в 11:50)
 

да, тогда $findme_dva="'),('$i'"; в предложенном мной варианте будет. синтаксически правильно вроде бы

  Ответить  
 
 автор: pautina   (05.03.2012 в 11:56)   письмо автору
 
   для: Lotanaen   (05.03.2012 в 11:54)
 

Как для файла наш участок кода применить?

  Ответить  
 
 автор: Lotanaen   (05.03.2012 в 11:56)   письмо автору
 
   для: pautina   (05.03.2012 в 11:50)
 

а как к файлу применить? ну это уже смотреть нужно что за файл. Вам же нужно построчно с файлом работать

  Ответить  
 
 автор: pautina   (05.03.2012 в 11:59)   письмо автору
 
   для: Lotanaen   (05.03.2012 в 11:56)
 

Да с каждой строкой файла нужно работать

<?php  
  
 header
('Content-type: text/plain; charset=utf-8');  
   
 
$file 'file.txt';  
 
// Open the file to get existing content  
 
$data file_get_contents($file);  
 
// Append a new person to the file  
 
$data.= ' dobavlenie koda\n';  
 
// Write the contents back to the file  
 
file_put_contents($file$data);  
  
?>

Этот участок просто как за основу брал, как его изменить?

  Ответить  
 
 автор: Lotanaen   (05.03.2012 в 12:45)   письмо автору
 
   для: pautina   (05.03.2012 в 11:59)
 

попробуйте так сделать:

<?php  
  
 header
('Content-type: text/plain; charset=utf-8');  
   
 
$file 'file.txt';  
 
// Open the file to get existing content 
 
$fp fopen$file,"r");
 
$fp2 fopen ('file2.txt',"w+");
 
$i=0;
 while (!
feof($fp) {
 
     
$data fgets($fp); 
    
$newstr_one="";;  
    
$findme_one='<P>Данный урок подготовлен для Вас командой сайта <A href=\"http://www.photoshop-master.ru\">http://www.photoshop-master.ru</A></P>';     
    
$pos_findme_one=strpos($data$findme_one);    
    if(
$pos_findme_one !== false) {
        
$i++;
        
$newstr_one substr($data0$pos_findme_one); // часть строки от 0 символа до позиции $findme_one    
             
        
$newstr_dva="";  
        
$findme_dva="'),('$i'";    
        
$pos_findme_dva=strpos($data$findme_dva);    
        if(
$pos_findme_dva !== false)
            
$newstr_dva substr($data$pos_findme_dva); // часть строки от символа                 $findme_dva до конца строки   
         
        
$itog_str=$newstr_one.$newstr_dva
    }
    else
        
$itog_str$data;
        
    
fwrite($fp2,$itog_str);
 } 
 
fclose($fp); 
 
fclose($fp2); 
  
?> 

  Ответить  
 
 автор: pautina   (05.03.2012 в 14:47)   письмо автору
 
   для: Lotanaen   (05.03.2012 в 12:45)
 

в строке
 while (!feof($fp)) {
закрывающаяся скобка нужна
файл file2.txt создаётся но строка в запросе не обрезается нужным образом
нужно удалить всё между $newstr_one и $newstr_dva
Код очень хороший, но что то ещё подкорректировать нужно.

  Ответить  
 
 автор: Lotanaen   (05.03.2012 в 15:48)   письмо автору
 
   для: pautina   (05.03.2012 в 14:47)
 

Да, скобочку пропустил, сорри. Ну поиграйтесь с переменной $i. Вы же лучше знаете когда ее увеличивать на единичку, а когда нет.
попробуйте
$findme_dva="'),('$i'";
заменить на
$findme_dva="'),'";

  Ответить  
 
 автор: pautina   (05.03.2012 в 17:12)   письмо автору
 
   для: Lotanaen   (05.03.2012 в 15:48)
 

может дело в переходе строки
...<DIV cl'),
('3','Уроки Photoshop','
...

правильно ли описано
$findme_dva="'),\n('$i',";    

так пробовал
$findme_dva="'),(''.$i.'',";    

Думаю дело в правильной записи $findme_dva
какие ещё есть варианты

  Ответить  
 
 автор: Lotanaen   (05.03.2012 в 17:43)   письмо автору
 
   для: pautina   (05.03.2012 в 17:12)
 

дело в том, что fgets($fp); считывает построчно из файла, т.е. до символа \n

  Ответить  
 
 автор: pautina   (05.03.2012 в 18:43)   письмо автору
 
   для: Lotanaen   (05.03.2012 в 17:43)
 

т.е. как только a файле есть преход строки, после он не читается,
Что тогда другое использовать можно?

  Ответить  
 
 автор: Lotanaen   (06.03.2012 в 09:35)   письмо автору
 
   для: pautina   (05.03.2012 в 18:43)
 

читается все в цикле, за один раз читается только одна строка, т.е. обработка идет построчно.

  Ответить  
 
 автор: pautina   (06.03.2012 в 10:09)   письмо автору
 
   для: Lotanaen   (06.03.2012 в 09:35)
 

В нашем коде, в цикле мы все строки файла проходим?

  Ответить  
 
 автор: Lotanaen   (06.03.2012 в 10:19)   письмо автору
 
   для: pautina   (06.03.2012 в 10:09)
 

а что по вашему обозначает цикл while (!feof($fp)) ? да все проходим

  Ответить  
 
 автор: pautina   (06.03.2012 в 11:00)   письмо автору
 
   для: Lotanaen   (06.03.2012 в 10:19)
 

Почему участки кода не удаляются,
в чём может быть дело?

  Ответить  
 
 автор: pautina   (07.03.2012 в 06:00)   письмо автору
 
   для: pautina   (06.03.2012 в 11:00)
 

Ни посоветуете что либо
 ...<DIV cl'), 
('3','Уроки Photoshop',' 
... 

Может дело в записи этой строки
правильно ли записана строка
 $findme_dva="'),('$i',";   

Контент по скрипту

<?php   
   
 header
('Content-type: text/plain; charset=utf-8');   
    
 
$file 'file.txt';   
 
// Open the file to get existing content  
 
$fp fopen$file,"r"); 
 
$fp2 fopen ('file2.txt',"w+"); 
 
$i=0
 while (!
feof($fp) ) { 
  
     
$data fgets($fp);  
    
$newstr_one="";;   
    
$findme_one='<P>Данный урок подготовлен для Вас командой сайта <A href=\"http://www.photoshop-master.ru\">http://www.photoshop-master.ru</A></P>';      
    
$pos_findme_one=strpos($data$findme_one);     
    if(
$pos_findme_one !== false) { 
        
$i++; 
        
$newstr_one substr($data0$pos_findme_one); // часть строки от 0 символа до позиции $findme_one     
              
        
$newstr_dva="";   
        
$findme_dva="'),('$i'";     
        
$pos_findme_dva=strpos($data$findme_dva);     
        if(
$pos_findme_dva !== false
            
$newstr_dva substr($data$pos_findme_dva); // часть строки от символа                 $findme_dva до конца строки    
          
        
$itog_str=$newstr_one.$newstr_dva;  
    } 
    else 
        
$itog_str$data
         
    
fwrite($fp2,$itog_str); 
 }  
 
fclose($fp);  
 
fclose($fp2);  
   
?> 

Не урезается

  Ответить  
 
 автор: Lotanaen   (07.03.2012 в 10:16)   письмо автору
 
   для: pautina   (07.03.2012 в 06:00)
 

Видимо у Вас в контенте есть символы конца строки

  Ответить  
 
 автор: pautina   (07.03.2012 в 10:53)   письмо автору
 
   для: Lotanaen   (07.03.2012 в 10:16)
 

Посмотрите прикреплённый файл в 1 сообщении, есть в нём симолы конца строки?
Если да как это исправить можно?

  Ответить  
 
 автор: Lotanaen   (07.03.2012 в 14:40)   письмо автору
 
   для: pautina   (07.03.2012 в 10:53)
 

Да там много таких символов оказывается - везде где есть перевод строки там и символ конца строки есть.

  Ответить  
 
 автор: pautina   (07.03.2012 в 15:03)   письмо автору
 
   для: Lotanaen   (07.03.2012 в 14:40)
 

Как быть в этом случае?
Как код можно подкорректировать?

  Ответить  
 
 автор: pautina   (08.03.2012 в 16:03)   письмо автору
 
   для: pautina   (07.03.2012 в 15:03)
 

Давайте попробуем разобраться почему удаление не идёт.
При помощи fgets() мы в цикле проходим по каждой строке файла, пока не встретится переход строки,
Исходный файл из которого делается удаление в прикреплённом файле 1-го сообщения.
Нужно удалить всё между $newstr_one и $newstr_dva
скрипт такой

<?php    
    
 header
('Content-type: text/plain; charset=utf-8');    
     
 
$file 'file.txt';    
 
// Open the file to get existing content   
 
$fp fopen$file,"r");  
 
$fp2 fopen ('file2.txt',"w+");  
 
$i=0;  
 while (!
feof($fp) ) {  
   
     
$data fgets($fp);   
    
$newstr_one="";    
    
$findme_one='<P>Данный урок подготовлен для Вас командой сайта <A href=\"http://www.photoshop-master.ru\">http://www.photoshop-master.ru</A></P>';       
    
$pos_findme_one=strpos($data$findme_one);      
    if(
$pos_findme_one !== false) {  
        
$i++;  
        
$newstr_one substr($data0$pos_findme_one); // часть строки от 0 символа до позиции $findme_one      
               
        
$newstr_dva="";    
        
$findme_dva="'),('$i'";      
        
$pos_findme_dva=strpos($data$findme_dva);      
        if(
$pos_findme_dva !== false)  
            
$newstr_dva substr($data$pos_findme_dva); // часть строки от символа                 $findme_dva до конца строки     
           
        
$itog_str=$newstr_one.$newstr_dva;   
    }  
    else  
        
$itog_str$data;  
          
    
fwrite($fp2,$itog_str);  
 }   
 
fclose($fp);   
 
fclose($fp2);   
    
?> 

Пробовал кодировку менять на Кирилица windows, чтоб в файле найти положение $findme_one где русский текст присутствует (Данный урок подготовлен для Вас...)
В исходном файле где
<DIV cl'),
('3','Уроки Photoshop','Рубрика: Эффекты',
помещал эти 2 строки на 1 строку,
всё равно удаление не идёт.

  Ответить  
 
 автор: pautina   (09.03.2012 в 18:27)   письмо автору
 
   для: pautina   (08.03.2012 в 16:03)
 

Нет ли у Вас каких либо предложений или идей по исправлению ошибки?

  Ответить  
 
 автор: pautina   (11.03.2012 в 05:57)   письмо автору
 
   для: pautina   (09.03.2012 в 18:27)
 

Дайте какий либо совет или вариант решения, что то ведь можно сделать?

  Ответить  
Rambler's Top100
вверх

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