Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Переносы через определенное количество символов

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Neldmit
Отправлено: 19 Сентября, 2012 - 11:18:13
Post Id


Новичок


Покинул форум
Сообщений всего: 25
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




Здравствуйте, есть много текстовых файлов, в которых много строк длиной ~1000 символов, нужен такой скрипт, который бы во всех файлах пробежался по строкам и вставил перенос (\r\n) через 70 символов в строке.
 
 Top
Stivir
Отправлено: 20 Сентября, 2012 - 16:33:30
Post Id


Частый гость


Покинул форум
Сообщений всего: 128
Дата рег-ции: Май 2012  


Помог: 2 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. $dir = "tmp/";//путь к папке с файлами
  3. $arrFiles = scandir($dir);
  4. if($arrFiles)
  5. {
  6.     foreach($arrFiles as $file)
  7.     {
  8.         $stringContent = @file_get_contents($dir.$file);
  9.         $newString = chunk_split($stringContent, 70, "\r\n");
  10.         @file_put_contents($dir.$file, $newString);
  11.     }
  12. }  
  13. else
  14. {
  15.     print "Проверте указанный путь к файлам";
  16. }
  17.  


поставил заглушки там где @file_get_contents и @file_put_contents из-за Warning
failed to open stream: Permission denied in D:\
не разобрался почему они появляются, но и без заглушек все работает.)
 
 Top
Мелкий Супермодератор
Отправлено: 20 Сентября, 2012 - 16:40:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Stivir пишет:
failed to open stream

Stivir пишет:
все работает

Взаимоисключающие параграфы.


-----
PostgreSQL DBA
 
 Top
DelphinPRO
Отправлено: 20 Сентября, 2012 - 16:41:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Stivir пишет:
не разобрался почему они появляются, но и без заглушек все работает.)

нужно исключить из массива файлов каталоги. Их нельзя прочитать в переменнуюю

или проверять файл перед чтением функцией is_file()
т.е.
PHP:
скопировать код в буфер обмена
  1. if (is_file($dir.$file)) {
  2.   $stringContent = file_get_contents($dir.$file);
  3.   $newString = chunk_split($stringContent, 70, "\r\n");
  4.   file_put_contents($dir.$file, $newString);
  5. }

(Добавление)
кстати, это проверка
if($arrFiles)
тоже бессмысленна, т.к. возвращаемый массив, как минимум будет содержать элемент '.' - текущий каталог.
ошибка возможна в случае, если $dir не является каталогом, поэтому проверку разумнее делать выше

итоговый код, с учетом вышеизложенных замечаний:

PHP:
скопировать код в буфер обмена
  1. $dir = "tmp/";//путь к папке с файлами
  2. if (is_dir($dir)){
  3.   $arrFiles = scandir($dir);
  4.   foreach($arrFiles as $file){
  5.     if (is_file($dir.$file)) {
  6.       $stringContent = file_get_contents($dir.$file);
  7.       $newString = chunk_split($stringContent, 70, "\r\n");
  8.       file_put_contents($dir.$file, $newString);
  9.     }
  10.   }
  11. }


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Stivir
Отправлено: 20 Сентября, 2012 - 16:53:55
Post Id


Частый гость


Покинул форум
Сообщений всего: 128
Дата рег-ции: Май 2012  


Помог: 2 раз(а)




DelphinPRO, благодарю Улыбка
 
 Top
Neldmit
Отправлено: 30 Декабря, 2012 - 10:07:34
Post Id


Новичок


Покинул форум
Сообщений всего: 25
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




Stivir пишет:

PHP:
скопировать код в буфер обмена
  1.  
  2. $dir = "tmp/";//путь к папке с файлами
  3. $arrFiles = scandir($dir);
  4. if($arrFiles)
  5. {
  6.     foreach($arrFiles as $file)
  7.     {
  8.         $stringContent = @file_get_contents($dir.$file);
  9.         $newString = chunk_split($stringContent, 70, "\r\n");
  10.         @file_put_contents($dir.$file, $newString);
  11.     }
  12. }  
  13. else
  14. {
  15.     print "Проверте указанный путь к файлам";
  16. }
  17.  


поставил заглушки там где @file_get_contents и @file_put_contents из-за Warning
failed to open stream: Permission denied in D:\
не разобрался почему они появляются, но и без заглушек все работает.)



Cпасибо, но этот вариант мне не подошел по причине того, что разрыв происходит строго через 70 символов, таким образом разрывается много слов и появляется лишний пробел. Но чисто случайно наткнулся на функцию wordwrap(). Оказывается не надо ничего городить, есть уже такая функция. Самое интересное, что она по умолчанию не режет слова.

(Отредактировано автором: 30 Декабря, 2012 - 10:09:13)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB