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 :: Работа с массивом File

 PHP.SU

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


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

> Без описания
sadamss
Отправлено: 22 Сентября, 2015 - 12:01:15
Post Id


Новичок


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


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




Добрый день! Помогите пожалуйста советом, а то сил больше нет искать и спросить не у кого.

надо с файла test.txt взять новость и положить ее в другой документ test2.txt, но проблема в том, что я не могу правильно ее обрезать от ключа news01 до ключа end01(я могу обозначать новость специальными словами, так как обрезать по тексту это наверное полная жесть). Новости бывают разной длины и разной последовательности.
Это пример, на что хватило ума, больше не нашел.

PHP:
скопировать код в буфер обмена
  1. $parts = array( 'news01', 'news02', 'end01', 'end02');
  2.  
  3. $news = file("test.txt");
  4.  
  5. for($i = 0; $i <= count($news); $i++)
  6. {
  7.     for ($j = 0; $j <= count($parts); $j++)
  8.    
  9.  
  10.  
  11.     if (strripos($news[$i], $parts[$j]))
  12.   {
  13.     echo "Строка <b>{$i}</b> : " . htmlspecialchars($news[$i]) . "<br />\n";
  14.   }
  15. }


выводит на экран

CODE (html):
скопировать код в буфер обмена
  1. Строка 3590 : lang=UK style='mso-ansi-language:UK'>news01<span style='mso-no-proof:
  2. Строка 3643 : style='mso-no-proof:yes'>news02<o:p></o:p></span></p>
  3. Строка 3622 : end01
  4. Строка 3688 : end02


Сама новость, что я бы хотел ее видеть из огромного текста


style='mso-ansi-language:UK;mso-no-proof:yes'>news01<o></o></span></p>
</td>
<td width=214 valign=top style='width:160.2pt;border:solid windowtext 1.0pt;
border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
<p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
style='font-size:24.0pt'>Акция<o></o></span></b></p>
</td>
<td width=664 valign=top style='width:497.8pt;border:solid windowtext 1.0pt;
border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:
solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
<p class=MsoNormal align=right style='text-align:right'><span class=SpellE><span
lang=UK style='font-size:24.0pt;mso-ansi-language:UK'>сегодня</span></span><span
lang=UK style='font-size:24.0pt;mso-ansi-language:UK'> 21 09 2015 року<o></o></span></p>
<p class=MsoNormal><span style='font-size:24.0pt'>&quot;Мы будем работать
с&nbsp;новым греческим правительством, разумеется, это предложение
сохраняется с&nbsp;нашей стороны&quot;,&nbsp;— сказал <span class=SpellE>Зайберт</span>
журналистам в&nbsp;Берлине в&nbsp;понедельник. По его словам, комментировать
что-то конкретное пока рано, необходимо вначале дождаться формирования этого
нового правительства. Что же касается результатов воскресных выборов, то,
по&nbsp;словам <span class=SpellE>Зайберта</span>, правительство ФРГ обычно
их не&nbsp;комментирует. end01<o></o></span></p>

И вложить этот текст в файл test2.txt между ключами news01 end01. HTML теги остаются.
Спасибо всем кто поможет, хоть каким либо советом!
 
 Top
andrewkard
Отправлено: 22 Сентября, 2015 - 12:52:02
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


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




sadamss
А с какой целью вы ложите новости в файл?
 
 Top
sadamss
Отправлено: 22 Сентября, 2015 - 12:59:39
Post Id


Новичок


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


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




andrewkard пишет:
sadamss
А с какой целью вы ложите новости в файл?



она будет потом выводиться экран, поддержка HTML нужна для корректного отображения текста (выделения, косая, шрифт, размер шрифта).
Задачка стоит в том, что документа ворд конвертирую в HTML и с таблички сообщений надо вырезать отдельные новости, потом внести их файл, что отвечает за вывод на экран

(Отредактировано автором: 22 Сентября, 2015 - 12:59:59)

 
 Top
andrewkard
Отправлено: 22 Сентября, 2015 - 13:13:14
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


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




