2008-10-20 22 views
1

Je suis searching pour HF50 (HF $ HF) par exemple dans "MyFile.txt" de sorte que les données extraites doivent enregistrer dans "save.txt". Les données sur "save.txt" sont extraites à nouveau et remplissent les paramètres et les sorties sur ma table. Mais quand j'ai essayé le code, je n'ai pas de sortie et "save.txt" est vide.Comment puis-je extraire du texte, l'enregistrer, puis le sortir sur le Web?

Var $ HF n'est pas reconnu quel que soit mon type. S'il vous plaît aider.

#! /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>"; 


= données myfile.txt =
1, HF50,13-OCT-08,04: 17: 53,761503BZZGR-62, B2761503BP22.EVA, DWP, DWP, Étalonnage
2, HF60,13-OCT-08,04: 17: 53,761503BZZGR-62, B2761503BP22.EVA, DWP, DWP, étalonnage
1, HF50,13-OCT-08,04: 17: 53, 761503BZZGR-62, B2761503BP22.EVA, DWP, DWP, calibrage

Répondre

0

Vous ne fermez jamais $outfile afin qu'il ne soit pas vidé. Mais peut-être que vous voulez stocker les données dans un tableau à la place? En outre, vous devez toujours utiliser la forme à trois arguments de open() et vous devez toujours utiliser des chemins absolus lorsque vous travaillez avec des programmes CGI, car dans de nombreux cas, le "répertoire courant" n'est pas ce que vous pensez qu'il est .

+0

je code encore et works..Thanks :) Merci – Shiel

1

Exécutez-vous cela en tant que script CGI? Dans ce cas, vous n'avez probablement pas l'autorisation d'ouvrir un fichier pour l'écriture. Avez-vous vérifié le journal des erreurs pour voir si votre message de die est là? Il se peut que vous souhaitiez vérifier Troubleshooting Perl CGI scripts. Passez en revue toutes les étapes sans en sauter aucune. Lorsque vous êtes coincé, vous avez la plupart des informations dont vous avez besoin pour nous aider à vous aider.

Bonne chance, :)

+0

, il me aide beaucoup ,, Im sur la prochaine étape de mon programme :) – Shiel

-1

D'abord, la sortie de Perl est par nature tamponne. Donc, sauf si vous utilisez une méthode explicite, il n'y a aucune garantie que le fichier physique aura quelque chose à lire. Comme quelqu'un l'a mentionné, vous devrez vider la sortie en quelque sorte. Mes commentaires sont ci-dessous dans le code. (Vous pouvez également le faire en fermant le fichier de sortie et en l'ouvrant dans ajouter le mode après l'avoir lu.)

Deuxièmement, il ne semble pas que vous vouliez faire ce que vous voulez faire. Si tout a été parfaitement copié dans le fichier, vous demandez un en-tête html par ligne d'entrée. Donc, comme j'ai ajouté des lignes dans l'entrée, il a imprimé autant de boîtes de recherche. Je ne pense pas que ce soit ce que tu voulais.

est ici un plus perl-ified code:

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