[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Работа с куском текста
Bratishka
Добрый вечер, есть файл, состящий из блоков текста, которые разделенный цифрами 112233 Нужно взять блок текста из файла, произвести манипуляции и положить назад.
Написал такой код
$file = file_get_contents ("C:\file.txt");
preg_match ('/text([\w\W]*?)112233/i', $file, $block);
$block0 = $block[0];
$re = str_replace ('text', 'tetetext', $block0);
str_replace ($block0, $re, $file);

Но не работает. Подскажите пожалуйста что я сделал не так



Спустя 16 минут, 12 секунд (10.06.2012 - 18:36) GET написал(а):
разбей explode вытащенный текст по своим цифрам а потом рабгтай с этим массивом через foreach. Пишу с мобильника поэтому код написать не могу

Спустя 1 час, 46 минут, 24 секунды (10.06.2012 - 20:23) Bratishka написал(а):
Спасибо, с помощь explode разбил. Теперь этот массив пропарсить надо. А это у меня не получалось и раньше через foreach и я хз как это сделать smile.gif

Спустя 8 часов, 37 минут, 15 секунд (11.06.2012 - 05:00) GET написал(а):
$file = file_get_contents ("C:/file.txt");
$arr = explode('112233',$file);
foreach($arr as $val)
{
echo $val.'<br>';// Это куски текста разбитые цифрами
}

Спустя 8 часов, 13 минут, 51 секунда (11.06.2012 - 13:14) Bratishka написал(а):
А как мне теперь эти куски все обработать регулярным выражением?

Спустя 3 минуты, 11 секунд (11.06.2012 - 13:17) GET написал(а):
Bratishka

А что нужно?
Цитата
foreach($arr as $val)
{
        echo $val.'<br>';// Это куски текста разбитые цифрами
}


$val - это и есть твой кусок...foreach их перебирает по порядку, что хочешь с ними то и делай.

Спустя 11 минут, 3 секунды (11.06.2012 - 13:28) Bratishka написал(а):
т.е. $val это фактически как строка и оно может обработаться preg_match
у меня не получалось ( или я не так что-то делал

Спустя 13 минут, 13 секунд (11.06.2012 - 13:41) GET написал(а):
Цитата
фактически как строка


Да, ты разбил свой текст на несколько фрагментов каждый из которых сам является текстом, т.е. строку разбил на строки и разбил их по '112233'. Можешь их теперь обрабатывать, как хочешь. Только не забывай, что это не просто строки, а массив из строк, поэтому нужна foreach.

Можно обойтись и без foreach, если например ты точно знаешь номер фрагмента, например echo $arr[0]; выведет на экран первый фрагмент.

Спустя 1 час, 3 минуты, 52 секунды (11.06.2012 - 14:45) Bratishka написал(а):
foreach($arr as $val)
{
echo $val.'<br>';// Это куски текста разбитые цифрами
}



Такой код не работает :(
Ругается на array to string conversation в этой строке echo $val.'<br>';

Спустя 9 минут, 33 секунды (11.06.2012 - 14:55) GET написал(а):
$file='sdsddd1sdsd1xccdedw1sascasdcq1';
$arr = explode('1',$file);
foreach($arr as $val)
{
echo $val.'<br>';// Это куски текста разбитые цифрами
}


только что проверил работает. Значит массив у тебя пустой.

Вот так сделай:

$file = file_get_contents ("C:/file.txt");
$arr = explode('112233',$file);
if (count($arr )>0)
{
foreach($arr as $val)
{
echo $val.'<br>';// Это куски текста разбитые цифрами
}
}

else echo 'У меня же массив пустой!';

Спустя 4 часа, 9 минут, 52 секунды (11.06.2012 - 19:04) Bratishka написал(а):
A.B.C.
спасибо, вроде работает. Выводит оба блока текста, только вот цифр нету. Можно как-нибудь сделать чтобы цифры не выкидывались при explode?

Спустя 51 минута, 32 секунды (11.06.2012 - 19:56) Bratishka написал(а):
Сделал свой код, на основе Вашего - не работает, не парсит. Пишет у preg_match строкой должен быть второй параметр

$filename = "Название";

$testtu = многомного текста;


$testt = str_replace("\\","",$testtu);
preg_match_all ("/{'id':(.*?)<\/a>','name_text/i", $testt, $textblock);
if (count($textblock)>0)
{
foreach ($textblock as $value){
preg_match("/<a href='\/(.*?)' target='_blank'>".$filename."/i", $value, $tblink);
print_r ($tblink);}
}


массив не пустой, регулярка норм строку на части бьет, получается массив
Подскажите пожалуйста что не так (

Спустя 57 минут, 22 секунды (11.06.2012 - 20:53) walerus написал(а):
preg_match_all ("/{'id':(.*?)<\/a>','name_text/i", $testt, $textblock);

после этого ты получишь массив, а не строку

сделай
print_r($textblock);
все станет понятно и проверка будет иначе
if (!emty( $textblock[1] ) )

Спустя 8 минут, 15 секунд (11.06.2012 - 21:02) Bratishka написал(а):
walerus
а как элементы массива сделать строкой чтобы по каждому пройтись preg_match ?

Спустя 2 часа, 3 минуты, 41 секунда (11.06.2012 - 23:05) FatCat написал(а):
$file = 'Первый кусок текста112233Втророй кусок текста112233Третий кусок текста';
$file = explode('112233',$file); // Разбиваем на массив
foreach($file as $k=>$v) // цикл по элементам массива
{
$v = str_replace("кусок","кусочек",$v);
// ... и другие манипуляции с текстом в элементе массива

$file[$k] = $v; // Сохраняем результаты работы с текстом в массиве.
}
$file = implode('112233',$file); // Собираем строку из массива
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.