sadamss пишет:
надо вырезать отдельные новости, потом внести их файл

может есть смысл записать их в БД?
 
 Top
sadamss
Отправлено: 22 Сентября, 2015 - 13:36:34
Post Id


Новичок


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


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




andrewkard пишет:
sadamss пишет:
надо вырезать отдельные новости, потом внести их файл

может есть смысл записать их в БД?


С БД я еще незнаком, но хочу начать обучение, пока думал как временное решение вопроса.

Вот попытаюсь более подробно объяснить:

Есть файл в worde Test.doc. В этот файл записываем с интернета новости в табличку. Новости идут с значением (начало news01 и конец новости end01 и так далее, их много будет). Далее Test.doc мы конвертируем (сохранить как в HTML) и получаем уже наши новости с поддержкой HTML файл Test.htm. Потом, я, хотел бы взять эти новости с файла Test.htm от news01 до end01 и news02 до end02 и так далее (я придумал эти названия для того, чтобы обрезать новость от лишнего хлама, что создается после конвертации файла Test.doc в Test.htm), поместить их в специальную форму в такие же места news01 и end01 (можно другие названия), потом этот файл будет отображать эти новости через браузер в красивом виде. Каждая новость будет в специальной форме и красиво отображаться. Сейчас я это делаю в ручную, а хотелось бы ускорить этот процесс. Спасибо, что помогаете!
(Добавление)
sadamss пишет:
andrewkard пишет:
sadamss пишет:
надо вырезать отдельные новости, потом внести их файл

может есть смысл записать их в БД?


С БД я еще незнаком, но хочу начать обучение, пока думал как временное решение вопроса.

Вот попытаюсь более подробно объяснить:

Есть файл в worde Test.doc. В этот файл записываем с интернета новости в табличку. Новости идут с значением (начало news01 и конец новости end01 и так далее, их много будет). Далее Test.doc мы конвертируем (сохранить как в HTML) и получаем уже наши новости с поддержкой HTML файл Test.htm. Потом, я, хотел бы взять эти новости с файла Test.htm от news01 до end01 и news02 до end02 и так далее (я придумал эти названия для того, чтобы обрезать новость от лишнего хлама, что создается после конвертации файла Test.doc в Test.htm), поместить их в специальную форму в такие же места news01 и end01 (можно другие названия), потом этот файл будет отображать эти новости через браузер в красивом виде. Каждая новость будет в специальной форме и красиво отображаться. Сейчас я это делаю в ручную, а хотелось бы ускорить этот процесс. Спасибо, что помогаете!


Вот немного подсказали вариант, но докрутить не получается

PHP:
скопировать код в буфер обмена
  1. $result = array ();
  2.  
  3. $parts = array( 'news01', 'news02');
  4.  
  5. $end = array ('end01', 'end02');
  6.  
  7. $news = file("test.htm");
  8.  
  9. for($i = 0; $i <= count($news); $i++)
  10. {
  11.         for ($j = 0; $j <= 4; $j++)
  12.         {
  13.         if (strripos($news[$i], $parts[$j]))
  14.                 do {
  15.                         $result [$j] = $news [i + 1];
  16.                         }
  17.                         while $result($news[$i], $end[$j]);
  18.         }
  19. }
  20.         echo "<pre>";
  21.         var_dump ($result);
  22.         echo "</pre>";
 
 Top
andrewkard
Отправлено: 22 Сентября, 2015 - 13:44:12
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


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




Если уж не хотите в БД, храните каждую новость в отдельном файле.
 
 Top
sadamss
Отправлено: 22 Сентября, 2015 - 13:59:54
Post Id


Новичок


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


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




andrewkard пишет:
Если уж не хотите в БД, храните каждую новость в отдельном файле.


А как мне потом из 20 файлов слить в один? Или лучше пробовать разобраться с БД?
(Добавление)
sadamss пишет:
andrewkard пишет:
Если уж не хотите в БД, храните каждую новость в отдельном файле.


