2008-10-20 4 views
1

Я, например, для 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-ОКТ-08,04: 17: 53,761503BZZGR-62, B2761503BP22.EVA, ДПР, ДПР, Калибровка
2, HF60,13-OCT-08,04: 17: 53,761503BZZGR-62, B2761503BP22.EVA, DWP, DWP, калибровка
1, HF50,13-OCT-08,04: 17: 53, 761503BZZGR-62, B2761503BP22.EVA, DWP, DWP, калибровка

ответ

0

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

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

+0

я код снова и works..Thanks :) – Shiel 2008-10-21 13:33:10

1

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

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

Удачи :)

+0

Спасибо, это мне очень помогает ,, Im на следующем этапе моей программы :) – Shiel 2008-10-21 13:41:27

-1

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

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

Вот более жемчужно-маньяков код:

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> 
};