我想解析日誌文件並將它們轉換爲.csv文件。我在分割功能方面遇到問題。例如,我在日誌文件中有以下內容:21a94551,00:00:59.643; ERROR;。當我嘗試分割逗號(,)和分號(;)時,輸出csv文件中的時間戳將丟失.643。我想保持完整的時間(00:00:59.643
)。我在日誌文件中有多行(全部使用不同的數字),所以這些值不是顯式的。使用Text :: CSV_XS分割函數
當我使用拆分後打印功能函數值被輸出到屏幕上確定,但在CSV文件
我是新來的Perl。有人能解釋我做錯了什麼嗎?我認爲這個問題可能與字符串的處理方式有關。
use strict;
use Cwd;
use Excel::Writer::XLSX;
use Text::CSV_XS;
use Spreadsheet::Read;
my $dirname = getcwd; # Set the directory to current working directory.
opendir (DIR, $dirname) || die; # Open the current directory
my @FileNameList = readdir(DIR); # Load the names of files in to an array
foreach (@FileNameList) #Read each of the file names
{
my $FileName = $_;
my $Output;
if ($FileName =~ m/iusp_\d+.log/)
{
print ("\n". $FileName." \n Correct Log File Found");
open (my $file, "<", $FileName);
while (<$file>) {
chomp; # Remove the \n from the last field
my $Line = $_; # Create the variable SLine and place the contents of the current line there
if ($Line =~ m/ERROR/) # Select any line that has "ERROR" inside it.
{
my @fields = split /[,;]/, $Line; # Split up the line $Line by ", ;"
my $csv = Text::CSV_XS->new(); # Create new CSV
$csv->combine(@fields);
my $csvLine = $csv->string();
print $csvLine, "\n";
{
$Output = $csvLine . "\n";
}
my $OutputFileName = $FileName . ".csv";
print("\n Saving File:" . $OutputFileName);
open(MyOutputFile, ">>$OutputFileName");
print MyOutputFile $Output;
} #End of IF Statement
} #End of while statement
謝謝你,我想,和它的作品在屏幕上,但沒有得到的結果相同.csv文件。 – 2014-09-14 11:07:25
不客氣。我建議如下。 1.接受提供的答案之一,因爲他們解決您的原始問題。 2.發佈一個新問題,但在此之前...... 3.刪除與您的問題無關的所有代碼(請閱讀http://sscce.org和http://perlmonks.org/?node_id=745674) – toolic 2014-09-14 12:30:35