А как мне потом из 20 файлов слить в один? Или лучше пробовать разобраться с БД?


Вроде должно получится но выдает ошибку
Parse error: syntax error, unexpected T_VARIABLE, expecting '(' in Z:\denwer\www\denwer\index.php on line 20

PHP:
скопировать код в буфер обмена
  1.  
  2. $result = array ();
  3.  
  4. $parts = array( 'news01', 'news02');
  5.  
  6. $end = array ('end01', 'end02');
  7.  
  8. $news = file("test.htm");
  9.  
  10. for($i = 0; $i <= count($news); $i++)
  11. {
  12.         for ($j = 0; $j <= 4; $j++)
  13.         {
  14.         if (strripos($news[$i], $parts[$j]))
  15.                 do {
  16.                         $result [$j] = $news [i + 1];
  17.                         }
  18.                         while $result($news[$i], $end[$j]);
  19.         }
  20. }
  21.         echo "<pre>";
  22.         var_dump ($result);
  23.         echo "</pre>";
  24.  
 
 Top
andrewkard
Отправлено: 22 Сентября, 2015 - 14:18:14
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


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




Ищите ошибку in Z:\denwer\www\denwer\index.php on line 20
по видимому скобку пропустили '('
 
 Top
sadamss
Отправлено: 22 Сентября, 2015 - 15:44:51
Post Id


Новичок


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


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




andrewkard пишет:
Ищите ошибку in Z:\denwer\www\denwer\index.php on line 20
по видимому скобку пропустили '('


