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
Форумы портала PHP.SU :: Версия для печати :: Почему не работает этот код?
Форумы портала PHP.SU » » Если скрипт не работает » Почему не работает этот код?

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

1. roni10 - 01 Октября, 2012 - 01:50:27 - перейти к сообщению
Программа была написана на С# и я попытался перевести ее на PHP. Задача заключается в том, что надо прочитать текстовый файл, и выбрать из него нужную информацию, записать ее в другой текстовый файл и потом удалять каждую 31ю строку! Программа не работает... Не понимаю почему! Кто понимает и может помочь помогите пожалуйста!!!

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.         function isDigit( $c ) // на цыфру
  3.     {
  4.         if ($c == '0' || $c == '1' || $c == '2' || $c == '3' || $c == '4' ||
  5.             $c == '5' || $c == '6' || $c == '7' || $c == '8' || $c == '9')
  6.         {
  7.             return true;
  8.         }
  9.         else {return false;}
  10.     }
  11.        
  12.         function isDate1( $s ) //26.09.2012
  13.     {
  14.         if (strlen($s) != 10)
  15.         {
  16.             return false;
  17.         }
  18.         if (isDigit($s[0]) === true   &&   isDigit($s[1]) === true   &&  
  19.             $s[2] == '.'   &&
  20.             isDigit($s[3]) === true   &&   isDigit($s[4]) === true   &&
  21.             $s[5] == '.'   &&  
  22.             isDigit($s[6]) === true   &&   isDigit($s[7]) === true   &&  
  23.             isDigit($s[8]) === true   &&   isDigit($s[9]) === true)
  24.         {
  25.             return true;
  26.         }
  27.         else {return false;}
  28.     }
  29.        
  30.         function isDate2( $s ) // 6.09.2012
  31.     {
  32.         if (strlen($s) != 9)
  33.         {
  34.             return false;
  35.         }
  36.         if (isDigit($s[0]) === true   &&  
  37.             $s[1] == '.'   &&
  38.             isDigit($s[2]) === true   &&   isDigit($s[3]) === true   &&
  39.             $s[4] == '.'   &&  
  40.             isDigit($s[5]) === true   &&   isDigit($s[6]) === true   &&  
  41.             isDigit($s[7]) === true   &&   isDigit($s[8]) === true)
  42.         {
  43.             return true;
  44.         }
  45.         else {return false;}
  46.     }
  47.        
  48.         function isCurs( $s ) // 8.27 UAH
  49.     {
  50.         if($s[strlen($s)-3] == 'U'   &&   $s[strlen($s)-2] == 'A'   &&   $s[strlen($s)-1] == 'H')
  51.         {
  52.             return true;
  53.         }
  54.         else {return false;}
  55.     }
  56.  
  57.         $countCurs = 0;
  58.         $countDate = 0;
  59.         $file_read = fopen('read.txt', "r");
  60.         while (!feof($file_read))
  61.         {
  62.             $str = fgets($file_read);
  63.             //на тег
  64.             if( strpos($str, "<td") >= 0 )
  65.             {
  66.                 $i = strpos($str, "<td");
  67.                 while ($str[$i] != ">")
  68.                 {
  69.                     $i++;
  70.                 }
  71.                 $j = $i;
  72.                 while($str[$j] != '<')
  73.                 {
  74.                     $j++;
  75.                 }
  76.                                
  77.                 $res = substr($str ,$i+1, $j-$i-1);
  78.                 $res = str_replace($res," ", "");
  79.  
  80.                                 //дозапись в файл
  81.                                 $file_result = fopen ("result.txt","r+");
  82.                                 if ( !$file_result )
  83.                                 {
  84.                                         echo("Ошибка открытия файла");
  85.                                 }
  86.                                 else
  87.                                 {
  88.                                         if(isDate1($res) === true   ||   isDate2($res) === true)
  89.                                         {
  90.                                                 $countDate++;
  91.                                                 if($countDate == 1)   { fwrite($file_result, $res); }
  92.                                         }
  93.                                         if(isCurs($res) === true)
  94.                                         {
  95.                                                 $countCurs++;
  96.                                                 if($countCurs == 1)   { fwrite($file_result, "   USD   $res"); }
  97.                                                 if($countCurs == 2)   { fwrite($file_result, "   EUR   $res"); }
  98.                                                 if($countCurs == 3)   {fwrite($file_result, "   AMADEUS   $res\n"); }
  99.                                         }
  100.                                 }
  101.                         }
  102.                        
  103.                         //Удалим 31 скроку из файла
  104.                         $max = 30;
  105.                         $file = file("result.txt");
  106.                         for($i = 0; $i < sizeof($file); $i++)
  107.                         {
  108.                                 if($i > $max) unset($file[0]);
  109.                         }
  110.                         $res = fopen("result.txt", "a");
  111.                         fwrite($res, implode("", $file));
  112.         }
  113.                
  114.         fclose ($file_read);
  115.         fclose($file_result);
  116.         fclose($res);
  117. ?>
