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

Форум Регулярные Выражения

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

 

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

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

тема: Разбор файла.
 
 автор: Gandzas   (19.11.2006 в 07:53)   письмо автору
 
 

Есть текстовый файл (city.txt) с данными (текст, спецсимволы, цифры...)
В нем нужно разобрать данные следующим образом:

Найти 2 любых символа - поставить знак |
Найти 3 любых символа - поставить знак |
Найти 10 любых символа - поставить знак |
Найти 3 любых символа - поставить знак |
Найти 32 любых символа - поставить знак |
Найти 32 любых символа - поставить знак |
Найти 8 любых символа - поставить знак |
Найти 5 любых символа - поставить знак |
Найти 2 любых символа - поставить знак |
Найти 2 любых символа - поставить знак |
Найти 3 любых символа - поставить знак |
Найти 9 любых символа - поставить знак |
Найти 11 любых символа - поставить знак |
Найти 128 любых символа - поставить знак |
Найти 15 любых символа - поставить знак |
Найти 6 любых символа - поставить знак конец строки

И так по всему тексту. Можно результат вывести на экран, а еще лучше - перезаписать в этот же файл. У меня так ничего и не получилось....
Вот последняя попытка, но все равно ничего не выходит:

<?php
$city
=file('city.txt');
if (!
file_exists('city.txt')) echo 'такого файла нет'

if(
eregi("(.){2}(.){3}(.){10}(.){3}(.){32}(.){32}(.){8}(.){5}(.){2}(.){2}(.){3}
(.){9}(.){11}(.){128}(.){15}(.){6}"
,$city,$nov))
{
echo 
$nov[1].'|'.$nov[2].'|'.$nov[3].'|'.$nov[4].'|'.$nov[5].'|'.$nov[6].'|'.$nov[7].'|'.$nov[8].'|'
.$nov[9].'|'.$nov[10].'|'.$nov[11].'|'.$nov[12].'|'.$nov[13].'|'.$nov[14].'|'.$nov[15].'|'.$nov[16].'<br>'
}
else {echo 
"Ошибка";}
?>

   
 
 автор: kasmanaft   (19.11.2006 в 10:17)   письмо автору
 
   для: Gandzas   (19.11.2006 в 07:53)
 

$city, подставленный в функцию должон быть сторокой, а он у вас массив. И занесите {x} в скобки
попробуйте файл в строку собрать:

$city=file_get_contents('city.txt');

И вместо eregi используйте регистрозависимый вариант ereg, он работает немного быстрее, а разницы в результате тут не будет

пс: не лень было вот это "echo $nov[1].'|'.$nov[... " писать? :)
можно было циклом воспользоваться ...

пспс: я бы наверное вот так сделал:
<?php
$arr 
= array (23103323285223911128156);
$str = array();
$pos 0;

if (
file_exists('city.txt'))
{
   
$city=file_get_contents('city.txt');
   foreach (
$arr as $len)
   {
      
$str[] = substr($city$pos$len);
      
$pos += $len;
   }
   echo 
implode('|'$str)."<br>";
}
else echo 
'такого файла нет';
?>

   
 
 автор: Gandzas   (19.11.2006 в 15:38)   письмо автору
 
   для: kasmanaft   (19.11.2006 в 10:17)
 

Воспользовалась Вашим кодом. На экран выведена только первая строка :(

P.S. Мне не лень, я просто не знаю как. Вот и пытаюсь так, как могу...

   
 
 автор: Gandzas   (19.11.2006 в 21:18)   письмо автору
 
   для: Gandzas   (19.11.2006 в 15:38)
 

Все, нашла решение.


<?php 

$arr 
= array (2,3,10,3,32,32,8,5,5,2,2,3,9,11,128,15,6); 

if (
file_exists('city.txt')) 

   
$fp=fopen('city.txt',"r");
   
$fp2=fopen('sale.txt',"w");   
   while(
$city=fread($fp,276))
   {  
   
$pos=0;
    
$i=0;
   
$str = array(); 
       foreach (
$arr as $len
       { 
      
$str[$i++] = substr($city$pos$len); 
      
$pos += $len
       } 
      
fputs($fp2,implode('|'$str)."\r\n");
   } 
   
fclose($fp);
fclose($fp2);
   

?>


Сразу с записью в файл sale.txt

   
Rambler's Top100
вверх

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