Блин, так пишет ((
Fatal error: Function name must be a string in Z:\denwer\www\denwer\index.php on line 20

PHP:
скопировать код в буфер обмена
  1.  
  2. $result = array ();
  3.  
  4. $parts = array( 'news01', 'news02');
  5.  
  6. $end = array ('end01', 'end02');
  7.  
  8. $news = file("test.htm");
  9.  
  10. for($i = 0; $i <= count($news); $i++)
  11. {
  12.         for ($j = 0; $j <= 4; $j++)
  13.         {
  14.         if (strripos($news[$i], $parts[$j]))
  15.                 do {
  16.                         $result [$j] = $news [i + 1];
  17.                         }
  18.                         while ($result($news[$i], $end[$j]));
  19.         }
  20. }
  21.         echo "<pre>";
  22.         var_dump ($result);
  23.         echo "</pre>";
  24.  

(Добавление)
sadamss пишет:
andrewkard пишет:
Ищите ошибку in Z:\denwer\www\denwer\index.php on line 20
по видимому скобку пропустили '('


Блин, так пишет ((
Fatal error: Function name must be a string in Z:\denwer\www\denwer\index.php on line 20

PHP:
скопировать код в буфер обмена
  1.  
  2. $result = array ();
  3.  
  4. $parts = array( 'news01', 'news02');
  5.  
  6. $end = array ('end01', 'end02');
  7.  
  8. $news = file("test.htm");
  9.  
  10. for($i = 0; $i <= count($news); $i++)
  11. {
  12.         for ($j = 0; $j <= 4; $j++)
  13.         {
  14.         if (strripos($news[$i], $parts[$j]))
  15.                 do {
  16.                         $result [$j] = $news [i + 1];
  17.                         }
  18.                         while ($result($news[$i], $end[$j]));
  19.         }
  20. }
  21.         echo "<pre>";
  22.         var_dump ($result);
  23.         echo "</pre>";
  24.  


Ошибку устранил

PHP:
скопировать код в буфер обмена
  1. $result = array ();
  2.  
  3. $parts = array( 'news01', 'news02');
  4.  
  5. $end = array ('end01', 'end02');
  6.  
  7. $news = file("test.htm");
  8.  
  9. for($i = 0; $i <= count($news); $i++)
  10. {
  11.         for ($j = 0; $j <= 4; $j++)
  12.         {
  13.         if (strripos($news[$i], $parts[$j]))
  14.                 do {
  15.                         $result [$j] = $news [i + 1];
  16.                         }
  17.                         while (strripos($news[$i], $end[$j]));
  18.         }
  19. }
  20.         echo "<pre>";
  21.         var_dump ($result);
  22.         echo "</pre>";


Результат
CODE (html):
скопировать код в буфер обмена
  1. array(2) {
  2.   [0]=>
  3.   string(51) "xmlns:o="urn:schemas-microsoft-com:office:office"
  4. "
  5.   [1]=>
  6.   string(51) "xmlns:o="urn:schemas-microsoft-com:office:office"
  7. "
  8. }
 
 Top
andrewkard
Отправлено: 22 Сентября, 2015 - 20:41:11
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


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




У Вас все очень не правильно. Если не хотите работать с БД, копируйте каждую новость в отдельный файл. Уже без мусора. Не нужно хранить разметку. Обычно нужен только заголовок, текст, и иногда картинка. И можно делать это напрямую с сайта без танцев с MS Word.
 
 Top
sadamss
Отправлено: 23 Сентября, 2015 - 11:50:47
Post Id


Новичок


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


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




andrewkard пишет:
У Вас все очень не правильно. Если не хотите работать с БД, копируйте каждую новость в отдельный файл. Уже без мусора. Не нужно хранить разметку. Обычно нужен только заголовок, текст, и иногда картинка. И можно делать это напрямую с сайта без танцев с MS Word.


Проблема в том, что с БД еще не умею работать ((, пробую хоть такой вариант как временное решение. Его на сегодняшний день хватит. Просто есть такая программа как Sasplanet, я хочу сделать автоматическое отображение меток на этой карте, там есть поддержка HTML кода. У меня будет автоматически записываться в метки новости и отображаться. Пока только с помощью PHP решил реализовать эту задумку.

Если кто может помогите с второй частью задачи

Первую часть уже сделал, отрезает как надо, осталось правильно вложить в другой файл.

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $parts = array( 0 => 'news01', 1 =>'news02');
  4.  
  5. $end = array (0 =>'end01', 1 =>'end02');
  6.  
  7. $news = file("test.htm");
  8.  
  9. $result = array ();
  10.  
  11. $k = 0;
  12. $l = 0;
  13.  
  14. for($i = 0; $i <= count($news); $i++){
  15.        
  16.         for ($j = 0; $j <= count ($parts); $j++){
  17.        
  18.                 if (strpos ($news[$i], $parts[$j]))     {
  19.                         echo $i . "- begin" . "<br>";
  20.                         $k = $i;
  21.                         }
  22.                 if (strpos ($news[$i], $end[$j]))       {
  23.                         echo $i . "- end" . "<br>";
  24.                         $l = $i;
  25.                         $result = array_slice ($news, $k, $l - $k);
  26.                         var_dump ($result);
  27.                         echo "<br>";
  28.                         }
  29.         }
  30. }


Результат

CODE (html):
скопировать код в буфер обмена
  1. 6207- begin
  2. 6228- end
  3. array(21) { [0]=> string(78) " style='mso-ansi-language:UK;mso-no-proof:yes'>news01
  4.  
  5. " [1]=> string(9) " " [2]=> string(80) " " [5]=> string(67) "
  6.  
  7. string(60) " style='font-size:24.0pt'>Акция
  8. " [7]=> string(9) " " [8]=> string(80) " " [11]=> string(84) "
  9.  
  10. string(84) " lang=UK style='font-size:24.0pt;mso-ansi-language:UK'>сегодня string(96) " lang=UK style='font-size:24.0pt;mso-ansi-language:UK'> 21 09 2015 року
  11. " [14]=> string(77) "
  12.  
  13. "Мы будем работать " [15]=> string(70) " с новым греческим правительством, разумеется, это предложение " [16]=> string(91) " сохраняется с нашей стороны", — сказал Зайберт " [17]=> string(80) " журналистам в Берлине в понедельник. По его словам, комментировать " [18]=> string(80) " что-то конкретное пока рано, необходимо вначале дождаться формирования этого " [19]=> string(77) " нового правительства. Что же касается результатов воскресных выборов, то, " [20]=> string(79) " по словам Зайберта, правительство ФРГ обычно " }
  14. 6236- begin
  15. 6262- end
  16. array(26) { [0]=> string(57) " style='mso-no-proof:yes'>news02
  17. " [1]=> string(9) " " [2]=> string(78) " " [6]=> string(67) "
  18.  
  19. string(89) " style='font-size:24.0pt'>Акция string(84) " lang=UK style='font-size:24.0pt;mso-ansi-language:UK'>
  20. " [9]=> string(9) " " [10]=> string(78) " " [14]=> string(84) "
  21.  
  22. string(84) " lang=UK style='font-size:24.0pt;mso-ansi-language:UK'>сегодня string(86) " lang=UK style='font-size:24.0pt;mso-ansi-language:UK'> 21 09 2015 року string(98) " lang=UK style='font-size:24.0pt'>
  23. " [18]=> string(81) "
  24.  
  25. В Греции в воскресенье " [19]=> string(78) " прошли досрочные парламентские выборы. По итогам обработки 95% протоколов, " [20]=> string(74) " СИРИЗА Ципраса набирает 35,47% (145 кресел), " [21]=> string(76) " правоцентристская "Новая демократия" — 28,07% голосов (75 " [22]=> string(79) " мандатов). На третьем месте остается ультраправая "Золотая заря", " [23]=> string(81) " которая получила 6,98% голосов и 18 мест. "Независимые греки!" " [24]=> string(79) " (АНЭЛ) проходят в парламент с 3,69% голосов, у партии десять " [25]=> string(82) " мест.


Если кто может, подскажите метод по записи в файл Test.txt в теги news01 и end1
БД уже начал изучать, возможно что-то получится
 
 Top
andrewkard
Отправлено: 23 Сентября, 2015 - 18:39:24
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


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




sadamss пишет:
Если кто может, подскажите метод по записи в файл Test.txt в теги news01 и end1

Так же как и в мануале:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. //Текст для вставки
  4. $news = 'qwerty';
  5. //Файл для работы
  6. $file = 'test.txt';
  7. //Записываем в переменную содержимое файла
  8. $text = file_get_contents($file);
  9. //Начало новости в файле
  10. $start = '[[news01]]';
  11. //Ищем позицию начала вставки и если нашли
  12. if (strpos($text,$start) !== false){
  13.     //Позиция разрыва текста
  14.     $pos = strpos($text,$start)+strlen($start);
  15.     //Определяем новое содержимое
  16.     $content = substr($text, 0, $pos) . $news . substr($text, $pos);
  17.     // Пишем содержимое обратно в файл
  18.     file_put_contents($file, $content);
  19.     echo 'Файл изменен!';
  20. } else {
  21.     echo 'Ошибка записи!';
  22. };
  23. ?>
  24.  
 
 Top
sadamss
Отправлено: 24 Сентября, 2015 - 09:21:22
Post Id


Новичок


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


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




andrewkard пишет:
sadamss пишет:
Если кто может, подскажите метод по записи в файл Test.txt в теги news01 и end1

Так же как и в мануале:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. //Текст для вставки
  4. $news = 'qwerty';
  5. //Файл для работы
  6. $file = 'test.txt';
  7. //Записываем в переменную содержимое файла
  8. $text = file_get_contents($file);
  9. //Начало новости в файле
  10. $start = '[[news01]]';
  11. //Ищем позицию начала вставки и если нашли
  12. if (strpos($text,$start) !== false){
  13.     //Позиция разрыва текста
  14.     $pos = strpos($text,$start)+strlen($start);
  15.     //Определяем новое содержимое
  16.     $content = substr($text, 0, $pos) . $news . substr($text, $pos);
  17.     // Пишем содержимое обратно в файл
  18.     file_put_contents($file, $content);
  19.     echo 'Файл изменен!';
  20. } else {
  21.     echo 'Ошибка записи!';
  22. };
  23. ?>
  24.  


Спасибо Вам большое!
 
 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