Как я могу извлечь текст, сохранить его, а затем вывести его в Интернет? - PullRequest
1 голос
/ 20 октября 2008

Я ищу для HF50 (HF $ HF), например, в «MyFile.txt», так что извлеченные данные должны быть сохранены в «save.txt». Данные в «save.txt» теперь извлекаются снова и заполняют параметры и выводятся на мою таблицу. Но когда я попробовал код, у меня нет выходных данных, и "save.txt" пусто .?

Var $ HF не распознается, что бы я ни печатал. Пожалуйста, помогите.

#! /usr/bin/perl

print "Content-type:text/html\r\n\r\n";

use CGI qw(:standard);
use strict;
use warnings;

my ($file,$line,$tester,$HF,$keyword);
my ($f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$f10,$f11,$f12,$f13,$f14,$f15,$f16,$f17,$f18,$f19);

my $keyWord=param('keyword');
$HF=$keyWord;

my $infile='MyFile.txt';
my $outfile='save.txt';

open (my $inhandle, '<',$infile) or die "Can't open $infile:$!";
open (my $outhandle, '>', $outfile) or die "Can't open $outfile:$!";


while (my $line=<$inhandle>){
if ($line=~ m/HF$HF/i) {
print {$outhandle}$line;
print $line;

print "<HTML>";
print "<head>";
print "<body bgcolor='#4682B4'>";
print "<title>FUSION SHIFT REPORT</title>";
print "<div align='left'>";
print "<FORM METHOD='get'        ACTION='http://Shielex.com/pe/mrigos/mainhead.html'>";
print "<b>SEACRH:</b>";
print "<INPUT TYPE='text' NAME='rec' SIZE='12' MAXLENGHT='40'>";
print "<INPUT TYPE='submit' value='go'>";
print "</form>";
print "<TABLE CELLPADDING='1' CELLSPACING='1' BORDER='1' bordercolor=black  width='100%'>";
print "<TR>";

print "<td width='11%'bgcolor='#00ff00'><font size='2'>TESTER No.</td>";
print "<td width='10%'bgcolor='#00ff00'><font size='2'>DATE</td>";

print "<td width='11%'bgcolor='#00ff00'><font size='2'>DEVICE NAME</td>";
print "<td bgcolor='#00ff00'><font size='2'>TEST PROGRAM</td>";

print "<td width='10%'bgcolor='#00ff00'><font size='2'>SMSLOT</td>";

print "<td width='12%'bgcolor='#00ff00'><font size='2'>LOADBOARD</td>";


print "<td width='10%'bgcolor='#00ff00'><font size='2'>CATEGORY</td>";
print "<td width='13%'bgcolor='#00ff00'><font size='2'>ROOT CAUSE 1</td>";
print "<td width='13%'bgcolor='#00ff00'><font size='2'>ROOT CAUSE 2</td>";
print "</tr>";
print "<TR>";

$file='save.txt';
open(F,$file)||die("Could not open $file");
while ($line=<F>)
{
my @cells=($f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$f10,$f11,$f12,$f13,$f14,$f15,$f16,$f17,$f18,$f19)=   split ',',$line;

print "<TD bgcolor='#ADD8E6'><font size='2'>$f2</TD>";
print "<TD bgcolor='#ADD8E6'><font size='2'>$f3</TD>";

print "<TD bgcolor='#ADD8E6'><font size='2'>$f5</TD>";
print "<TD bgcolor='#ADD8E6'><font size='2'>$f6</TD>";

print "<TD bgcolor='#ADD8E6'><font size='2'>$f8</TD>";

print "<TD bgcolor='#ADD8E6'><font size='2'>$f10</TD>";
print "<TD bgcolor='#ADD8E6'><font size='2'>$f17</TD>";
print "<TD bgcolor='#ADD8E6'><font size='2'>$f18</TD>";
print "<TD bgcolor='#ADD8E6'><font size='2'>$f19</TD>";
print "</tr>";

}
}
}
close F;
print "</TABLE>";
print "</body>";
print "<html>";


= Данные MyFile.txt =
1, HF50,13-OCT-08,04: 17: 53,761503BZZGR-62, B2761503BP22.EVA, ДПР, ДПР, калибровка * * 1014 2, HF60,13-OCT-08,04: 17: 53,761503BZZGR-62, B2761503BP22.EVA, ДПР, ДПР, калибровка
1, HF50,13-OCT-08,04: 17: 53,761503BZZGR-62, B2761503BP22.EVA, ДПР, ДПР, калибровка

