|
 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 участка кода, чтоб на выходе текстовый файл запроса был уже с удалёнными участками кода. | |
|
|
|
|
|
|
|
для: pautina
(04.03.2012 в 13:07)
| | Сразу очень много вопросов в одной теме. Для того, чтобы открыть файл и прочитать его содержимое в переменную удобнее всего воспользоваться функцией file_get_contents(), потом можно снова записать содержимое переменной в файл при помощи функции file_put_contents(). | |
|
|
|
|
|
|
|
для: cheops
(04.03.2012 в 14:18)
| | Хотя здесь лучше этот участок кода использовать, применяют к автоматическому редактированию текстовых файлов
<?php
// Имя файла
$filename = "file.txt";
// Открываем файл
$fd = fopen($filename,"r");
// Читаем его содержимое в буфер
$buffer = fread($fd, filesize($filename));
// Закрываем файл
fclose($fd);
// Редактируем содержимое переменной
// $buffer
// ...
// Записываем в файл новое содержимое
$fd = fopen($filename,"w");
// Записываем содержимое строки $buffer
fwrite($fd, $buffer);
// Закрываем файл
fclose($fd);
?>
|
а как изменить код для функций
file_get_contents() чтобы открыть файл и прочитать его содержимое в переменную
и file_put_contents() чтобы записать содержимое переменной в файл | |
|
|
|
|
|
|
|
для: 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];
}
}
}
|
Тут изменения в текстовом запросе делаются | |
|
|
|
|
|
|
|
для: pautina
(05.03.2012 в 06:18)
| | А второй код у Вас рабочий? делает то что Вам нужно? внутренний цикл у Вас там лишний вроде бы | |
|
|
|
|
|
|
|
для: Lotanaen
(05.03.2012 в 11:37)
| | Второй код должен работать ошибок в синтаксисе нет,
к сожалению не могу проверить его в строке из-за ошибок записи строки в двойные и одинарные кавычки,
поэтому 2-ой участок нужно сразу к файлу запроса применять,
как его вставить? | |
|
|
|
|
|
|
|
для: 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];
}
|
| |
|
|
|
|
|
|
|
для: Lotanaen
(05.03.2012 в 11:44)
| | хорошо а вот эта строка
$findme_dva="'),('$n'"; правильно описана переменная? (Это конец текущей строки и вставка каждой новой строки)
и как этот участок к файлу применить? | |
|
|
|
|
|
|
|
для: pautina
(05.03.2012 в 11:50)
| | да, тогда $findme_dva="'),('$i'"; в предложенном мной варианте будет. синтаксически правильно вроде бы | |
|
|
|
|
|
|
|
для: Lotanaen
(05.03.2012 в 11:54)
| | Как для файла наш участок кода применить? | |
|
|
|
|
|
|
|
для: pautina
(05.03.2012 в 11:50)
| | а как к файлу применить? ну это уже смотреть нужно что за файл. Вам же нужно построчно с файлом работать | |
|
|
|
|
|
|
|
для: 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);
?>
|
Этот участок просто как за основу брал, как его изменить? | |
|
|
|
|
|
|
|
для: 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($data, 0, $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
(05.03.2012 в 12:45)
| | в строке
закрывающаяся скобка нужна
файл file2.txt создаётся но строка в запросе не обрезается нужным образом
нужно удалить всё между $newstr_one и $newstr_dva
Код очень хороший, но что то ещё подкорректировать нужно. | |
|
|
|
|
|
|
|
для: pautina
(05.03.2012 в 14:47)
| | Да, скобочку пропустил, сорри. Ну поиграйтесь с переменной $i. Вы же лучше знаете когда ее увеличивать на единичку, а когда нет.
попробуйте заменить на | |
|
|
|
|
|
|
|
для: Lotanaen
(05.03.2012 в 15:48)
| | может дело в переходе строки
...<DIV cl'),
('3','Уроки Photoshop','
...
|
правильно ли описано
$findme_dva="'),\n('$i',";
|
так пробовал
$findme_dva="'),(''.$i.'',";
|
Думаю дело в правильной записи $findme_dva
какие ещё есть варианты | |
|
|
|
|
|
|
|
для: pautina
(05.03.2012 в 17:12)
| | дело в том, что fgets($fp); считывает построчно из файла, т.е. до символа \n | |
|
|
|
|
|
|
|
для: Lotanaen
(05.03.2012 в 17:43)
| | т.е. как только a файле есть преход строки, после он не читается,
Что тогда другое использовать можно? | |
|
|
|
|
|
|
|
для: pautina
(05.03.2012 в 18:43)
| | читается все в цикле, за один раз читается только одна строка, т.е. обработка идет построчно. | |
|
|
|
|
|
|
|
для: Lotanaen
(06.03.2012 в 09:35)
| | В нашем коде, в цикле мы все строки файла проходим? | |
|
|
|
|
|
|
|
для: pautina
(06.03.2012 в 10:09)
| | а что по вашему обозначает цикл while (!feof($fp)) ? да все проходим | |
|
|
|
|
|
|
|
для: Lotanaen
(06.03.2012 в 10:19)
| | Почему участки кода не удаляются,
в чём может быть дело? | |
|
|
|
|
|
|
|
для: pautina
(06.03.2012 в 11:00)
| | Ни посоветуете что либо
...<DIV cl'),
('3','Уроки Photoshop','
...
|
Может дело в записи этой строки
правильно ли записана строка
Контент по скрипту
<?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($data, 0, $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
(07.03.2012 в 06:00)
| | Видимо у Вас в контенте есть символы конца строки | |
|
|
|
|
|
|
|
для: Lotanaen
(07.03.2012 в 10:16)
| | Посмотрите прикреплённый файл в 1 сообщении, есть в нём симолы конца строки?
Если да как это исправить можно? | |
|
|
|
|
|
|
|
для: pautina
(07.03.2012 в 10:53)
| | Да там много таких символов оказывается - везде где есть перевод строки там и символ конца строки есть. | |
|
|
|
|
|
|
|
для: Lotanaen
(07.03.2012 в 14:40)
| | Как быть в этом случае?
Как код можно подкорректировать? | |
|
|
|
|
|
|
|
для: 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($data, 0, $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
(08.03.2012 в 16:03)
| | Нет ли у Вас каких либо предложений или идей по исправлению ошибки? | |
|
|
|
|
|
|
|
для: pautina
(09.03.2012 в 18:27)
| | Дайте какий либо совет или вариант решения, что то ведь можно сделать? | |
|
|
|