2. Alho - 01 Октября, 2012 - 04:04:57 - перейти к сообщению
1) Пользуйтесь тегом [PHP] для того, что бы удобно было читать вашу простыню кода тем, кто может вам помочь.
2) Прочитайте - http://phpfaq[dot]ru/debug
3) Формально ошибок в коде не вижу, хотя некоторые процедуры выглядять не совсем... правильно. Выложите пример страницы, которую пытаетесь парсить - так будет на порядок легче разобраться.
3. AlexAnder - 01 Октября, 2012 - 10:04:16 - перейти к сообщению
Цитата:
надо прочитать текстовый файл, и выбрать из него нужную информацию, записать ее в другой текстовый файл и потом удалять каждую 31ю строку!

Спойлер (Отобразить)
4. roni10 - 01 Октября, 2012 - 13:28:33 - перейти к сообщению
AlexAnder пишет:
функция прямиком из govnokod.ru ? Не понял

Вот знаете, писать такое как Вы может каждый, а действительно помочь единицы! Я начинающий программист и пишу как умею в тупую без наворотов, и Вы, я уверен, когда начинали писать код, то он был тоже из "govnokod.ru", как вы выразились... В данной ситуации могу вам сделать аналогичное замечание про Ваш код, так как он не прокоментирован и мне, как новичку, не совсем понятно что там написано и как оно работает!
(Добавление)
Скажите мне конкретно, что работает не так и почему, если вам не сложно!!! Я так понимаю мне нужно изменить свой код на тот что Вы написали только добавить парс.??? И почему ошибка на цыкле:

$i = strpos($str, "<td");
while ($str[$i] !== '>')
{
$i++;
}
Что с ним не так?
(Добавление)
Alho пишет:
1) Пользуйтесь тегом [PHP] для того, что бы удобно было читать вашу простыню кода тем, кто может вам помочь.
2) Прочитайте - http://phpfaq[dot]ru/debug
3) Формально ошибок в коде не вижу, хотя некоторые процедуры выглядять не совсем... правильно. Выложите пример страницы, которую пытаетесь парсить - так будет на порядок легче разобраться.




Выдает ошибку на цыкле while ($str[$i] !== '>') {$i++;}, вот такого рода: "Fatal error: Maximum execution time of 30 seconds exceeded in C:\Program Files\Apache\htdocs\test-domain3\www\sourcedata.php on line 72" - почему?

Вот текст который надо отпарсить:

<table width="157" style="border:1px solid #D7D7D7;text-align:center; font-weight:bold; font-family:'Arial Narrow',Arial,sans-serif; color:#000; padding-bottom:10px; font-size:1.35em;border-collapse:collapse">
<tr>
<td style="border:1px solid #D7D7D7;font-size:10px;margin:0;padding:3px 0;height:10px;background-color:#EAEAEA;font-weight:bold;">ММВБ</td>
<td style="border:1px solid #D7D7D7;background: #EAEAEA url(/bitrix/templates/books/images/footer-currency-flags.gif) 5px 5px no-repeat;font-size:10px;margin:0;padding:3px 0 3px 19px;height:10px;background-color:#EAEAEA;">USD</td>
<td style="border:1px solid #D7D7D7;background: #EAEAEA url(/bitrix/templates/books/images/footer-currency-flags.gif) 5px -35px no-repeat;font-size:10px;margin:0;padding:3px 0 3px 19px;height:10px;background-color:#EAEAEA;">EUR</td>
</tr>
<tr>
<td style="border:1px solid #D7D7D7;font-size:10px;margin:0;padding:3px 0;height:10px;font-weight:normal;"> 26.09.2012</td>
<td style="border:1px solid #D7D7D7;font-size:10px;margin:0;padding:3px 0;height:10px;font-weight:normal;">8.18 UAH</td>
<td style="border:1px solid #D7D7D7;font-size:10px;margin:0;padding:3px 0;height:10px;font-weight:normal;">10.67 UAH</td>
</tr>
<tr>
<td rowspan="" style="border:1px solid #D7D7D7;font-size:10px;margin:0;padding:3px 0;height:10px;font-weight:normal;font-weight:bold;background: #EAEAEA;">AMADEUS</td>
<td colspan="2" style="border:1px solid #D7D7D7;text-indent: 17px;border-bottom:1px solid #D7D7D7;font-size:10px;margin:0;padding:3px 0;height:10px;font-weight:bold;background: #EAEAEA url(/bitrix/templates/books/images/footer-currency-flags.gif) 31px 5px no-repeat;">USD</td>
</tr>
<tr>
<td rowspan="" style="border:1px solid #D7D7D7;font-size:10px;margin:0;padding:3px 0;height:10px;font-weight:normal;">26.09.2012</td>
<td colspan="2" style="border:1px solid #D7D7D7;border-bottom:1px solid #D7D7D7;font-size:10px;margin:0;padding:3px 0;height:10px;font-weight:normal;">7.9930 UAH</td>
</tr>
</table>
5. AlexAnder - 01 Октября, 2012 - 14:52:59 - перейти к сообщению
roni10 пишет:
Вы, я уверен, когда начинали писать код, то он был тоже из "govnokod.ru

да я и сейчас так пишу Ха-ха
мне еще далеко до чистого кода, а коменты вообще отдельная тема Ха-ха

roni10 пишет:
он не прокоментирован

Исправил Улыбка

 

Powered by ExBB FM 1.0 RC1