Я хочу извлечь и зарегистрировать различные параметры модема 3G, так как есть периодические пропадания. Таким образом, я использую wget для чтения 3Ginfo.html
с модема 3G и помещаю содержимое в файл contents.txt
. Использование Notepad++ для открытия этого файла показывает все данные.
Из-за моей репутации я не могу размещать изображения, поэтому приведенный ниже код — лучшее, что я могу сделать; из Notepad ++ (с включенным просмотром всех символов) я получаю:
<tr>[LF]
<td class='hd'>Signal Strength:</td>[LF]
<td>[LF]
-72[CR]
 (dBm) (High)</td>[LF]
</tr>[LF]
Однако, когда файл читается построчно из Perl, становится ясно, что строк меньше, чем сообщает Notepad++, и данные отсутствуют. В этом случае фактическое значение силы сигнала отсутствует.
Вот код Perl для чтения файла:
open hLOGFILE, "<output.txt";
while (<hLOGFILE>)
{
print "Line no $. Text is $_ ";
}
Вот результат (в виде текста, потому что я пока не могу размещать изображения):
Line no 98 Text is <tr>
Line no 99 Text is <td class='hd'>Signal Strength:</td>
Line no 100 Text is <td>
 (dBm) (High)</td>
Line no 102 Text is </tr>
Ясно, что есть пропущенные строки, и это связано с терминатором конца строки <cr>
. Я попытался проглотить файл, и строки все еще отсутствуют.
Помимо чтения байт за байтом, а затем попытки разобрать файл таким образом (что не очень привлекательно), я не могу найти решения.
Мой план состоит в том, чтобы просто извлекать и регистрировать интересующие строки каждую минуту или около того.
Я попытался открыть файл, указав различные кодировки, но все равно не радуюсь. Если Notepad++ может читать и отображать все данные, почему он не работает в Perl? При использовании more
из командной строки Windows XP это показывает, что данные также отсутствуют.
Когда я просматриваю исходный код из хрома, я получаю
<tr>
<td class='hd'>Received Signal Code Power(RSCP):</td>
<td align='center'> -78 dBm</td>
</tr>