Ответы [ 3 ]

1 голос
/ 20 октября 2008

Вы запускаете это как CGI-скрипт? В этом случае у вас, вероятно, нет разрешения на открытие файла для записи. Вы проверили журнал ошибок, чтобы увидеть, есть ли там ваше сообщение от die?

Возможно, вы захотите проверить Устранение неполадок сценариев Perl CGI . Пройдите все шаги, не пропуская ни одного. Когда вы застряли, у вас есть большая часть информации, которая вам нужна, чтобы помочь нам помочь вам.

Удачи,:)

0 голосов
/ 20 октября 2008

Во-первых, вывод Perl по своей природе буферизуется. Таким образом, если вы не используете какой-либо явный метод, нет никаких гарантий, что физическому файлу будет что читать. Как кто-то упомянул, вам придется как-то очистить вывод. Мои комментарии ниже в коде. (Вы также можете сделать это, закрыв выходной файл и открыв его в режиме append после того, как вы прочитали его.)

Во-вторых, не похоже, что вы хотите делать то, что похоже на то, что вы хотите сделать. Если все было полностью сброшено в файл, вы запрашиваете HTML-заголовок для каждой строки ввода . Так как я добавил строки во ввод, он распечатал так много окон поиска. Я не ожидаю, что это то, что вы хотели.

Вот еще perl-ified код:

use CGI qw(:standard);
use IO::File;
use strict;
use warnings;

my ($file,$line,$HF); #,$tester,$HF,$keyword);
# don't pollute -> my ($f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$f10
# ,$f11,$f12,$f13,$f14,$f15,$f16,$f17,$f18,$f19);


# my $keyWord=param('keyword'); <-- if you're not going to do anything with $keyWord
$HF=param('keyword'); # <- assign it to the variable you're going to use

my $infile='MyFile.txt';
my $outfile='save.txt';

open (my $inhandle, '<',$infile) or die "Can't open $infile:$!";
open (my $outhandle, '>', $outfile) or die "Can't open $outfile:$!";
# this would flush -> my $outhandle = IO::File->new( ">$outfile" );

print q{Content-type:text/html

<HTML>
<head>
<title>FUSION SHIFT REPORT</title>
<style type="text/css">
.header { background-color : #0f0; font-size : 12pt }
.detail { background-color : #ADD8E6; font-size : 12pt }
</style>
</head>
<body bgcolor='#4682B4'>
<div align='left'>
<FORM METHOD='get' ACTION='http://Shielex.com/pe/mrigos/mainhead.html'>
<b>SEACRH:</b>
<input type='text' name='rec' size='12' maxlenght='40'>
<input type='submit' value='go'>
</form>
<table cellpadding='1' cellspacing='1' border='1' bordercolor=black  width='100%'>
<tr>
  <td class="header" width='11%'>TESTER No.</td>
  <td class="header" width='10%'>DATE</td>
  <td class="header" width='11%'>DEVICE NAME</td>
  <td class="header" >TEST PROGRAM</td>
  <td class="header" width='10%'>SMSLOT</td>
  <td class="header" width='12%'>LOADBOARD</td>
  <td class="header" width='10%'>CATEGORY</td>
  <td class="header" width='13%'>ROOT CAUSE 1</td>
  <td class="header" width='13%'>ROOT CAUSE 2</td>
</tr>
}; 

my $hf_str = ",HF$HF,";
# OO -> $outhandle->autoflush(); <- set autoflush
while (my $line=<$inhandle>){
    next unless index( $line, $hf_str ) > -1;
    # OO -> $outhandle->print( $line );
    #       $outhandle->flush(); <- if autoflush not set, do it manually
    print *{$outhandle} $line;
    print "<tr>"
        , ( map { qq{<td class="detail">$_</td>} } 
            split ',', $line
           )
        , "</tr>\n"
        ;
}
print q{
</table>
</body>
</html>
};
0 голосов
/ 20 октября 2008

Вы никогда не закроете $outfile, поэтому он не покраснеет. Но, может быть, вы хотите вместо этого хранить данные в массиве?

Кроме того, вы всегда должны использовать форму с тремя аргументами open(), и вы также должны всегда использовать абсолютные пути при работе с программами CGI, поскольку во многих ситуациях «текущий каталог» - это не то, что вы думаете есть.

...